Translations:Python scripting tutorial/1/ja

Pythonはプログラミング言語で使い方はとても簡単、すぐに修得することができます. オープンソースかつマルチプラットフォームで簡単なシェルスクリプトから非常に複雑なプログラムのプログラミングまでさまざま用途で使用できます. ですがもっとも広く使われている用途はスクリプト言語として使うというものです. これは他のアプリケーションに簡単に組み込むことができるためです. FreeCAD内部でもまさにその様にして使用されています. Pythonコンソール、または自作のスクリプトからFreeCADを操作したり、まだグラフィカルユーザーインターフェイスのツールがない非常に複雑な動作を行わせることもできます.

例えばPythonスクリプトからは次の様な操作を行うことができます；
 * 新しいオブジェクトの作成
 * 既存のオブジェクトの変更
 * それらのオブジェクトの3D表示の変更
 * FreeCADのインターフェイスの変更

FreeCADではPythonを使う複数の方法が存在します：
 * FreeCAD Pythonインタープリター. "コマンドライン"スタイルのインターフェイスでシンプルなコマンドを実行することができます.
 * マクロ. 存在しないツールをFreeCADインターフェイスに手軽に追加するのには便利な方法です.
 * 外部スクリプト. より複雑なプログラムに使用できます. 例えばワークベンチ全体といったものです.

このチュートリアルでは入門的なサンプルスクリプトをいくつか作成しますが、このWikiにはこれ以外にもたくさんの利用可能なPythonスクリプトについてのドキュメントがあります. もしPythonを使うのが初めてでその機能を知りたいのであれば基礎的なPyton入門もあります.

Pythonのコードを書く
FreeCADでPythonのコードを書く場合には二つの手軽な方法があります：Pythonコンソール（View -> Views -> Python consoleメニューから利用可能）、またはマクロエディター（Tools -> Macros）です. コンソールの場合Pythonコマンドを一つ一つ書いていき、コマンドはリターンキーを押したタイミングで実行されます. 一方、マクロでは複数行からできたより複雑なスクリプトを保存できます. このスクリプトはマクロが実行されたタイミングでだけ実行されます.



このチュートリアルでは両方の方法を使うことができます. 各行を一行ずつPythonコンソールにコピー/ペーストして各行ごとにキーを押すか、コード全体を新しいマクロウィンドウにコピー/ペーストしてください.

FreeCADの調査
さてまずは新しい空のドキュメントを作成しましょう：

doc = FreeCAD.newDocument

このコマンドをPythonコンソールに入力すると"FreeCAD."と入力した直後に行の残りをすばやく自動補完できるようにウィンドウがポップアップします. さらには自動補完リストの各エントリーにはそれが何を行うものかの説明のツールチップさえ備わっているのです. これを使えば利用可能な関数を簡単に調べることができます. "newDocument"を選択する前に他の利用可能なオプションも見ておいてください.



さて新しいドキュメントが作成されました. これはツールバーの"新しいドキュメント"ボタンを押した場合と同じです. 実際はFreeCADのボタンのほとんどは一、二行のPythonコードを実行しているだけに過ぎません. Edit -> Preferences -> General -> Macroにある"show script commands in python console"オプションを設定するとよくわかります. こうするとボタンを押した時に実行されるPythonコードが全てコンソールに表示されます. Pythonで操作を再現する方法を学ぶのにとても便利です.

さあ、ドキュメントに戻りましょう. ドキュメントを使って何ができるのかを確認してみましょう.

doc.

利用可能なオプションを調べてください. 通常、大文字から始まる名前は値が保持されている属性で、小文字から始まる名前は"処理を行うための"関数（メソッドとも呼ばれます）です. アンダースコアで始まる名前は通常はモジュールの内部動作のためのもので、気にする必要はありません. それではドキュメントに新しいオブジェクトを追加するためのメソッドの一つを使って見ましょう.

box = doc.addObject("Part::Box","myBox")

何も起きません. なぜでしょう？これはFreeCADが大きな展望に立って作られているからです. いつの日かそれぞれ独立した数百もの複雑なオブジェクトをFreeCADで操作できる時が来るでしょう. どこかを少し変更するだけで大きな影響が現れ、ドキュメント全体を再計算しなければならなくなるかもしれません. それには長い時間がかかることでしょう・・・こういった事情からほとんどのコマンドではシーンが自動的に更新されることはありません. 手動で更新を行う必要があるのです：

