本日のお題は『ツリーからドキュメントの取得』です。
これまでは要素の選択ありきで処理を行っていましたが、ボタン1つで完全自動化をする場合は、ツリーの構成を自動で取得する必要があります。
割と重要な内容ですので、しっかり押さえておきましょう。
1. 環境
- FreeCAD 0.18
2. 前提知識
プログラムを書く前に、少しだけ前提となる知識を頭に入れておきましょう。
2.1. ツリー構成とは何か?
ここで解説するツリー構成とは、ツリービューに表示されているアプリケーション配下の構成のことを指しています。
2.2. ドキュメントはどこにある?
上図の構成を例にすると、赤枠の2つがドキュメントです。
3. プログラムを書いてみよう
取得する際は、以下の流れでDocumentを取得します。
- App.listDocuments()メソッドでアプリケーション直下のDocument名称群を取得
- 手順1で取得した名称群をもとに、App.getDocument()メソッドでDocumentオブジェクトを取得
なお、取得できたことを確認するために、ドキュメントからラベル名を取得して、ログに表示しています。
# -*- 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 # ドキュメントのラベル名をすべて表示 appLists = App.listDocuments() for wkDocName in appLists: # Documentオブジェクトを取得 wkDoc = App.getDocument(wkDocName) # ドキュメントのラベル名表示 FreeCAD.Console.PrintMessage(str(wkDoc.Label) + "\n")
test
test2
4. 補足
4.1. アクティブドキュメントの取得
上記の方法はアプリケーションツリー配下のドキュメントをすべて取得していましたが、アクティブなものだけ取得する方法もあります。
『アクティブなドキュメント』というのは、ツリービューからドキュメントを選択し、『右クリック⇒ドキュメントをアクティブにする』で選択状態になっているものを指します。
(ツリービュー上で、黒太文字になっているドキュメントと解釈しても大丈夫です)
以下のようにApp.ActiveDocumentから取得してください。
# -*- 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
5. まとめ
- コマンドの自動化をする(オブジェクトの選択をしない)場合は、アプリケーションツリーから情報を取得する必要がある
- ドキュメントオブジェクトはApp.listDocuments()の名称群とApp.getDocument()を使用する
- アクティブドキュメントはApp.ActiveDocumentで取得可能
6. 最後に
ツリー構成からオブジェクトを取得する思想は、どのCADでも使うときがくるので、必ず覚えておきましょう。損はしません。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。