【球状歯車に挑戦⑤】pythonでFusion360を動かす
まずは球状歯車と鞍状歯車のうち、鞍状歯車を作るためにFusion360をpythonでガリガリ動かします。
ボディを選択してコピー
#コピーのためのおまじない product = app.activeProduct design = adsk.fusion.Design.cast(product) rootComp = design.rootComponent #既存のBodyを読み込む orgBody, cpyBody = None, None for bufBody in rootComp.bRepBodies: if bufBody.name == "ball": orgBody = bufBody cpyBody = rootComp.features.copyPasteBodies.add(orgBody) cpyBody.name = "copy" #これ実はBodyのnameと違うみたいです。下の操作履歴のところの名称みたいです。
nameを参照して"ball"になっているBodyをコピーするという内容です。
コピーしたものを回転⇒移動させる
#回転、移動のためのおまじない features = rootComp.features moveFeats = features.moveFeatures #targetのコレクションを作る target = adsk.core.ObjectCollection.create() #target.add(cpyBody) target.add(newBody) #何故かこちらでないとコレクション等に入れられない #Y軸周りにangle角度回転 #(1, 0, 0)ベクトルを(cos, o ,sin)ベクトルまで回転させる angle = 30 if angle != 0: #0°だと途中でエラーがでる fromVec = adsk.core.Vector3D.create(1,0,0) toVec = adsk.core.Vector3D.create(math.cos(math.radians(angle)), 0, math.sin(math.radians(angle))) axisVec = adsk.core.Vector3D.create(0,1,0) rotTrans = adsk.core.Matrix3D.create() rotTrans.setToRotateTo(fromVec, toVec, axisVec) rotFeatureInput = moveFeats.createInput(target, rotTrans) moveFeats.add(rotFeatureInput) #(px, py, pz)に移動 px, py, pz = 10, 10, 0 #何故かcm単位系なのに注意 if px**2 + py**2 + pz**2 != 0: #移動距離が0だとエラーがでる moveTrans = adsk.core.Matrix3D.create() vector = adsk.core.Vector3D.create(px, py, pz) moveTrans.translation = vector moveFeatureInput = moveFeats.createInput(target, moveTrans) moveFeats.add(moveFeatureInput)
必ず回転をする時はグローバル座標の原点中心で回転するつもりでしてください。回転の処理(moveFeats.add)をしてから、移動の処理をすることが大切です。変なところに吹っ飛んでいきます。
結合させる
#結合をするおまじない combines = rootComp.features.combineFeatures #ツールで結合処理 combineInput = combines.createInput(orgBody, targetCol) combineInput.operation = adsk.fusion.FeatureOperations.JoinFeatureOperation combineInput.isKeepToolBodies = False combineInput.isNewComponent = False retVal = combines.add(combineInput)
isKeepToolBodies = Trueにすると、ツールのBodyが消えません。また後日説明しますが今回の用途だとツールが消える方が後の処理が楽です。
FeatureOperations.JoinFeatureOperationをFeatureOperations.CutFeatureOperationにすると切り取りになります。
で、これらを色々組み合わせていくと鞍状歯車ができます。
参考までに上のでできるものはこんな感じです。回転してから移動した後、一つのBodyにまとまっています。