本日のお題は『選択した要素を取得する ~GetSelection編~』です。
今回からビュー上の要素をいじり始めます。
これまでは机上のベクトル計算などがメインだったため、退屈だったかもしれませんが、それも少しずつおさらばしていくことになります。たぶん。
1. 環境
環境はいつもどおり、FreeCADのみです。必要に応じて、Visual Studio Codeを用意し、デバッグをしてください。
- FreeCAD 0.18
2. ビュー上の要素の取得方法
今回紹介するのは、FreeCADの『Selection API』を利用したオブジェクトの取得方法です。
オブジェクトの選択というと「選択用のUIを用意して、要素を選択できる仕組みを用意しなければならない」と思いがちですが、実は無くてもできます。
今回紹介する方法は下記のような処理フローになります。
- ユーザがビュー上の要素を選択
- プログラムを起動
- プログラム内からSelection APIを呼び出して、ユーザが選択した要素を取得
3. プログラムを書いてみよう
Selection APIを使う際は、FreeCADGuiをインポートする必要があります。
少々強引なプログラムですが、プログラム開始前に選択されている要素の0番目を取得し、その要素のLabel名を表示します。
選択していない状態で起動した場合は「要素が選択されていません」と表示されます。
# -*- coding: utf-8 -*- import FreeCAD import FreeCADGui sel = FreeCADGui.Selection.getSelection() if(len(sel) != 0): FreeCAD.Console.PrintMessage(str(sel[0].Label)) else: FreeCAD.Console.PrintMessage("要素が選択されていません")
一応今回は、下図のような直方体を作成し、フェースを1枚選択した状態でプログラムを起動しました。
画像左側のLabelプロパティの値がコンソールに表示されます。
pad
4. まとめ
- 選択された要素を取得するには、Selection APIのgetSelectionメソッドを使う
- 要素の選択をする際、必ずしもQtなどで選択用UIを用意する必要はない
5. 最後に
まだ調査はできていませんが、UIを用意する場合はQtを使うのがスタンダードなようですね。昔、Linuxを使っていたときにほんの少しだけ触った覚えがありますが、完全に忘れました。
ひとまず、今回のgetSelectionが使えると、選択要素の操作ができるようになるので、プログラムの幅が一気に広がります。覚えておきましょう。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。