テッセレーションにより、3Dエンティティを表現するために使用される三角形の数を制御できます。サーフェス許容差のパラメータを使用します。これは、ソース解析サーフェスと三角形メッシュ間の最大距離です。許容差がより正確であるほど、より多くの三角形が得られます。
ODA SDKsを使用して異なるファイル(.dwg、.dgn、.rvtなど)をレンダリングするには、BrepRendererにサーフェス許容差情報を提供する必要があります。これは、ベクトル化に基づく他の操作、例えばエクスポート(STL、Collada)や異なる形式間の変換についても同様です。BrepRendererは、B-Repジオメトリデータのテッセレーション計算、キャッシング、およびOdGiCommonDrawオブジェクトへの描画を実行するライブラリです。サーフェス許容差は、その主要な入力パラメータの1つです。
偏差は、OdGiCommonDrawクラスの継承者によって仮想関数で提供される必要があります。
virtual double deviation(
const OdGiDeviationType deviationType,
const OdGePoint3d& pointOnCurve) const;
テッセレーションの場合、deviationTypeはkOdGiMaxDevForFacetである必要があり、パースペクティブモードがオンになっている場合は、pointOnCurveにレンダリングオブジェクト上の点が含まれている必要があります。
OdGsViewクラスの現在の実装は、物理ピクセルサイズに基づいて現在のカメラ位置の偏差を計算します。これは、3Dオブジェクトにズームインするほど、テッセレーションがより良く(より詳細に、しかしより多くの三角形で)計算されることを意味します。オブジェクトからズームアウトすると、テッセレーションはより粗くなります。この効果はOdaMfcAppサンプルアプリケーションで見ることができます。例えば、任意の3Dソリッドを開き、フラットシェードモードでベクトル化します(フラットモードでは三角形がよりよく見えます)。次に、ズームイン/アウトを試してRegenをクリックすると、三角形の数が変化することがわかります。
これは、異なる表面許容差を持つレンダリングの例です。上の数値は許容差、下の数値は三角形の数です。
呼び出し元が表面許容差を制御したい場合は、独自のビュークラスで独自の「偏差」関数を実装する必要があります。例としては、STLModule::exportSTL 関数があります。これは、許容差を入力パラメータとして取得し、エクスポートビュークラスに格納します。
class StubVectorizeView : public OdGsBaseVectorizeViewDef, public OdGiGeometrySimplifier
{
double m_dDeviation;
…
そして、次のように返します。
virtual double deviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve) const
{
return m_dDeviation;
}