STL (Stereolithography) 形式は、オブジェクトの表面を三角形メッシュとして記述するためのシンプルで公開された形式です。各三角形は、三次元直交座標系を使用して、単位法線と頂点(右手系で順序付け)によって表されます。
インポート手順を実行するには、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); これらの関数の違いは、最初の関数がファイルからインポートするのに対し、2番目の関数はストリームからインポートすることです。
STL データがインポートされると、以下の関数を使用して、頂点、ファセット(三角形)、およびファセット法線の配列としてシェルを取得できます。
OdStlImportRes getShell(OdGePoint3dArray &vertices,
OdUInt32Array &faces,
OdGeVector3dArray &normals,
OdUInt8 flags = 0) const
ここで、フラグは以下の値を取ることができます。
- 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);