C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

NURBS面を円筒面に変換する7

こちらの続きです。
NURBS面を円筒面に変換する6 - C#ATIA

前回のものですが、正しく判断出来ていませんでした。
原因を調べたのですが、重心位置が正しく取得出来ていませんでした。

BRepFaceオブジェクトの重心のプロパティが見つけられなかった為、
TemporaryBRepManagerで面をコピーし(これはボディになります)
ボディの重心を取得していました。
その場合、こんな感じです。

緑の面の重心が赤の位置だと求められています。
間違いも程がある・・・。

どうやら、元のボディの重心を返してきているようです。
いや、それも正しくないな・・・。

良く調べると、BRepFaceの重心プロパティがありました。
Fusion 360 Help

その為、この様に修正すると正しくなりました。

def is_hole(
    face: fusion.BRepFace,
) -> bool:
    '''
    穴か軸か
    '''
    point: core.Point3D = face.pointOnFace
    eva: core.SurfaceEvaluator = face.evaluator

    normal: core.Vector3D = None
    _, normal = eva.getNormalAtPoint(point)
    normal.normalize()
    normal.scaleBy(0.001)

    checkPnt: core.Point3D = point.copy()
    checkPnt.translateBy(normal)

    cog: core.Point3D = face.centroid

    return cog.distanceTo(checkPnt) < cog.distanceTo(point)

ん~確認必要だな。早速、これ大活躍。
エンティティをダンプする - C#ATIA