FreeCADでの新しいモジュールとワークベンチの追加はとても簡単です。ここで言うモジュールとはFreeCADの任意の拡張機能のことで、ワークベンチとはいくつかのツールバーとメニューをまとめた特別なGUI設定のことです。通常は独自のワークベンチを備えた新しいモジュールを作ります。
モジュールはC++またはPythonまたはそれらを混ぜたものでプログラムされます。ただしモジュールの初期化ファイルは必ずPythonでなければなりません。初期化ファイルでの新しいモジュールの設定は簡単で、手作業でも行えますしFreeCADのビルドツールでも行えます。
FreeCADでの新しいアプリケーションモジュールの作成は非常に単純です。FreeCADの開発ツリーの中にはFreeCADビルドツール (fcbt)が存在し、これがあなたにとって最も重要なものになります。
trunk/src/Tools/fcbt.py
の下にあるPythonスクリプトがそれです。Pythonインタプリタが正しくインストールされていればこのスクリプトを次のコマンドラインで実行できます。
python fcbt.py
すると次の様なメニューが表示されます:
FreeCAD Build Tool Usage: fcbt <command name> [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 <command name> ?
コマンドプロンプトにCMと入力するとモジュールの作成が開始します:
Insert command: CM
次にあなたの新しいモジュールの名前を指定するように促されます:
Please enter a name for your application: TestMod
エンターを押すとfcbtはあなたのモジュールが必要とする全てのファイルを次の新しいフォルダにコピーします:
trunk/src/Mod/TestMod/
次にファイル全てに対してあなたの新しいモジュールの名前での変更が行われます。それが終われば後はあなたのワークスペース(Windows)またはmakefileのターゲット(UNIX)に"appTestMod"と"appTestModGui"の二つの新しいプロジェクトを追加するだけです。これで終わりです!
新しいモジュールを作るためには二つの作業が必要です:
さらに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)
ワークベンチには次の属性が全て定義されている必要があります:
通常、自作ツール(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())
ドキュメント作成予定