FreeCAD Scripting Basics/jp

FreeCADのpythonスクリプティング
FreeCADは、pythonスクリプトで完全に操作できるように一から作られています. FreeCADのほとんどの部分、インターフェースやシーンの内容、そして３Dビュウで表示される内容でさえも、内蔵のパイソンインタプリタや自作のスクリプトからアクセスすることができます. このため、FreeCADは現在利用できるエンジニアリングアプリケーションの中でも、とことんカスタマイズ可能なアプリの一つでしょう.

しかし、いまのところ、３Dオブジェクトを操作するためのコマンドはほんの僅かしかありません. これは開発がいまだ初期段階であることだけではなく、その背景として、ユーザ用のアプリケーションを容易することよりも、CAD開発のためのプラットフォームを提供することを優先しているからです. しかし、FreeCADのpythonスクリプトは簡単なので、パワーユーザーやpythonプログラムを少しかじったことのあるユーザー（あなたがそうであることを願います）が開発中の新しい機能を素早く調べる上で、大きな手助けとなるでしょう.

もしpythonに慣れていなければ、インターネット上でチュートリアルを検索することをお勧めします. まずはpythonの構造をざっと見ることです. pythonはとても簡単に学ぶことのできる言語で、これは特に、インタプリタで実行できることが大きいでしょう. 単純なコマンドから完全なプログラムまで、一切コンパイルする必要がなく、その場で実行することができるのです. FreeCADは内蔵のpythonインタプリタを持っています. もし以下に示すような"Report View"という名前のウインドウが見つからなければ、View -> Views -> Report viewからインタプリタを起動してください.

インタプリタ
インタプリタから、システムにインストールされている全てのpythonモジュールにアクセスすることができます. また内蔵のFreeCADモジュールや、後から追加インストールしたFreeCADモジュールへもアクセスが可能です. 次のスクリーンショットはpythonインタプリタです.



インタプリタでは、pythonコードの実行と、利用可能なクラスや関数の閲覧が可能です. またFreeCADは、FreeCADの新世界を探索するための、とても便利なクラスブラウザを提供しています. 既知のクラス名に続いてピリオドをタイプすると（これは、そのクラスから何かを追加するという意味です）、クラスブラウザウインドウが開き、利用可能なサブクラスとメソッドをナビゲートすることができます. ここで何かを選択すると、関連するヘルプテキストが（ある場合ですが）表示されます.



ではGui. やApp. をタイプして何が起こるのか見てください. モジュールやクラスの内容を調べるもう一つのより一般的な方法は、print dirコマンドを使うことです. たとえば、print dir とタイプすると、現在FreeCADで読み込まれている全てのモジュールをリストします. print dir(App) はAppモジュールに含まれている全ての内容を表示します.

インタプリタのもう一つの便利な機能は、コマンドの履歴を遡ることができ、前に入力したコードの行を取り出せることです. コマンドの履歴の移動は、Ctrl+上、またはCtrl+下です.

インタプリタウインドウ内での右クリックで、全てのコマンド履歴のコピー（インタプリタで試した作業をスクリプトにするのに便利です）や、ファイルの絶対パスの挿入などの複数のオプションが利用できます.

pythonのヘルプ
FreeCADのヘルプメニューには”Python help”という名前のついた項目があり、FreeCADで利用可能な全てのpythonモジュールについての、リアルタイムで生成された完全なドキュメントを持ったブラウザが開きます. これには、python、FreeCAD内蔵モジュール、システムにインストール済みのモジュール、そしてFreeCADの追加モジュールのドキュメントが含まれます. 利用できるドキュメントは、各モジュールの開発者が自分のコードにどれだけドキュメントを入れる努力をしているかによりますが、ほとんどの場合、pythonモジュールはかなりよくドキュメント化されていると定評があります. このドキュメントのシステムを利用するためには、FreeCADウインドウを開いたままにする必要があります.

