Module Creation/jp

FreeCADでの新しいモジュールとワークベンチの追加はとても簡単です. ここで言うモジュールとはFreeCADの任意の拡張機能のことで、ワークベンチとはいくつかのツールバーとメニューをまとめた特別なGUI設定のことです. 通常は独自のワークベンチを備えた新しいモジュールを作ります.

モジュールはC++またはPythonまたはそれらを混ぜたものでプログラムされます. ただしモジュールの初期化ファイルは必ずPythonでなければなりません. 初期化ファイルでの新しいモジュールの設定は簡単で、手作業でも行えますしFreeCADのビルドツールでも行えます.

FreeCADビルドツール
FreeCADでの新しいアプリケーションモジュールの作成は非常に単純です. FreeCADの開発ツリーの中にはFreeCADビルドツール (fcbt)が存在し、これがあなたにとって最も重要なものになります. trunk/src/Tools/fcbt.py の下にあるPythonスクリプトがそれです. Pythonインタプリタが正しくインストールされていればこのスクリプトを次のコマンドラインで実行できます. python fcbt.py すると次の様なメニューが表示されます： FreeCAD Build Tool Usage: fcbt [command parameter] possible commands are: - DistSrc        (DS)   Build a source Distr. of the current source tree - DistBin        (DB)   Build a binary Distr. of the current source tree - DistSetup      (DI)   Build a Setup Distr. of the current source tree - DistSetup      (DUI)  Build a User Setup Distr. of the current source tree - DistAll        (DA)   Run all three above modules - BuildDoc       (BD)   Create the documentation (source docs) - NextBuildNumber (NBN) Increase the Build Number of this Version - CreateModule   (CM)   Insert a new FreeCAD Module in the module directory For help on the modules type: fcbt ? コマンドプロンプトにCMと入力するとモジュールの作成が開始します： Insert command: CM 次にあなたの新しいモジュールの名前を指定するように促されます： Please enter a name for your application: TestMod エンターを押すとfcbtはあなたのモジュールが必要とする全てのファイルを次の新しいフォルダにコピーします： trunk/src/Mod/TestMod/ 次にファイル全てに対してあなたの新しいモジュールの名前での変更が行われます. それが終われば後はあなたのワークスペース（Windows）またはmakefileのターゲット（UNIX）に"appTestMod"と"appTestModGui"の二つの新しいプロジェクトを追加するだけです. これで終わりです！

新しいモジュールを手作業で設定する
新しいモジュールを作るためには二つの作業が必要です：


 * FreeCADのModフォルダ（インストールパス/FreeCAD/Modまたはユーザーパス/.FreeCAD/Modのどちらか）に新しいフォルダを作成. 名前は好きなものを使用できます.
 * そのフォルダの中にInitGui.pyファイルを置きます. このファイルはFreeCAD起動時に自動で実行されます（例えば中にprint("hello world")と書いてみてください）.

さらにInit.pyファイルを置くこともできます. InitGui.pyファイルがFreeCADをGUIモードで実行した時にしか読み込まれないのに対してInit.pyファイルは常に読み込まれます. ただしワークベンチを作成しようとする場合にはInitGui.pyを置きましょう. 言うまでもなくワークベンチはGUIでしか使用されないからです.

新しいワークベンチの作成
InitGui.pyファイルの中でまず行いたいのはワークベンチを定義することです. 以下にあなたが使うことのできる最小のコードを記載しておきます：

class MyWorkbench ( Workbench ): "My workbench object" Icon = """ 			/* XPM */ 			static const char *test_icon[]={ 			"16 16 2 1", 			"a c #000000", 			". c None", 			"................", 			"................", 			"..############..", 			"..############..", 			"..############..", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"................", 			"................"}; 			""" MenuText = "My Workbench" ToolTip = "This is my extraordinary workbench" def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): import myModule1, myModule2 self.appendToolbar("My Tools", ["MyCommand1","MyCommand2"]) self.appendMenu("My Tools", ["MyCommand1","MyCommand2"]) Log ("Loading MyModule... done\n") def Activated(self): # 必要な場合はここで処理を行う... Msg ("MyWorkbench.Activated\n") def Deactivated(self): # 必要な場合はここで処理を行う... Msg ("MyWorkbench.Deactivated\n") FreeCADGui.addWorkbench(MyWorkbench)

ワークベンチには次の属性が全て定義されている必要があります：
 * Icon. XPM画像です（GIMPを始めとしたほとんどのソフトウェアで画像をテキストファイルであるXPM形式に変換できます. 変換した内容をここにペーストしてください）.
 * MenuText. ワークベンチリストに表示されるワークベンチ名です.
 * Tooltip. マウスオーバーした際に表示されます.
 * Initialize. FreeCAD起動の際に実行され、ここでワークベンチが使用する全てのメニューとツールバーが作成されなければなりません. モジュールをC++で作成する場合はこのInitGui.pyファイルの中ではなくC++モジュールの中でメニューとツールバーを定義することもできます. 大事なのはモジュールがアクティブ化された時ではなく、今、メニューとツールバーを作成することなのです.
 * Activated. ユーザーがあなたのワークベンチに切り替えた際に実行されます.
 * Deactivated. ユーザーがあなたのワークベンチから他のワークベンチに切り替えるか、FreeCADを終了した際に実行されます.

PythonでのFreeCADコマンドの作成
通常、自作ツール（FreeCADではコマンドと呼ばれます）は全て他のモジュールに定義してツールバーやメニューが作成される前にそのモジュールをインポートするようにします. 以下にあなたがコマンドの定義で使うことのできる最小のコードを記載しておきます：

import FreeCAD,FreeCADGui class MyTool: "My tool object" def GetResources(self): return {"MenuText": "My Command", "Accel": "Ctrl+M", "ToolTip": "My extraordinary command", "Pixmap" : """ 			/* XPM */ 			static const char *test_icon[]={ 			"16 16 2 1", 			"a c #000000", 			". c None", 			"................", 			"................", 			"..############..", 			"..############..", 			"..############..", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"................", 			"................"}; 			"""} def IsActive(self): if FreeCAD.ActiveDocument == None: return False else: return True def Activated(self): # ここで何か処理する... FreeCADGui.addCommand('MyCommand1',MyTool)


 * GetResourcesメソッドはツールの視覚属性が入った辞書を返さなければなりません. Accelでショートカットキーが定義されますがこれは必須ではありません.
 * IsActiveメソッドはメニューやツールバー内でコマンドがアクティブか、グレーアウトしているかを定義します.
 * Activatedメソッドはツールバーボタン、メニューまたはスクリプトによってコマンドが呼ばれた際に実行されます.

C++でのFreeCADコマンドの作成
ドキュメント作成予定