Module Creation/es

La adición de nuevos módulos y entornos en FreeCAD es muy sencillo. Denominamos módulo a cualquier extensión de FreeCAD, mientras que entorno es una configuración especial de interfaz gráfica de usuario que agrupa algunas barras de herramientas y menús. Normalmente creas un nuevo módulo que contiene su propio entorno.

Los módulos se pueden programar en C++ o en Python, o en una mezcla de ambos, pero los archivos init del módulo deben estar en Python. Establecer un nuevo módulo con dichos archivos init es sencillo, y se puede hacer manualmente o con la herramienta de construcción de FreeCAD.

Utilización de la herramienta de construcción de FreeCAD
La creación de un nuevo módulo de aplicación en FreeCAD es bastante simple. En árbol de desarrollo de FreeCAD existe la Herramienta de construcción de FreeCAD (fcbt) que hace las parte más importantes para ti. Es un archivo de guión en Python ubicado en trunk/src/Tools/fcbt.py Cuando tu interprete de Python está correctamente instalado puedes ejecutar este archivo de guión desde la línea de comandos con python fcbt.py Mostrará el siguiente menú: 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 ? En la línea de comandos introduce CM para comenzar la creación de un módulo: Insert command: CM Te pedirá que especifiques un nombre para tu nuevo módulo. Vamos a llamarlo TestMod por ejemplo: Please enter a name for your application: TestMod Después de pulsar enter fcbt comienza copiando todos los archivos necesarios para tu módulo en una carpeta nueva en trunk/src/Mod/TestMod/ Luego todos los archivos se modifican con el nombre de tu nuevo módulo. Lo único que necesitas hacer ahora es añadir los dos nuevos proyectos "appTestMod" y "appTestModGui" a tu espacio de trabajo (en Windows) o a tus objetivos de makefile (unix). Eso es!

Establecer un nuevo módulo manualmente
Necesitas dos cosas para crear un nuevo módulo:


 * Un nuevo directorio  en el directorio Mod de FreeCAD (ya sea en RutadeInstalación/FreeCAD/Mod o en RutadeUsuario/.FreeCAD/Mod). Puedes denominarlo como quieras.
 * Dentro de dicho directorio, un archivo InitGui.py. Este archivo será ejecutado automáticamente en el inicio de FreeCAD (por ejemplo, pon el print("hello world") dentro)

Adicionalmete, también puedes poner un archivo Init.py. La diferencia es que, el archivo InitGui.py está cargado sólo cuando FreeCAD se ejecuta en modo interfaz gráfica de usuario, el archivo Init.py se carga siempre. Pero si vamos a crear un entorno, lo pondremos en el InitGui.py, porque los entornos se usan sólo en modo interfaz gráfica de usuario, por supuesto.

Creación de un nuevo entorno
Dentro del archivo InitGui.py, una de las primeras cosas que querrás hacer es definir un entorno. Aquí tienes el mínimo código que puedes utilizar:

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): # do something here if needed... Msg ("MyWorkbench.Activated\n") def Deactivated(self): # do something here if needed... Msg ("MyWorkbench.Deactivated\n") FreeCADGui.addWorkbench(MyWorkbench)

El entorno debe tener todos estos atributos definidos:


 * El atributo de icono es una imagen XPM (La mayoría de programas como GIMP pueden convertir una imagen a formato xpm, el cual es un archivo de texto. Puedes entonces pegar el contenido aquí)
 * MenuText es el nombre del entorno tal como aparece en la lista de entornos
 * Tooltip aparece cuando pasas sobre el con el ratón
 * Initialize se ejecuta en la carga de FreeCAD, y debe crear todos los menús y barras de herramientas que el entorno va a utilizar.Si vas a crear tu propio módulo en C++, también puedes definir tus menús y barras de herramientas dentro del módulo C++, no en el archivo InitGui.py. Lo importante es si están creados o no cuando el módulo es activado.
 * Activated se ejecuta cuando el usuario cambia a tu entorno
 * Deactivated se ejecuta cuando el usuario cambia de tu entorno a otro entorno o abandona FreeCAD

Creación de comandos de FreeCAD en Python
Normalmente defines todas las herramientas (denominadas comandos en FreeCAD) en otro módulo, luego lo importas antes de la creación de las barras de herramientas y menús. Este es el mínimo código que puedes utilizar para definir un comando:

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): # do something here... FreeCADGui.addCommand('MyCommand1',MyTool)


 * El método GetResources debe devolver un diccionario con atributos visuales de tu herramienta. Accel define un atajo de teclado pero no es obligatorio.
 * El método IsActive define si el comando está activo o desactivado en los menús y barras de herramientas.
 * El método Activated se ejecuta cuando el comando se llama a través de un botón de una barra de herramientas o menú o incluso a través de un archivo de guión.

Creación de comandos de FreeCAD en C++
Pendiente de documentar