こちらの続きです。
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