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

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

【FreeCADプログラミング】選択済みのオブジェクトを追加する

本日のお題は『選択済みのオブジェクトを追加する』です。

これまでは、事前に選択したオブジェクトをたびたび取得してきました。

今回はその逆で、選択中のオブジェクトを意図的に増やす処理を説明していきます。

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. 動作確認用モデル

例のごとく、いつものこのモデルで試してみましょう。

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

動作確認用のモデル

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

動作確認用モデルのツリー構成

4.2. 動作結果

ドキュメントツリー配下の履歴(フィーチャ)がすべて、選択状態になっていることが分かりますね。

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

実行後の状態(ビュー上)

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

実行後の状態(ツリー上)

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, in 
    FreeCADGui.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プログラミングのトップページに飛びます。

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

www.interested-or-not.com