本日のお題は『要素の表示・非表示』です。
先日、Selection APIによる要素の取得方法をご紹介しましたので、今回は取得した要素に対して、処理をしてみたいと思います。
1. 環境
環境はいつもどおり、FreeCADのみです。必要に応じて、Visual Studio Codeを用意し、デバッグをしてください。
- FreeCAD 0.18
2. 表示・非表示する方法
要素の表示状態を変更するAPIが用意されています。
具体的には表示・非表示にはViewObject APIのshow()とhide()を利用します。
ロジック的なものはありませんが、ややこしい点として、取得した要素からViewObjectを取得しなければなりません。
※ 正直、私はオブジェクトの階層構成はまだほとんど理解できていません。何かご指摘があればコメントをよろしくお願いします。
3. プログラムを書いてみよう
Selection APIを使って要素を取得し、その中からViewObjectを取り出して表示・非表示を行います。
3.1. 非表示のプログラム
要素の非表示にはhide()を使用します。
# -*- coding: utf-8 -*- import FreeCAD import FreeCADGui sel = FreeCADGui.Selection.getSelection() if(len(sel) != 0): sel[0].ViewObject.hide()
3.2. 表示のプログラム
要素の表示にはshow()を使用します。
# -*- coding: utf-8 -*- import FreeCAD import FreeCADGui sel = FreeCADGui.Selection.getSelection() if(len(sel) != 0): sel[0].ViewObject.show()
4. 実行方法
4.1. 非表示のプログラムの実行方法
下図のように、直方体が1つ配置されたモデルを仮に用意しています。
まずは、左側にあるコンボビューから『pad』を選択します。選択すると、グラフィックビュー上の要素がハイライトされます。
この状態で、3.1.で作ったプログラムを実行してください。
問題なく進めば、緑色にハイライトされている直方体が非表示になるはずです。
4.2. 表示のプログラムの実行方法
今度は表示プログラムの実行です。
hideの時と同じように、今度は非表示状態になった『pad』を選択します。
この状態で3.2.で作ったプログラムを実行してください。
問題なく進めば、非表示状態になっていた『pad』が表示状態になるはずです。
5. 補足
5.1. 取得したオブジェクトに直接、show()もしくはhide()を実行したらどうなるか
一応、気になる方もいらっしゃると思い、試しました。
例えば、サンプルプログラムの『sel[0].ViewObject.hide()』を『sel[0].hide()』に変えてみると、以下のエラーが発生します。
<type 'exceptions.AttributeError'>: 'PartDesign.Feature' object has no attribute 'hide'
Pythonはあまり詳しくないですが、とりあえずPartDesign.Featureクラスにはhideなんていうメソッドは無いと言っているようですね。
4. まとめ
- 要素の表示にはViewObject APIのshow()を使う
- 要素の非表示にはViewObject APIのhide()を使う
- ViewObjectのAPIを使うには、選択した要素からViewObjectを取得する必要がある
5. 最後に
実はViewObjectを取得する方法は、APIリファレンスから探ったわけではなく、デバッグで探しました。
おそらく、さらに深い機能を探るには、デバッグができないと難しいでしょうね。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。