📘 Curso de formación: Creación de complementos para FreeCAD
Objetivo de la lección: aprender a crear cuerpos sólidos (cajas, cilindros) a través de Python, comprender la estructura del documento de FreeCAD y crear un complemento que construya una pieza paramétrica.
🧱 Parte 1. ¿Cómo está estructurado un documento en FreeCAD?
Antes de crear objetos, es importante comprender la jerarquía de datos en FreeCAD:
Document (documento)
└── Object (objeto)
└── Shape (geometría)
- Document — es un archivo abierto (
.FCStd). Todo lo que cree se encuentra dentro del documento. - Object — es un objeto paramétrico: caja, cilindro, boceto, etc.
- Shape — es un cuerpo geométrico (B-Rep) que se puede visualizar.
💡 Siempre trabaja en el contexto del documento activo.
¿Cómo obtener el documento actual?
doc = FreeCAD.ActiveDocument
Si no hay un documento, cree uno nuevo:
doc = FreeCAD.newDocument("MyDesign")
📦 Parte 2. Creación de una caja (Box) a través de Python
El objeto 3D más simple en FreeCAD es Part::Box.
Ejemplo de código:
doc = FreeCAD.ActiveDocument or FreeCAD.newDocument()
box = doc.addObject("Part::Box", "MyBox")
box.Length = 20.0
box.Width = 10.0
box.Height = 5.0
doc.recompute()
¿Qué sucede aquí?
doc.addObject("Part::Box", "MyBox")
→ crea un nuevo objeto de tipo Box con el nombre"MyBox"- El objeto tiene propiedades paramétricas:
Length,Width,Height doc.recompute()
→ reconstruye el modelo (¡obligatorio después de cambiar los parámetros!)
🔸 Todas las dimensiones están en milímetros (por defecto en FreeCAD).
🛠 Parte 3. Complemento: «Caja paramétrica»
Ahora crearemos un complemento que crea una caja con las dimensiones especificadas.
Paso 1. Cree una carpeta
.../Mod/ParamBoxAddon/
Paso 2. Archivo InitGui.py
# InitGui.py
import FreeCADGui
from ParamBoxAddon.param_box_workbench import ParamBoxWorkbench
FreeCADGui.addWorkbench(ParamBoxWorkbench())
Paso 3. Archivo param_box_workbench.py
# param_box_workbench.py
import FreeCAD, FreeCADGui
class CreateBoxCommand:
def GetResources(self):
return {
"MenuText": "Create Box",
"ToolTip": "Create a parametric box with default size"
}
def Activated(self):
# Obtener o crear un documento
doc = FreeCAD.ActiveDocument
if not doc:
doc = FreeCAD.newDocument("BoxDesign")
# Crear objeto Box
box = doc.addObject("Part::Box", "MyParamBox")
box.Length = 30.0
box.Width = 20.0
box.Height = 10.0
# ¡Recalcular es obligatorio!
doc.recompute()
# Opcional: enfocar en el objeto
FreeCADGui.Selection.clearSelection()
FreeCADGui.Selection.addSelection(box)
def IsActive(self):
return True
class ParamBoxWorkbench(FreeCADGui.Workbench):
MenuText = "Parametric Box"
ToolTip = "Create a simple parametric box"
def Initialize(self):
self.list = ["CreateBoxCommand"]
self.appendToolbar("Box Tools", self.list)
self.appendMenu("ParamBox", self.list)
def GetClassName(self):
return "Gui::PythonWorkbench"
FreeCADGui.addCommand("CreateBoxCommand", CreateBoxCommand())
▶️ Paso 4. Comprobación del funcionamiento
- Guarde los archivos
- Reinicie FreeCAD
- Seleccione el entorno de trabajo «Parametric Box»
- Haga clic en el botón «Create Box»
✅ Debería aparecer un paralelepípedo gris en la ventana 3D.
¡Compruebe la parametricidad!
- En el árbol del proyecto (Modelo), haga doble clic en
MyParamBox - En el panel Datos, cambie, por ejemplo,
Lengtha50 - Pulse Enter → ¡el modelo se actualizará automáticamente!
Esto es el modelado paramétrico.
🔍 Parte 4. Otros objetos básicos
Puede crear no solo cajas. Aquí tiene algunos ejemplos:
Cilindro
cyl = doc.addObject("Part::Cylinder", "MyCylinder")
cyl.Radius = 10.0
cyl.Height = 25.0
Esfera
sphere = doc.addObject("Part::Sphere", "MySphere")
sphere.Radius = 15.0
Cono
cone = doc.addObject("Part::Cone", "MyCone")
cone.Radius1 = 10.0 # radio inferior
cone.Radius2 = 5.0 # radio superior
cone.Height = 20.0
💡 Todos estos objetos se encuentran en el módulo Part, que está integrado en FreeCAD.
🧪 Tarea práctica
- Modifique el complemento para que cree un cilindro, en lugar de una caja.
- Haga que al crear un objeto, este reciba un nombre único (por ejemplo,
Box_1,Box_2…), si ya existe un objeto con ese nombre. - Añada un segundo comando — «Create Cylinder» — al mismo entorno de trabajo.
Sugerencia para el nombre único:
base_name = "MyBox"
index = 1
name = base_name
while name in doc.Objects:
name = f"{base_name}_{index}"
index += 1
box = doc.addObject("Part::Box", name)
💡 Consejos para la depuración
- Siempre llame a
doc.recompute()después de cambiar los parámetros - Utilice
FreeCAD.Console.PrintMessage("Texto\n")para la depuración (los mensajes aparecerán en la Vista de informe) - Compruebe si el documento existe antes de trabajar con él
▶️ ¿Qué sigue?
En la Lección 4 aprenderemos a:
- Crear una interfaz gráfica de usuario (GUI) con campos de entrada
- Crear una ventana donde el usuario introduzca la longitud, la anchura y la altura
- Y al pulsar un botón, se construirá una caja con esos parámetros
¡Esto ya será una herramienta real, no solo una demostración!