Drawings SDK:从 STL 格式导入

STL(立体光刻)格式是一种简单、公开文档化的格式,用于将对象的表面描述为三角形网格。每个三角形都通过单位法线和顶点(按右手定则排序)使用三维笛卡尔坐标系表示。

使用 STL 导入模块执行导入过程:

STLImport_xx.yy_zz.tx

其中:

  • xx — Drawings SDK 主版本号。
  • yy — Drawings SDK 次版本号。
  • zz — Microsoft® Visual C++® 编译器版本号。例如,对于 Microsoft Visual Studio® 2015 版本,该数字为 14。

要使用 STLImport 模块导入 .stl 文件:

  1. 加载 STLImport 模块。
  2. 创建一个 OdStlImport 对象。
  3. 使用以下函数之一:
    • OdStlImportRes import(const OdString &strFilePath);
    • OdStlImportRes import(const OdStreamBufPtr& pStreamBuf);
    • 这两个函数的区别在于,第一个函数从文件导入,而第二个函数从流导入。

导入 STL 数据后,可以使用以下函数获取由顶点、面(三角形)和面法线组成的壳:

OdStlImportRes getShell(OdGePoint3dArray &vertices,
                        OdUInt32Array &faces,
                        OdGeVector3dArray &normals,
                        OdUInt8 flags = 0) const

其中 flags 可以取以下值:

  • kFixNormals — 检查法线并在以下情况下进行校正:
    • 零法线
    • 法线与根据右手定则计算的法线不匹配
      如果设置此标志,则法线数组包含面上的法线。
  • kUnifyDuplicatedVertices — 统一重复的顶点。如果设置此标志,则顶点数组仅包含不重复的顶点。
  • kCalcNormalsAtVertices — 对顶点处的法线进行原始计算。顶点处的法线可用于平滑着色渲染模式。
    • 如果未设置 kUnifyDuplicatedVertices 标志,则顶点处的法线简单地等于包含该顶点的面的法线。
    • 如果设置了 kUnifyDuplicatedVertices 标志,则通过平均包含该顶点的面上的法线来计算顶点处的法线。
      如果设置此标志,则法线数组包含顶点处的法线。

注意:这种计算方法非常粗糙,仅适用于平滑的壳。例如,对于立方体,此方法会产生较差的结果。在这种情况下,用户端需要更复杂的算法。

有关如何使用获取的面和顶点数组创建实体 (FacetModeler::Body) 或实体 (OdDb3dSolidPtr) 的更多信息,请参阅以下内容:

从 .stl 文件导入的示例

此示例演示了从 .stl 文件导入并使用 getShell() 函数获取壳。

STLFileImport::OdStlImportModulePtr stlModule = odrxDynamicLinker()->loadModule(OdStlImportModuleName);
STLFileImport::OdStlImportPtr stlImport = stlModule->create();

stlImport->import(fileName);

OdGePoint3dArray vertices;
OdUInt32Array faces;
OdGeVector3dArray normals;

OdUInt8 flags = 0;
SETBIT(flags, STLFileImport::OdStlImport::kUnifyDuplicatedVertices, true);
stlImport->getShell(vertices, faces, normals, flags);

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用