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

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

【FreeCADプログラミング】選択した要素を取得する ~getSelection編~

本日のお題は『選択した要素を取得する ~GetSelection編~』です。

今回からビュー上の要素をいじり始めます。

これまでは机上のベクトル計算などがメインだったため、退屈だったかもしれませんが、それも少しずつおさらばしていくことになります。たぶん。

1. 環境

環境はいつもどおり、FreeCADのみです。必要に応じて、Visual Studio Codeを用意し、デバッグをしてください。

  • FreeCAD 0.18

2. ビュー上の要素の取得方法

今回紹介するのは、FreeCADの『Selection API』を利用したオブジェクトの取得方法です。

オブジェクトの選択というと「選択用のUIを用意して、要素を選択できる仕組みを用意しなければならない」と思いがちですが、実は無くてもできます

今回紹介する方法は下記のような処理フローになります。

  1. ユーザがビュー上の要素を選択
  2. プログラムを起動
  3. プログラム内から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枚選択した状態でプログラムを起動しました。

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

プログラム起動前の状態(フェースを1枚選択している)

画像左側のLabelプロパティの値がコンソールに表示されます。

pad

4. まとめ

  • 選択された要素を取得するには、Selection APIのgetSelectionメソッドを使う
  • 要素の選択をする際、必ずしもQtなどで選択用UIを用意する必要はない

5. 最後に

まだ調査はできていませんが、UIを用意する場合はQtを使うのがスタンダードなようですね。昔、Linuxを使っていたときにほんの少しだけ触った覚えがありますが、完全に忘れました。

ひとまず、今回のgetSelectionが使えると、選択要素の操作ができるようになるので、プログラムの幅が一気に広がります。覚えておきましょう。

更なる情報をお探しの方は!

下記のリンクから、FreeCADプログラミングのトップページに飛びます。

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

www.interested-or-not.com