この記事には、ボディの面を分割する方法に関する情報が含まれています。
ボディの面が、内側ループと外側ループの2つのループで構成されている場合があります。その面を2つに分割して、結果として得られる各面が1つのループで構成されるようにしたい場合があります。このような操作を実行するには、splitFace() メソッドを使用します。
void Body::splitFace(Face* pFace,
const OdGePlane& pPlane,
std::vector* pNewOuter = NULL,
std::vector* pNewInner = NULL);
このメソッドは、ボディの面をその平面で分割し、元のトポロジーを保持します。
例
下の図の立方体には中央に穴があるため、ボディ全体は10個の面で構成されています。
上面は、外部ループと内部ループの2つのループで構成されています。隣接するすべての面は、4つのエッジを持つ外部ループで構成されています。
下の画像にある赤い平面は分割平面であり、赤いベクトルはその法線です。
分割後、ボディは11個の面を持ちます(元の上面は削除され、新しい2つの面が追加されます)。新しい各面には外部ループ(緑色のポリライン n1-n8 および s1-s8)があります。エッジ e4 と e5 はそれぞれエッジ n1 と s1 とペアになっています。そして、隣接する面は5つのエッジを持つ1つのループで構成されています。
分割平面に対する位置に応じて、結果として得られる面を取得することが可能です。
pNewOuterオプションパラメータには、平面法線ベクトルが指す面(n1-n8ループで定義される面)が含まれます。
pNewInnerオプションパラメータには、反対ベクトルが指すすべての面(s1-s8ループで定義される面)が含まれます。