こちらの取り組みです。
解決済み: 部品の集計方法について - Autodesk Community
ボディを集計すべきなのか?コンポーネントを修正すべきなのか?
迷っていますが、とりあえずボディを集計する事にします。
テストデータは、以前頂いたデータをちょっと修正しました。
ルートコンポーネントの ”main_assy v3" 内にボディが一つで、
"Base-A_assy v1:1" "Base-B_assy v2:1" "Base-B_assy v2:2" の
3個の子コンポーネントが有ります。
子コンポーネントそれぞれの中にはボディは無く、
孫コンポーネントを複数持っている状態で、それぞれには
ボディが1個入っています。
そして、"Base-B_assy v2:1" "Base-B_assy v2:2" は、
同一のドキュメントです。
・・・言葉の説明では伝わりにくいです。
取りあえず、こんなスクリプトを作りました。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core from collections import Counter def run(context): ui = adsk.core.UserInterface.cast(None) try: app: adsk.core.Application = adsk.core.Application.get() ui = app.userInterface des: adsk.fusion.Design = app.activeProduct root: adsk.fusion.Component = des.rootComponent # 表示されているボディの取得 showBodies: adsk.core.ObjectCollection = root.findBRepUsingPoint( adsk.core.Point3D.create(0,0,0), adsk.fusion.BRepEntityTypes.BRepBodyEntityType, 1000000000000, True ) # ボディから "ボディ名 : コンポネント名" として情報取得 infos = [] for b in showBodies: try: compName = b.assemblyContext.component.name except: compName = root.name infos.append(f'{compName} : {b.name}') # 集計 res = Counter(infos) # 結果表示 app.log('--------------------------------') app.log('コンポーネント名 : ボディ名 --- 個数') app.log('--------------------------------') for key in res.keys(): app.log(f'{key} --- {res[key]}') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
これを実行すると、こんな感じの結果になります。
-------------------------------- コンポーネント名 : ボディ名 --- 個数 -------------------------------- main_assy v3 : ボディ1 --- 1 ベース-D1 v1 : ボディ1 --- 1 ベース-F v1 : ボディ1 --- 1 ベース-E v1 : ボディ1 --- 1 ベース-I1 v1 : ボディ1 --- 2 ベース-G1 v1 : ボディ1 --- 2 ベース-H1 v1 : ボディ1 --- 2 ベース-C1 v2 : ボディ1 --- 2
"Base-B_assy v2:2" を非表示にして実行した結果はこちら
-------------------------------- コンポーネント名 : ボディ名 --- 個数 -------------------------------- main_assy v3 : ボディ1 --- 1 ベース-D1 v1 : ボディ1 --- 1 ベース-F v1 : ボディ1 --- 1 ベース-E v1 : ボディ1 --- 1 ベース-I1 v1 : ボディ1 --- 1 ベース-G1 v1 : ボディ1 --- 1 ベース-H1 v1 : ボディ1 --- 1 ベース-C1 v2 : ボディ1 --- 1
取りあえず僕がイメージしている結果は得られています。
色々疑問。
・表示しているボディの集計で良いのかな?非表示もかな?
・そもそもボディでは無く、コンポーネントの集計かな?
・CSV等のファイルに出力した方が良いのかな?