内蔵モジュール
FreeCADは、グラフィックユーザーインターフェース抜きでも実行できるように設計されているため、ほとんど全ての機能が2つのグループに分けられています. Appと名づけられたコアとなる機能と、Guiと名づけられたGUIの機能です. このため、２つの主要な内蔵モジュールはAppとGuiと呼ばれています. この2つのモジュールは内蔵インタプリタ以外のスクリプトからも、FreeCADとFreeCADGuiという名前でそれぞれアクセスできます.


 * Appモジュール では、アプリケーション自身に関連する全ての内容が見つかります. ファイルやドキュメントのオープンとクローズのメソッドや、アクティブなドキュメントの設定、その内容のリスト化などです.


 * GUIモジュール では、Guiの構成要素の管理とアクセスのためのツールが見つかります. ワークベンチとそのツールバーや、より興味深い、FreeCADの全内容のグラフィカル表現です.

モジュールの内容を全てリストにするのは、FreeCADの開発に伴いその内容も急増していくので、少々非生産的な仕事です. しかし、これら２つの閲覧ツール（クラスブラウザとpythonヘルプ）は、いつでもモジュールの最新の完全なドキュメントを提供するはずです.

AppとGuiオブジェクト
先ほど述べたように、FreeCADの全ての機能はコアと表現に別れています. これには3Dオブジェクトも含まれています. Appモジュールを介してオブジェクトのプロパティ定義（FreeCADで機能と呼ばれるもの）にアクセスすることができ、そしてGuiモジュールを介してそれらのスクリーン上での表現方法を変えることができます. たとえば、キューブはそれを定義するプロパティである長さや幅、高さなどを持ち、これらはAppオブジェクトに格納されています. また表現のプロパティである、面の色や描画方法などは対応するGuiオブジェクトに格納されています.

このようなやり方は、視覚的な部分をまったく気にすることなくアルゴリズムをその機能の定義部分でのみ動作するようにさせたり、ドキュメントの内容をリストやスプレッドシートや要素解析などのノングラフィカルなアプリケーションへ出力するなどの、幅広い利用を可能にしています.

ドキュメント内のどのAppオブジェクトも対応するGuiオブジェクトが存在します. ドキュメントそれ自体も、実際にはAppとGuiオブジェクトを持っています. これは、もちろん、FreeCADを完全なインターフェイスで実行したときに有効になります. コマンドラインバージョンでは、GUIが存在しないので、Appオブジェクトのみが利用できます. オブジェクトのGui部分はAppオブジェクトが"再計算する"とマークされたときに再び生成されます（例えば、パラメータがひとつ変更された時）、そのためGuiオブジェトに対して直接行った操作が消えてしまう可能性があることに注意してください.

App部分にアクセスするためには、次のように入力します.

myObject = App.ActiveDocument.getObject（"ObjectName"）

ここで"ObjectName"はオブジェクトの名前です. また次のように入力することもできます.

myObject = App.ActiveDocument.ObjectName

同じオブジェクトのGUI部分へアクセスするには、次のように入力します.

myViewObject=Gui.ActiveDocument.getObject（"ObjectName"）

ここで"ObjectName"はオブジェクトの名前です. また次のように入力することもできます.

myViewObject = App.ActiveDocument.ObjectName.ViewObject

GUIを持っていない場合には（例えばコマンドラインモード）、最後の行はNoneが帰ってきます.

ドキュメントオブジェクト
FreeCAD上であなたが行った全ての内容は、ドキュメントの中に存在しています. ドキュメントはジオメトリを持ち、ファイルに保存することができます. また、複数のドキュメントを同時に開くこともできます. ドキュメントは、ジオメトリと同じく、AppやGUIオブジェクトを内部に持っています. Appオブジェクトには実際のジオメトリ定義が含まれていますが、一方でGUIオブジェクトは、ドキュメントのさまざまなビューを含んでいます. あなたは複数のウインドウを開き、そのそれぞれで、異なる倍率や視点でビューを表示することができます. これらのビューは全て、ドキュメントのGUIオブジェクトの一部です.

現在開いている（アクティブな）ドキュメントのApp部分にアクセスするには次のように入力します.

myDocument = App.ActiveDocument

新しいドキュメントを作成するには次のように入力します.

myDocument = App.newDocument（"Document Name"）

現在開いている（アクティブな）ドキュメントのApp部分にアクセスするには次のように入力します.

myGuiDocument = Gui.ActiveDocument

現在のビューにアクセスするには、つぎのように入力します.

myView = Gui.ActiveDocument.ActiveView