【FreeCAD使い方講座】Pythonコンソールから操作する方法① ~ 簡単なモデルを生成・保存する
※ 当ページには【広告/PR】を含む場合があります。
2021/02/09
2022/08/18
FreeCADの使い方に関する書籍は洋書では目にするのですが、邦書になるとなかなか数が少ないのが難点です。 更にいうと、FreeCADの基礎をまとめた書籍さえ少ないので、Pythonスクリプトによる対話型操作のモデリングなんてのは更に情報を仕入れにくい状況にあります。
時間がある時に整理しておきたいなとずっと思っていたのですが、FreeCADの3dモデル作成の大きなアドバンテージであるPythonコンソールからの対話的な操作方法を細かく解説してみるコーナーです。
初回の今回はとりあえずPythonコンソールの立ち上げと、FreeCADでいうところの対話的な操作とやらの雰囲気を説明出来たらいいなと考えています。
Pythonスクリプティング ~ 3Dモデリングを極限まで効率化する
無償で使える工業製品向けのモデリングソフトウェアといえば、日本で圧倒的な知名度を誇っているのがAutodeskの「Fusion 360」と言われていますが、海外の方に目を向けると、かなり多種多様なフリーウェアがあり、みなさん思い思いでお気に入りのものを使っているようです。
とはいえ、3Dモデリングにおいて手動では作成しにくい、もしくは到底作成不可能な図形というものがあり、その場合には機械的にノードの座標値を計算してメッシュを張っていくという操作が必要になるシーンがあります。
パラメトリック・モデラーを謳っている
ということで、まず今回は、Pythonスクリプティングによる3Dモデル作成の導入編としてFreeCADの対話的な操作で簡単な例を挙げて説明していこうかと思います。
利用例 ~ 対話型でモデルを作る・保存する
今回はPythonコンソールを直にコマンドを一行づつ入力していく感じの
言語対話的モデリング
FreeCAD起動 〜 Pythonコンソールの表示
まずは利用するFreeCADのバージョンですが、安定版の0.18を利用しています。

ついでにですが、トップのメニューバーから
[ヘルプ]

Python スクリプト ドキュメント
このページの中ほどからPythonスクリプトのチュートリアルなどに関する解説が載っているようです。

もう一つの
Python モジュールのマニュアル

慣れてくるとこちらの方を重宝するかもしれません。
なお、これはオンラインのドキュメントではなく、内部のヘルプドキュメントをブラウザ表示しているようです。 なのでFreeCADのプログラムを立ち上げている状態でないと閲覧はできないことに注意してください。
さて、FreeCADの初回起動時などは、Pythonコンソールが非表示になっている場合があります。 このコンソールを立ち上げるためには、
[表示] > [パネル] > [Pythonコンソール]

ではここから3dモデルを対話的に作成していきます。
簡単なモデルの作成
複雑な操作になるとpyファイルにスクリプトをまとめて実行するやり方を行いますが、今回は簡単な操作の説明を順に説明しますので、一行一行をコンソールに手で入力していきます。
まずはコアモジュール
FreeCAD
import FreeCAD
そして新規ドキュメント(FCStdファイルの本体)を作成します。
App.newDocument("my_doc")
これが実行されると左のツリービューのモデルに
my_doc

このドキュメントに基本図形を追加してみます。
App.ActiveDocument.addObject("Part::Cylinder", "cylinder_1")
こうすることで現在アクティブになっているドキュメントのインスタンスに、
cylinder
少し解説しますと、
App
FreeCADGui
このAppの持つ
ActiveDocument
ここから3dオブジェクトをドキュメントに追加したい場合、
addObject
getObject
詳しく知りたい方は
なお、ドキュメントは
App::Document
ちなみに今回は円柱をターゲットにオブジェクト新規作成しました。
ドキュメント内の3Dオブジェクトは
excute
つまりはaddObject関数に
Part::Cylinder
さて、作業を続けます。 新規に3Dオブジェクトを追加した時点では寸法情報がデフォルト設定になっているので、何も図形が表示されていません。
そこでドキュメントの再描画にあたる
recompute
App.ActiveDocument.recompute()
すると再描画処理で画面が更新され、新規に追加した円柱が表示されました。

寸法がデフォルトのままではつまらないので、円柱の寸法を変更してみます。
以下のように、
cylinder_1
cyl_1 = FreeCAD.getDocument("my_doc").getObject("cylinder_1")
cyl_1.Radius = '20 mm'
cyl_1.Height = '12 mm'
このプロパティ値の変更は即時に画面に反映され、以下のような円柱にすることができました。

なお、
Cylinder
プロパティ
ドキュメントの保存
仕上がったFreeCADのドキュメントを保存する際にも、コンソールから保存出来る機能があるので、先程の
my_doc
保存の際にはドキュメントの
saveAs
App.getDocument("my_doc").saveAs("/home/hoge/デスクトップ/test.FCStd")
saveAsを使う際の注意点としては、保存したいディレクトリまでの絶対パスを与えてあげると混乱が少なくて済みます。 このサンプルでは現在利用中のDebian Linux上のデスクトップに保存したときの設定です。
相対パスを使うと、FreeCADがインストールされている場所がシステム環境によってまちまちですので、保存した場所を忘れてしまうと、ファイルを探す手間がかかります。
以上でFreeCADにおける対話的な操作で、モデルの生成から保存までを一通りできるようになったかと思います。
もっとPythonスクリプトに親しむ
先程の節でも触れましたが、FreeCADのPythonスクリプトのためのAPIリファレンスの内容はかなり完成度が低く、ほぼソースコードの実装を読み込んでいるのと大差がありません。
なので、アレをこうしたい、ソレをこうしたい...というときにどの関数を使ったらいいものかリファレンスを眺めていても行き詰まると思います。
そこで、お目当てのPythonスクリプトの処理内容を知るのに一番手っ取り早い方法は、
実際に手でその操作をやってみること
一例として先程のシリンダーの追加の操作相当のことを手動でやってみましょう。
適当なドキュメントを新規作成させた後で、
[Part]

このとき、Pythonコンソールも表示させておくのがポイントで、実際にシステム側がバックグランド行った処理がトレースできるようになっています。

手動で行った操作を詳細を実際に確認することで、例えば円柱を追加するための最低限のスクリプトは
App.ActiveDocument.addObject("Part::Cylinder","Cylinder")
App.ActiveDocument.recompute()
であることが分かります。
これはAPIリファレンスを紐解くより圧倒的に早いので、これからPythonスクリプトでFreeCADによる3Dモデリングしたい方には必須のテクニックになります。
まとめ
今回の記事では以下の主に以下の内容を解説しました。
+ Pythonコンソールからドキュメントを新規作成する
+ ドキュメントにPrimitiveなモデルを追加する
+ ドキュメントをコマンドからローカルに名前を付けて保存する
+ Pythonスクリプトの構築のための調べ方
基本的には、FreeCADのPythonスクリプトの真髄は、
人の手でやっていた操作をテキストで写し取る
次回以降は、もっと突っ込んで実用的なPythonスクリプティングの話ができたら良いなと思っています。