在 .NET 中打开任何 Solidworks 2015 3d 模型格式

Open any Solidworks 2015 3d model format in .NET

我们有在 SolidWorks 2015 中设计的产品模型。在 .NET (C#) 桌面应用程序中,我需要加载该模型(3d 显示已使用 OpenGL 实现)和能够理解它的各个部分(它们的尺寸和相对位置)。
有什么方法可以使用任何Solidworks 2015 export formats?

有两个相关的 SO 问题
“用于打开 CAD 的 .NET 库 models/drawings”(2012)
"Importing AutoCAD/Solidworks drawings/objects into winforms?" (2010)

我的 Google 搜索:
"X3D.NET"(.NET 的 X3D 库)- 看起来已经死了
"Sharky" - 已死(无法下载)

有商业库可以读取原生 Solidworks 文件并为您提供所需的信息,但我想这不是您想要的。

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

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

是否可以选择编写 Solidworks plugin/script,它可以将每个零件导出为单独的 STL(或其他简单格式)?

如果您拥有 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();

找到了通过他们的母语 3DXML format. You need to register at Dassault Systemes 获得他们的 "DS Passport" 的方法。它是免费的——您甚至不需要 Solid Works 许可证,但注册过程(收到最终确认)可能需要几个小时。

注册成功后,下载XSD组文件(目前下载link为this)。

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

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

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