タイトルが若干過剰です。
フィレットを付けた際の元のエッジがどのフィーチャで作成されたか?
を探し出します。
取りあえず作りましたが、これは正しくない事が分かりました。
が、無くしてしまいそうなので、とりあえず書き残しておきます。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core 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 msg: str = 'Select' selFilter: str = 'Features' sel: adsk.core.Selection = selectEnt(msg, selFilter) if not sel: return timeline: adsk.fusion.Timeline = des.timeline backupMarker = timeline.markerPosition feat: adsk.fusion.Feature = sel.entity timeObj: adsk.fusion.TimelineObject = feat.timelineObject timeObj.rollTo(True) edgeSets = [es for es in sel.entity.edgeSets] edgeTokens =[] for edgeset in edgeSets: edgeTokens.extend([e.entityToken for e in edgeset.edges]) timeObjs = [timeline.item(idx) for idx in range(timeline.markerPosition)] useFeats = [] for timeObj in timeObjs[::-1]: timeEnt: adsk.fusion.Feature = timeObj.entity if not hasattr(timeEnt, 'bodies'): continue timeObj.rollTo(False) tmpTokens = [] for body in timeEnt.bodies: tmpTokens.extend([e.entityToken for e in body.edges]) if any([token in edgeTokens for token in tmpTokens]): useFeats.append(timeEnt) [app.log(f.name) for f in useFeats[::-1]] timeline.markerPosition = backupMarker except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def selectEnt( msg: str, filterStr: str) -> adsk.core.Selection: try: app: adsk.core.Application = adsk.core.Application.get() ui: adsk.core.UserInterface = app.userInterface sel = ui.selectEntity(msg, filterStr) return sel except: return None
フィレットフィーチャ以外も選択出来ますが、無意味です。
又、修正する為のメモ書きですが、
・タイムラインの後ろからの検索はNG。先頭からにすべし。
・エッジを見つけたら、edgeTokensリストから除去しないと
重複して見つけ出してしまう。あくまで最初のフィーチャを
見つけ出す。
タイムラインの長さにもよりますが、まぁワンテンポ待ちぐらい
なので耐えられない事は無いぐらいの時間でした。
”作成” 側のコマンドは親子を見る必要が有るけど、"修正" 側の
コマンドは親だけ見つければ良いのかな?