3

我们有在 SolidWorks 2015 中设计的产品模型。在 .NET (C#) 桌面应用程序中,我需要加载该模型(已使用 OpenGL 实现的 3d 显示)并能够理解其部件(它们的尺寸和相对位置)。有没有办法使用任何Solidworks 2015 导出格式
来做到这一点?

有两个相关的 SO 问题
“.NET library to open cad models/drawings”(2012)
“将 AutoCAD/Solidworks 图纸/对象导入 winforms?” (2010)

我的 Google 搜索:
“X3D.NET”(.NET 的 X3D 库)- 看起来死了
“Sharky”- 死了(没有可用下载)

4

3 回答 3

4

通过他们的原生3DXML格式找到了一种方法。您需要在 Dassault Systemes 注册以获得他们的“DS Passport”。它是免费的 - 您甚至不需要 Solid Works 许可证,但注册过程(收到最终确认)可能需要几个小时。

注册成功后,下载一组XSD文件(目前下载链接是这个)。

使用 Visual Studio 工具xsd.exe /c 3DXML.xsd生成用于加载 3DXML 结构文件的 C#(反)序列化类NameSetTree.3dxml(部件名称绑定到 3DXML 文件/即 zip 存档/中的物理文件,它们在 3d 空间中的相对位置和旋转以及通过程序集的重复。

键入xsd.exe /c 3DXMLMesh.xsd以生成用于读取每个部分的 3d 表示的 C# 类 (TessPart_*.3DRep)。

解压 3DXML 文件,实现对所含NameSetTree.3dxml及所有部分的读取*.3DRep

于 2015-05-03T20:01:23.863 回答
1

如果您拥有 SolidWorks 许可证,则可以使用 api 以编程方式打开模型并询问特征和几何形状。这是一个获取草图和特征尺寸的简单示例。

SldWorks swApp = new SldWorks();
int nOpenErrors = 0, nOpenWarnings = 0;
string sConfig = string.Empty;
IModelDoc2 doc = swApp.OpenDoc6(sModelName,  (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, sConfig, ref nOpenErrors, ref nOpenWarnings);

 // extract the features and dimensions
 Feature feat = doc.FirstFeature();
 while(feat != null)
 {
     string sFeatName = feat.Name;
     IDisplayDimension dispDim = feat.GetFirstDisplayDimension();
     if (dispDim != null)
     {
          Dimension dim = dispDim.GetDimension();
          if(dim != null)
          {
            // dim.FullName;
            // dim.GetSystemValue2(sConfig);
          }
          feat = feat.GetNextFeature();
      }
  }

  swApp.ExitApp();
于 2015-04-16T20:24:39.977 回答
0

有一些商业库可以读取本地 Solidworks 文件并为您提供所需的信息,但我想这不是您的想法。

一些导出格式(如 STL)是非常简单的格式,您可以在其中轻松找到阅读器库。STL 是三角形网格格式,因此也很容易获得几何形状的大小和位置。然而,这些简单的格式没有像零件/装配关系这样的元信息。您可以通过查看几何图形来识别未连接的物体。这可能与您在 Solidworks 中指定为“零件”的内容相同,但并非总是如此。一个零件最终可能是多个实体,如果多个零件接触并且 Solidworks STL 导出器选择合并它们(也许永远不会,您必须尝试),则它们最终可能成为一个实体。

我猜列表中的大多数格式都会有没有任何零件信息的问题。可能有一些更复杂的格式包含这些信息(如本机文件格式本身),但是您将很难找到能够读取它的(非商业)库。

是否可以选择编写一个 Solidworks 插件/脚本,它可以将每个部分导出为单独的 STL(或其他简单格式)?

于 2015-03-30T09:17:51.667 回答