📘 Curso de formación: Creación de complementos para FreeCAD
Objetivo de la lección: crear un complemento sencillo que añada un nuevo entorno de trabajo con un botón, y que al pulsarlo muestre un mensaje.
📁 Paso 1. Preparación de la carpeta del complemento
Asegúrese de tener la carpeta:
.../FreeCAD/Mod/HelloWorldAddon/
Si no es así, créela.
💡 El nombre de la carpeta es importante: debe coincidir con el nombre del módulo en el código.
UsaremosHelloWorldAddon.
Dentro de esta carpeta, cree dos archivos:
InitGui.pyhello_workbench.py
❗ ¡No utilice espacios ni caracteres cirílicos en los nombres de archivos y carpetas!
📄 Paso 2. Archivo InitGui.py — punto de entrada
Este archivo se ejecuta automáticamente en FreeCAD al inicio, si se encuentra en la carpeta del complemento.
Ábralo en un editor e inserte el siguiente código:
# InitGui.py
import FreeCADGui
from HelloWorldAddon.hello_workbench import HelloWorldWorkbench
FreeCADGui.addWorkbench(HelloWorldWorkbench())
🔍 ¿Qué hace este código?
- Importa nuestro entorno de trabajo del archivo
hello_workbench.py - Registra el entorno de trabajo en la interfaz de FreeCAD a través de
FreeCADGui.addWorkbench()
⚠️ Tenga en cuenta:
from HelloWorldAddon.hello_workbench— aquíHelloWorldAddones el nombre de la carpeta, yhello_workbenches el nombre del archivo sin la extensión.py.
📄 Paso 3. Archivo hello_workbench.py — lógica del complemento
Ahora crearemos el entorno de trabajo en sí.
Inserte el siguiente código en hello_workbench.py:
# hello_workbench.py
import FreeCAD, FreeCADGui
from PySide import QtGui
# === COMANDO: lo que ocurre al pulsar el botón ===
class HelloWorldCommand:
def GetResources(self):
"""Devuelve los datos para mostrar el comando"""
return {
"MenuText": "Say Hello", # Texto en el menú
"ToolTip": "Show a greeting", # Sugerencia
"Pixmap": "" # Ruta al icono (vacío por ahora)
}
def Activated(self):
"""Se llama al pulsar el botón"""
QtGui.QMessageBox.information(
None,
"FreeCAD Addon",
"¡Hola, mundo!\n¡Acaba de iniciar su primer complemento!"
)
def IsActive(self):
"""¿Cuándo está disponible el comando? (siempre — True)"""
return True
# === ENTORNO DE TRABAJO: agrupa comandos ===
class HelloWorldWorkbench(FreeCADGui.Workbench):
# Nombre que se mostrará en la lista
MenuText = "Hello World"
ToolTip = "Mi primer entorno de trabajo"
def Initialize(self):
"""Se llama al activar el entorno de trabajo"""
# Lista de nombres de comandos
self.list = ["HelloWorldCommand"]
# Añadir barra de herramientas
self.appendToolbar("Hello Tools", self.list)
# Añadir elemento al menú
self.appendMenu("Hello World", self.list)
def GetClassName(self):
"""Método obligatorio para entornos de trabajo Python"""
return "Gui::PythonWorkbench"
# === REGISTRO DE COMANDOS ===
FreeCADGui.addCommand("HelloWorldCommand", HelloWorldCommand())
🔍 Desglose del código por partes:
1. Comando (HelloWorldCommand)
GetResources()— describe cómo se ve el comando en la interfazActivated()— qué ocurre al hacer clicIsActive()— cuándo está activo el botón (por ejemplo, solo si hay un documento)
2. Entorno de trabajo (HelloWorldWorkbench)
- Hereda de
FreeCADGui.Workbench - El método
Initialize()añade comandos a la barra de herramientas y al menú GetClassName()le dice a FreeCAD: «este es un entorno de trabajo de Python»
3. Registro
FreeCADGui.addCommand()vincula el nombre `