C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Fusion360のオブジェクト入りリストを比較

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()))

下らない内容なんですが、忘れちゃうので・・・。
(恐らく書いていても忘れる)