STL(立体光刻)格式是一种简单、公开文档化的格式,用于将对象的表面描述为三角形网格。每个三角形都通过单位法线和顶点(按右手定则排序)使用三维笛卡尔坐标系表示。
使用 STL 导入模块执行导入过程:
STLImport_xx.yy_zz.tx
其中:
- xx — Drawings SDK 主版本号。
- yy — Drawings SDK 次版本号。
- zz — Microsoft® Visual C++® 编译器版本号。例如,对于 Microsoft Visual Studio® 2015 版本,该数字为 14。
要使用 STLImport 模块导入 .stl 文件:
- 加载 STLImport 模块。
- 创建一个 OdStlImport 对象。
- 使用以下函数之一:
- 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);