こちらのトピが気になりました。
Torus with normal vector [0, 0, 1] at different position than given center - Autodesk Community
TemporaryBRepManager.createTorusでトーラスを作る時、
axis(トピ主のコードではnormal)が、(0,0,1)の時だけ正しい位置で作成されない
との事です。(Fusion360 ver2.0.9512)
Fusion 360 Help
こんな感じのコードで試しました。
#Fusion360API Python script import adsk.core, adsk.fusion, traceback def initTorus( component: adsk.fusion.Component, center: adsk.core.Point3D, normal: adsk.core.Vector3D, majorRadius: float, minorRadius: float): try: tmpMgr = adsk.fusion.TemporaryBRepManager.get() tempTorus = tmpMgr.createTorus(center, normal, majorRadius, minorRadius) torus = component.bRepBodies.add(tempTorus) surf = torus.faces[0].geometry msg = f'center:{center.asArray()}' msg += f'_normal:{normal.asArray()}' msg += f'_CenterOfResults:{surf.origin.asArray()}' torus.name = msg except: dumpMsg('Failed:\n{}'.format(traceback.format_exc())) def run(context): try: app = adsk.core.Application.get() app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType) product = app.activeProduct design = adsk.fusion.Design.cast(product) design.designType = adsk.fusion.DesignTypes.DirectDesignType rootComp = design.rootComponent majorRadius = 2 minorRadius = 0.5 center = adsk.core.Point3D.create(0, 0, 5) vec3D = adsk.core.Vector3D normals = [vec3D.create(0, 0, round(x * 0.1, 1)) for x in range(20)] for n in normals: initTorus(rootComp, center, n, majorRadius, minorRadius) except: dumpMsg('Failed:\n{}'.format(traceback.format_exc())) def dumpMsg(msg :str): adsk.core.Application.get().userInterface.palettes.itemById('TextCommands').writeText(str(msg))
(tracebackあるのだから使って欲しい。最初、全然エラーが見つけられなかった。)
axis変更しても、回転軸なので出来上がるトーラスは変わらないはず。
TemporaryBRepManagerは間違いなくFusion360では最速の方法だけど、
結構バグがあるかも。以前もこれがありました。(今は直っているハズ)
Solved: creating sphere with temporary BRep manager - Autodesk Community