本日のお題は『タイプ(型)の確認方法』です。
CADデータから情報を取得した際、その情報が『作成履歴の情報』なのか、『フェースの情報』なのか、はたまた全く異なる情報なのかを判断する必要があります。
今回は、取得した情報の型を見分ける方法を紹介していきたいと思います。
1. 環境
- FreeCAD 0.18
2. 型を見分ける方法
型を見分ける際は、各オブジェクトに割り当てられているTypeIdというものを利用します。
TypeIdの中には、型の名称(クラスの継承関係に近い文字列)が入っているため、これで対象オブジェクトの型を判断することができます。
3. プログラムを書いてみよう
実験用に以前『ドキュメントから作成履歴の取得』で使用したツリーを利用します。
ここには合計5種類のオブジェクトがあるので、これらの型を見分けて、その情報をログに表示するプログラムを作りたいと思います。
# -*- coding: utf-8 -*- #import ptvsd #print("Waiting for debugger attach") # 5678 is the default attach port in the VS Code debug configurations #ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True) #ptvsd.wait_for_attach() import FreeCAD # アクティブなドキュメントを取得 activeDoc = App.ActiveDocument if activeDoc.TypeId == 'App::Document' : FreeCAD.Console.PrintMessage(str(activeDoc.Label) + "は'App::Document'型です。\n") # アクティブドキュメントから作成履歴群を取得 histories = activeDoc.Objects # 作成履歴群の名称を取得してログに表示 for history in histories: if history.TypeId == 'Part::Box': FreeCAD.Console.PrintMessage(str(history.Label) + "は'Part::Box'型です。\n") elif history.TypeId == 'Part::Cone': FreeCAD.Console.PrintMessage(str(history.Label) + "は'Part::Cone'型です。\n") elif history.TypeId == 'Part::Cylinder': FreeCAD.Console.PrintMessage(str(history.Label) + "は'Part::Cylinder'型です。\n") elif history.TypeId == 'Part::MultiFuse': FreeCAD.Console.PrintMessage(str(history.Label) + "は'Part::MultiFuse'型です。\n") else: FreeCAD.Console.PrintMessage(str(history.Label) + "は不明な型です。\n")
test2は'App::Document'型です。 立方体は'Part::Box'型です。 Coneは'Part::Cone'型です。 Cylinderは'Part::Cylinder'型です。 Fusionは'Part::MultiFuse'型です。
ひとまず、5つの型を見分けることができましたね。
4. 補足
ちなみに、TypeIdに割り当てられる型名称は、デバッグで事前に調べました。
本来ならAPIリファレンスから探しに行くのが、正当な手段ですが、今回はご勘弁を。
この辺りはまた別の記事で解説していきたいと思います。
5. まとめ
- 選択された情報がプログラムで要求されたものか判断するためには、タイプ(型)を見分ける必要がある
- 対象オブジェクトのタイプ(型)を見分ける場合は、TypeIdの名称で判断する
6. 最後に
もしかすると、ここに記載している方法以外に見分ける方法があるかもしれません。
もしご存じの方がいらっしゃいましたら、お手数ですが、コメントをお願いいたします。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。