Fusion360と他のCADを併用されている方いらっしゃいますか?
Fusion360は色々なフォーマットのデータを読み込んでくれるので
助かっているのですが、Fusion360上ではこんな感じで表示しているのに
中間フォーマットでエクスポートしたものを、他のCADで読み込んだ際
こんな感じになってガッカリした経験は無いでしょうか?
何で、色が抜けるのか? 僕、理由を知ってます。
実はデータの状態で色が抜けてしまうようです。
ちょっと大げさにしましたが赤印位置にボディがあり
全てルートコンポーネント(一番トップのコンポーネント)ではない位置に
入っています。 原因はこれなんです。
(Upしたデータは、子コンポーネントに入っているような気がしてます)
色を反映させてエクスポートしたいのであれば、全てのボディを
ルートコンポーネントに移動させればOKです。
これって、Tree上でD&Dをやれば済む話ではあるのですが、
対象のボディが案外Treeの深い位置にあり、数が多いと面倒なんです。
・・・そう、面倒。 なので全てのボディをかき集めるスプリクトを
作ってみました。
#FusionAPI_python #Author-kantoku #Description-Collect_All_Body #アクティブなプロダクトの全てのボディをルートにかき集める import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface #確認 msg = '全てのボディをルートコンポーネントにかき集めます。\nよろしいですか?' title = 'ボディかき集め' btn = adsk.core.MessageBoxButtonTypes.OKCancelButtonType icon = adsk.core.MessageBoxIconTypes.QuestionIconType Res = ui.messageBox(msg, title, btn, icon) if Res != adsk.core.DialogResults.DialogOK: return #モロモロ product = app.activeProduct des = adsk.fusion.Design.cast(product) #パラメトリックじゃないとNG des.designType = adsk.fusion.DesignTypes.ParametricDesignType #ルート root = des.rootComponent #ルート以下のコンポーネント cmplst = [] cmplst = Get_Comps(root, cmplst) #全ボディコンテナ bdyslst = [cmp.bRepBodies for cmp in cmplst if cmp.bRepBodies.count > 0] #全ボディ bdylst = [] for bdys in bdyslst: for bdy in bdys: bdylst.append(bdy) if bdylst.count == 0 : return #カットペースト tgtBodies = root.features.cutPasteBodies [tgtBodies.add(bdy) for bdy in bdylst] #おしまい ui.messageBox('Done') except: if ui: ui.messageBox('エラー\n{}'.format(traceback.format_exc())) #全コンポーネント def Get_Comps(comp, complst): occs = comp.occurrences lst = [occ.component for occ in occs] if lst.count == 0: return complst for cmp in lst: complst.append(cmp) Get_Comps(cmp, complst) return complst
Pythonまだまだ駄目だなぁ。見事に二重ループがあるし…。
こんな感じです。
本当は、CATIAのProductからPartを作るコマンドをイメージしていたのですが
異なるDocument間でどうやったらコピペ出来るのか、方法わかりませんでした。
僕はこれで事足りるんですけどね。