doc.recompute

見えましたか？作成したボックスが表示されました！FreeCADのオブジェクト追加ボタンの多くは実のところ2つの処理を行います. オブジェクトの追加と再計算です. もし上で説明した"show script commands in python console"オプションを有効にしていれば今度はGUIのボタンで球を追加してみてください. 二行のPythonコードが順番に実行されるのが見て取れるでしょう.

"Part::Box"は何かですって？どうすれば他の種類のオブジェクトを追加できるかですって？これを使うとわかります：

doc.supportedTypes

さて、作成したボックスの中身を調べてみましょう：

box.

すぐにとても興味をそそられるものがいくつか見つかるでしょう. 例えばこれです：

box.Height

これを使うとボックスの現在の高さを表示できます. 変更してみましょう：

box.Height = 5

マウスでボックスを選択するとプロパティパネルの"Data"タブに"Height"プロパティが表示されているのがわかるでしょう. ここ（と後で説明する"View"タブ）に表示されるFreeCADオブジェクトのプロパティは全てPythonによって直接アクセスすることができます. アクセスは先ほど"Height"プロパティでやったように名前で行います. ボックスの別の寸法も変更してみてください.

ベクトルと配置
ベクトルは3Dアプリケーションにおいて非常に基礎的な概念です. ベクトルとは3つの数字（x、y、z）のリストで、3D空間ないでの点や位置を表します. ベクトルを使うと加算、減算、投影やその他にも色々なことを行うことができます. FreeCADでは次のようにしてベクトルを使用します：

myvec = FreeCAD.Vector(2,0,0) myvec myvec.x myvec.y othervec = FreeCAD.Vector(0,3,0) sumvec = myvec.add(othervec)

FreeCADオブジェクトに共通する機能の一つが配置です. 各オブジェクトはPlacement属性を持ち、そこにはオブジェクトの位置（Base）と方向（Rotation）が保持されています. 操作は簡単です. 一例として私たちのオブジェクトを動かしてみましょう.

box.Placement. box.Placement.Base box.Placement.Base = sumvec otherpla = FreeCAD.Placement box.Placement = otherpla

さて、さらに進む前にいくつかの重要な概念を理解しておく必要があります.

AppとGui
FreeCADは最初、ユーザーインターフェイス無しのコマンドラインアプリケーションとして動作するように作成されていました. その結果、ほとんど全ての物が"幾何"コンポーネントと"表示"コンポーネントに分割されています. コマンドラインモードで動作させている際には幾何部分は存在しますが表示部分は無効化されるています. こうした理由からFreeCADのほとんどのオブジェクトは二つの部分、つまりObjectとViewObjectから構成されています.

このコンセプトの説明のために私たちの立方体を見てください. 寸法や位置など立方体の幾何プロパティはObjectの中に保持されています. 一方、色や線の太さなどの表示プロパティはViewObjecの中に保持されています. そしてそれがプロパティウィンドウの"Data"タブと"View"タブに対応しているのです. オブジェクトのViewObjecには次のようにしてアクセスすることができます：

vo = box.ViewObject

これで"View"タブのプロパティを変更することもできるようになりました：

vo.Transparency = 80 vo.hide vo.show

FreeCADが起動するとすぐにPythonコンソールは2つの基本モジュールをロードします. FreeCADとFreeCADGuiです（これらにも短縮名のAppとGuiによってアクセスることが可能です）. この二つにはドキュメントとそのオブジェクトを操作するための一般的な機能が保持されています. このコンセプトの説明のためにFreeCADとFreeCADGuiの両方にActiveDocument属性があることを確認してください. これが現在、開かれているドキュメントです. FreeCAD.ActiveDocumentとFreeCADGui.ActiveDocumentは同じオブジェクトではありません. FreeCADドキュメントを￥の二つのコンポーネントであり、異なる属性とメソッドが保持されています. 例えばFreeCADGui.ActiveDocument にはActiveViewがありますが、これは現在開かれている3Dビューです.