興味があろうがなかろうが。

なるべく役に立つ、とがった内容を記していきたいと思います。

【FreeCADプログラミング】ツリーからドキュメントの取得

本日のお題は『ツリーからドキュメントの取得』です。

これまでは要素の選択ありきで処理を行っていましたが、ボタン1つで完全自動化をする場合は、ツリーの構成を自動で取得する必要があります。

割と重要な内容ですので、しっかり押さえておきましょう。

1. 環境

  • FreeCAD 0.18

2. 前提知識

プログラムを書く前に、少しだけ前提となる知識を頭に入れておきましょう。

2.1. ツリー構成とは何か?

ここで解説するツリー構成とは、ツリービューに表示されているアプリケーション配下の構成のことを指しています。

f:id:appli-get:20200505105629p:plain

ツリービュー

2.2. ドキュメントはどこにある?

上図の構成を例にすると、赤枠の2つがドキュメントです。

f:id:appli-get:20200505105616p:plain

ツリービュー内のドキュメント

3. プログラムを書いてみよう

取得する際は、以下の流れでDocumentを取得します。

  1. App.listDocuments()メソッドでアプリケーション直下のDocument名称群を取得
  2. 手順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. アクティブドキュメントの取得

上記の方法はアプリケーションツリー配下のドキュメントをすべて取得していましたが、アクティブなものだけ取得する方法もあります。

『アクティブなドキュメント』というのは、ツリービューからドキュメントを選択し、『右クリック⇒ドキュメントをアクティブにする』で選択状態になっているものを指します。
(ツリービュー上で、黒太文字になっているドキュメントと解釈しても大丈夫です)

f:id:appli-get:20200505105858p:plain

アクティブなドキュメントの指定方法

以下のように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プログラミングのトップページに飛びます。

よろしければご参照くださいませ。

www.interested-or-not.com