通常、モデリングした際に出来上がる面は、平面であれば平面で
円筒面は円筒です。・・・謎な文章ですね。
円筒であれば中心軸を作成出来ます。
しかし中間ファイル(Step,Iges等)や他CADのネイティブファイルで
受け取ったデータの場合、円筒面に見えるのですが、軸を作成が
出来ない面が有ります。それは円筒面ではなくNURBS面です。
テストするデータが欲しいのですが、生憎Fusion360(CATIAも)で
普通にモデリングすると、円筒に見えるNURBS面、平面に見える
NURBS面、球体に見えるNURBS面・・・等を作成出来ません。
その為(テストデータを作る為)、スクリプトを作成しました。
# Fusion360API Python script import traceback import adsk.core as core import adsk.fusion as fusion def run(context): ui: core.UserInterface = None try: app: core.Application = core.Application.get() ui = app.userInterface msg: str = 'Select' selFilter: str = 'Bodies' sel: core.Selection = selectEnt(msg, selFilter) if not sel: return body: fusion.BRepBody = sel.entity nurbs: fusion.BRepBody = body.convert( fusion.BRepConvertOptions.ProceduralToNURBSConversion ) res: fusion.BRepBody = draw_bodies([nurbs])[0] [app.log(f.geometry.classType()) for f in res.faces] except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def draw_bodies( bodyLst: list, targetOcc: fusion.Occurrence = None ) -> list: app: core.Application = core.Application.get() des: fusion.Design = app.activeProduct if not targetOcc: comp: fusion.Component = des.rootComponent else: comp: fusion.Component = targetOcc.component baseFeat: fusion.BaseFeature = None if des.designType == fusion.DesignTypes.ParametricDesignType: baseFeat = comp.features.baseFeatures.add() bodies: fusion.BRepBodies = comp.bRepBodies resBodies = [] if baseFeat: baseFeat.startEdit() resBodies = [bodies.add(body, baseFeat) for body in bodyLst] baseFeat.finishEdit() return baseFeat.bodies else: return [bodies.add(body) for body in bodyLst] def selectEnt( msg: str, filterStr: str ) -> core.Selection: try: app: core.Application = core.Application.get() ui: core.UserInterface = app.userInterface sel = ui.selectEntity(msg, filterStr) return sel except: return None
スクリプト実行後、ボディを選択すると見た目が同じなボディが
作成しされます。
例えば、こんなボディでスクリプトを実行すると、
軸は作成出来ませんし、平らな面でスケッチも作成出来ません。