Fusion360のオブジェクトが入ったリスト同士を比較したいんです。
リスト内の順番には依存したく無く、純粋に中身で比較したいんです。
以下のサンプルのリストは順番違いで中身は同じなので、”True”
を期待していますが、リスト同士では "False"。
どうやらsetでの比較なら順番に依存しないと分かったのですが、
生憎、Fusion360のオブジェクト(Fusion360に限らないと思うけど)
ではsetが作れない・・・。
他にも方法あると思うのですが、entityToken(str)使うのが正攻法と
判断しました。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core def run(context): ui: adsk.core.UserInterface = 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 # listのまま比較 lstA = [ root.originConstructionPoint, root.xYConstructionPlane, root.yZConstructionPlane, ] lstB = [ root.yZConstructionPlane, root.xYConstructionPlane, root.originConstructionPoint, ] app.log(f'{lstA == lstB}') # -> False # entityTokenで比較 tokenA = set(e.entityToken for e in lstA) tokenB = set(e.entityToken for e in lstB) app.log(f'{tokenA == tokenB}') # -> True except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
下らない内容なんですが、忘れちゃうので・・・。
(恐らく書いていても忘れる)