OdGiGeometrySimplifierクラス(Teighaのexamples/extensionsソースコード内)は、ジオメトリコンベア内で頻繁に使用され、Giジオメトリプリミティブをより単純な形式に変換します。たとえば、ポリゴンは一連の三角形に簡素化でき、テキストは一連の三角形とポリラインに簡素化できます。各種類のジオメトリプリミティブの簡素化メソッドは、簡素化後に、より単純なレベルのジオメトリの仮想メソッドを呼び出します。
このトピックでは、プリミティブ簡素化メソッドによって実際に呼び出される可能性のあるメソッドと、必要な簡素化レベルでジオメトリを取得するためにOdGiGeometrySimplifierのどのメソッドをオーバーライドする必要があるかを理解するのに役立ちます。
ジオメトリコンベアには、高レベルのジオメトリプリミティブ(一連の低レベルジオメトリプリミティブに簡素化される複雑なプリミティブ)と、低レベルのジオメトリプリミティブ(一連の非コンベアプリミティブに簡素化できる)を含めることができます。
高レベルのジオメトリプリミティブは、エッジ、点の行、ポリポイント、テキスト、ラスター画像、ポリライン、TrueTypeフォントのポリドローです。これらのプリミティブは、低レベルのコンベアジオメトリプリミティブに簡素化されます。
低レベルのジオメトリプリミティブは、円、円弧、楕円弧、NURBS曲線、ポリライン、ポリゴンシェル、メッシュです。これらのプリミティブは、非コンベアジオメトリプリミティブに簡素化されます。
次の簡素化ステップは、generateXXXメソッドのセットです。これらは、シェルやメッシュなどの複雑なプリミティブに対して呼び出されます。これらのメソッドは、出力に必要なジオメトリの種類(プリミティブが塗りつぶされているか、アウトライン化されているか)を確認した後に呼び出され、サブプリミティブの簡素化を次のレベルのメソッドに委譲します。
次の簡素化ステップは、シェル/メッシュ面の生成に実際に行われます。shellFaceOut/meshFaceOutメソッドは、面の三角形分割を実行し、triangleOutメソッドを使用して結果の三角形分割を出力します。
メソッド引数にインデックスを持つtriangleOut/polylineOutメソッドは、シェル/メッシュプリミティブの簡素化の結果として呼び出されます。これらのメソッドがオーバーライドされていない場合、引数リストに頂点リストを持つpolygonOut/polylineOutメソッドを呼び出します。
簡素化レベルの最終的なポイントは、polygonOut/polylineOutメソッドです。メンバーコードが以前の簡素化レベルをオーバーライドしていない場合、これらは確実にオーバーライドされなければなりません。polygonOutが呼び出されたがオーバーライドされていない場合、shellProcメソッドを呼び出すことができ、クライアントコードが他の簡素化レベルをオーバーライドしていない場合、アプリケーションは無限ループに陥る可能性があります。polylineOutメソッドは、メンバーコードで呼び出されたがオーバーライドされていない場合、アサートメッセージ(デバッグ構成のみ)を生成します。