本日のお題は『選択済みのオブジェクトを追加する』です。
これまでは、事前に選択したオブジェクトをたびたび取得してきました。
今回はその逆で、選択中のオブジェクトを意図的に増やす処理を説明していきます。
1. 環境
- FreeCAD 0.18
2. 選択済みのオブジェクトを追加する方法
『FreeCADGui.Selection.addSelection()』メソッドを使用します。
3. プログラムを書いてみよう
# -*- 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 import FreeCADGui # ドキュメントのラベル名をすべて表示 appLists = App.listDocuments() for wkDocName in appLists: # Documentオブジェクトを取得 wkDoc = App.getDocument(wkDocName) # DocumentをSelectionに追加 for wkObj in wkDoc.Objects: FreeCADGui.Selection.addSelection(wkObj)
4. 動作確認
4.1. 動作確認用モデル
例のごとく、いつものこのモデルで試してみましょう。
4.2. 動作結果
ドキュメントツリー配下の履歴(フィーチャ)がすべて、選択状態になっていることが分かりますね。
4. 補足
4.1. 構成要素は追加できない?
構成要素もSelectionに追加できるのかなと思い、試してみたところ失敗しました。
例えば、addSelectionでEdgeを入れてみようとすると、下記のエラーが発生します。
# -*- 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 import FreeCADGui # アクティブなドキュメントを取得 activeDoc = App.ActiveDocument # アクティブドキュメントから作成履歴群を取得 histories = activeDoc.Objects # 作成履歴群から立方体が取得できた場合は、 # ソリッドを取得する for history in histories: solidObj = history.Shape # エッジを取得 edgeObjs = solidObj.Edges for edgeObj in edgeObjs: FreeCADGui.Selection.addSelection(edgeObj)
エラーの内容を見た限りでは、指定方法が悪いのか、指定自体ができないのか、まだわからない状態です。
subnameというのが、履歴("立方体"とか"Fusion"など)の名称のことだとすると、EdgeやFaceはもしかしたら追加できないかもしれません。
合間を見て、調べてみようと思います。
※ もしFaceやEdge要素をSelectionに追加する方法をご存じの方がいらっしゃいましたら、お手数ですが、コメントをお願いいたします。
Traceback (most recent call last): File "C:/Python/AddSelection_Error.py", line 27, inFreeCADGui.Selection.addSelection(edgeObj) <class 'ValueError'>: type must be 'DocumentObject[,subname[,x,y,z]]' or 'DocumentObject, list or tuple of subnames'
5. まとめ
- 選択済み要素を追加するには、FreeCADGui.Selection.addSelection()を使用する
6. 最後に
なんだか調べれば調べるほどわからなくなってきますね。まだまだ勉強が必要です。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。