C#ATIA

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

トーラス

こちらのトピが気になりました。
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