Crear Add-on en Blender con Python
Crear Add-on en Blender con Python
Grok / X
Messages práctico, ejemplos de código y explicaciones claras. Crearemos un add-on sencillo que
añade un panel en la interfaz de Blender para generar un cubo con propiedades
Grok personalizables (como tamaño y rotación) y lo haremos paso a paso.
Lists
Bookmarks
Máster Class: Creando un Add-on en Blender con Python
Jobs
Objetivo del Add-on
Communities
Nuestro add-on, llamado "Cubo Mágico", añadirá un panel en la pestaña de propiedades de
Premium Blender (N-Panel) que permitirá al usuario:
Editor de texto: Usa el editor de texto integrado en Blender o uno externo como VS
Kaidan
@KaidanCrown Code.
[Link] 1/93
28/7/25, 6:21 p.m. Grok / X
Ve a Edit > Preferences > Interface > Developer Extras y activa la opción.
Home
Explore
Un add-on en Blender es un script Python con una estructura específica. Debe incluir:
Messages
Información del add-on ( bl_info ): Metadatos como nombre, versión, etc.
Grok
Clases de Blender: Para definir operadores (botones), paneles, propiedades, etc.
Jobs
Communities
Paso 1: Estructura Básica del Script
Premium
Crea un archivo llamado cubo_magico.py . Este será nuestro add-on. Comienza con la
Profile
bl_info = {
"name": "Cubo Mágico",
More "author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0),
Post "location": "View3D > N-Panel > Cubo Mágico",
"description": "Añade un cubo con tamaño y rotación personalizables",
"category": "Add Mesh",
}
import bpy
Kaidan
def register():
@KaidanCrown print("Add-on registrado")
[Link] 2/93
28/7/25, 6:21 p.m. Grok / X
def unregister():
print("Add-on desregistrado")
if __name__ == "__main__":
Home register()
python
Explore Explicación:
bl_info : Define los metadatos del add-on. Es obligatorio para que Blender lo reconozca.
Notifications
register() y unregister() : Funciones que Blender llama al activar/desactivar el add-
Messages on.
Activa el add-on (busca "Cubo Mágico"). Deberías ver "Add-on registrado" en la consola.
Jobs
Communities
Premium
Paso 2: Crear un Operador
Verified Orgs
Un operador es una acción que el usuario puede ejecutar (como un botón). Vamos a crear un
operador que genere un cubo.
Profile
Añade este código debajo de import bpy :
More
class CUBO_OT_generate_cube([Link]):
Post bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}
[Link] 3/93
28/7/25, 6:21 p.m. Grok / X
Explicación:
Grok
Lists
Paso 3: Crear Propiedades Personalizables
Bookmarks Añadiremos propiedades para que el usuario pueda definir el tamaño y la rotación del cubo.
Estas propiedades se almacenan en el contexto de la escena.
Jobs
Añade este código antes de la clase del operador:
Communities
[Link].cube_rotation = [Link](
name="Rotación",
description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
subtype='EULER',
update=update_cube_rotation
Kaidan
)
@KaidanCrown python
[Link] 4/93
28/7/25, 6:21 p.m. Grok / X
Explicación:
Home globalmente.
Notifications update : Funciones de callback que se ejecutan cuando el usuario cambia los valores (útil
para depuración o lógica adicional).
Messages
Grok
Lists
Paso 4: Modificar el Operador para Usar las Propiedades
Jobs
class CUBO_OT_generate_cube([Link]):
bl_idname = "cubo.generate_cube"
Communities bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}
Premium
def execute(self, context):
Verified Orgs # Obtener propiedades de la escena
size = [Link].cube_size
rotation = [Link].cube_rotation
Profile
# Crear cubo con las propiedades
[Link].primitive_cube_add(size=size, location=(0, 0, 0), rotation=rotation)
More [Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}")
Post
Explicación:
[Link] 5/93
28/7/25, 6:21 p.m. Grok / X
Ahora crearemos un panel en el N-Panel (pestaña lateral en la vista 3D) para mostrar las
Home propiedades y el botón.
Notifications
class CUBO_PT_panel([Link]):
bl_label = "Cubo Mágico"
Messages bl_idname = "CUBO_PT_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
Grok bl_category = "Cubo Mágico"
bl_context = "objectmode"
Verified Orgs bl_space_type y bl_region_type : Define que el panel aparecerá en la vista 3D, en el N-
Panel.
Profile
bl_category : Nombre de la pestaña en el N-Panel.
Post
Añadiremos un botón para resetear las propiedades a sus valores por defecto.
Kaidan
Añade este operador después del primero:
@KaidanCrown
[Link] 6/93
28/7/25, 6:21 p.m. Grok / X
class CUBO_OT_reset([Link]):
bl_idname = "[Link]"
Home bl_label = "Resetear Propiedades"
bl_description = "Restaura los valores por defecto"
bl_options = {'REGISTER', 'UNDO'}
Explore
def execute(self, context):
[Link].cube_size = 2.0
Notifications [Link].cube_rotation = (0.0, 0.0, 0.0)
[Link]({'INFO'}, "Propiedades reseteadas")
return {'FINISHED'}
Messages python
Lists
class CUBO_PT_panel([Link]):
bl_label = "Cubo Mágico"
Bookmarks bl_idname = "CUBO_PT_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
Jobs bl_category = "Cubo Mágico"
bl_context = "objectmode"
More
Post
Paso 7: Registrar las Clases
Para que Blender reconozca las clases, debemos registrarlas. Actualiza las funciones
register y unregister :
Kaidan
# Lista de clases a registrar
@KaidanCrown classes = (
[Link] 7/93
28/7/25, 6:21 p.m. Grok / X
CUBO_OT_generate_cube,
CUBO_OT_reset,
CUBO_PT_panel,
)
Home
def register():
for cls in classes:
Explore [Link].register_class(cls)
# Registrar propiedades
[Link].cube_size = [Link](
Notifications name="Tamaño",
description="Tamaño del cubo",
default=2.0,
Messages min=0.1,
max=10.0,
update=update_cube_size
Grok )
[Link].cube_rotation = [Link](
name="Rotación",
Lists description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
Bookmarks subtype='EULER',
update=update_cube_rotation
)
Jobs
def unregister():
for cls in reversed(classes):
Communities [Link].unregister_class(cls)
# Eliminar propiedades
del [Link].cube_size
python
Premium del [Link].cube_rotation
Post
Kaidan
@KaidanCrown bl_info = {
"name": "Cubo Mágico",
[Link] 8/93
28/7/25, 6:21 p.m. Grok / X
"author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0),
"location": "View3D > N-Panel > Cubo Mágico",
# Panel en el N-Panel
class CUBO_PT_panel([Link]):
bl_label = "Cubo Mágico"
bl_idname = "CUBO_PT_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
Kaidan bl_category = "Cubo Mágico"
@KaidanCrown bl_context = "objectmode"
[Link] 9/93
28/7/25, 6:21 p.m. Grok / X
def draw(self, context):
layout = [Link]
scene = [Link]
[Link](scene, "cube_size")
def register():
Grok for cls in classes:
[Link].register_class(cls)
[Link].cube_size = [Link](
Lists name="Tamaño",
description="Tamaño del cubo",
Bookmarks default=2.0,
min=0.1,
max=10.0,
Jobs update=update_cube_size
)
[Link].cube_rotation = [Link](
Communities name="Rotación",
description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
Premium subtype='EULER',
update=update_cube_rotation
)
Verified Orgs
def unregister():
for cls in reversed(classes):
Profile [Link].unregister_class(cls)
del [Link].cube_size
del [Link].cube_rotation
More
if __name__ == "__main__":
python
register()
Post
[Link] 10/93
28/7/25, 6:21 p.m. Grok / X
Instala el add-on:
Bookmarks
More
Post
Consejos Prácticos
Depuración:
Usa print() o [Link]() para ver mensajes en la consola de Blender ( Window >
Toggle System Console en Windows).
Kaidan
Activa el modo desarrollador para acceder a herramientas como el visor de
@KaidanCrown
información.
[Link] 11/93
28/7/25, 6:21 p.m. Grok / X
Documentación:
Jobs
Communities
Modifica el add-on para que el cubo se genere en una posición aleatoria dentro de un
Verified Orgs
rango (-5, 5) en cada eje.
Profile Añade una propiedad para elegir el color del cubo (usa [Link] para crear un
material).
More
Crea un botón que elimine todos los cubos generados.
Kaidan
@KaidanCrown
[Link] 12/93
28/7/25, 6:21 p.m. Grok / X
Recursos Adicionales
Explore Comunidad: Únete a foros como Blender Stack Exchange o el canal de Blender en
Discord.
Notifications
Messages
Grok ¡Ya tienes un add-on funcional! Este es un punto de partida; puedes expandirlo con más
funcionalidades según tus necesidades. Si quieres profundizar en algún aspecto (por
Lists ejemplo, el ejercicio o añadir más características), dime y lo desarrollamos juntos.
Bookmarks
Profile progresivo. Este plan está diseñado para cubrir los fundamentos del desarrollo de add-ons, la
creación del add-on descrito, y la implementación del ejercicio propuesto (generar cubos en
More posiciones aleatorias, añadir un color personalizable y un botón para eliminar cubos). Cada
lección tiene una duración aproximada de 1-1.5 horas y está pensada para principiantes con
Post conocimientos básicos de Python y Blender.
Home Temas:
Communities
Actividad práctica:
[Link] 14/93
28/7/25, 6:21 p.m. Grok / X
Explore Temas:
Communities
Premium
Lección 4: Diseñando la Interfaz de Usuario
Verified Orgs Objetivo: Crear un panel en la interfaz de Blender para interactuar con el add-on.
Profile Temas:
Actividad práctica:
Crear un panel en el N-Panel para mostrar las propiedades y el botón del operador.
[Link] 15/93
28/7/25, 6:21 p.m. Grok / X
Explore ejercicio).
Temas:
Notifications
Creación de un operador para resetear propiedades.
Messages Uso de la librería random para generar posiciones aleatorias.
Premium
Verified Orgs
Lección 6: Añadiendo Color y Eliminación de Cubos
Profile
Objetivo: Completar el add-on con las funcionalidades de color y eliminación de cubos
Temas:
Post
Crear y asignar materiales a objetos ( [Link] ).
Actividad práctica:
Kaidan
@KaidanCrown Añadir una propiedad para elegir el color del cubo.
[Link] 16/93
28/7/25, 6:21 p.m. Grok / X
Home Resultado esperado: Un add-on completo con todas las funcionalidades del ejercicio,
listo para distribución.
Explore
Notifications
Messages
Notas Generales
Grok Metodología: Cada lección incluye una breve explicación teórica (15-20 minutos), una
demostración práctica (20-30 minutos) y una actividad guiada (30-40 minutos).
Lists
Requisitos previos: Conocimientos básicos de Python (variables, funciones, clases) y
Verified Orgs
Profile Este outline proporciona una estructura clara y progresiva para aprender a desarrollar el add-
on. Cuando estés listo, puedo desarrollar cada lección completa y detalladamente con
More explicaciones, código, ejemplos y ejercicios específicos. ¡Dime por cuál lección quieres
empezar!
Post
[Link] 17/93
28/7/25, 6:21 p.m. Grok / X
Communities
Kaidan
1. Introducción a la API de Blender y su estructura ( bpy )
@KaidanCrown
[Link] 18/93
28/7/25, 6:21 p.m. Grok / X
Home renderizado y más. Además de su interfaz gráfica, Blender permite personalizar y automatizar
tareas usando Python a través de su API (Application Programming Interface). La API de
Explore Blender es un conjunto de herramientas y funciones que te permiten interactuar con los
elementos del programa (como objetos, escenas, materiales) desde código Python.
Notifications
¿Qué es bpy ?
Messages
bpy es el módulo principal de la API de Blender. Es como una biblioteca que contiene todas
Grok las funciones, clases y herramientas necesarias para controlar Blender desde Python. Piensa
en bpy como el puente entre tu código Python y las funcionalidades de Blender. Por ejemplo:
Lists Puedes crear un cubo con [Link].primitive_cube_add() .
[Link] : Contiene los datos de Blender, como objetos, materiales y escenas. Ejemplo:
More
[Link]["Cube"] accede a un objeto llamado "Cube".
[Link] : Define clases para crear elementos de la interfaz, como operadores, paneles
Post
y propiedades. Ejemplo: [Link] para crear botones.
[Link] 19/93
28/7/25, 6:21 p.m. Grok / X
Un add-on en Blender es simplemente un script Python que usa la API ( bpy ) para añadir
nuevas funcionalidades a Blender, como herramientas personalizadas, paneles en la interfaz
o automatizaciones. Como aprendiz de Python, ya sabes cómo escribir funciones y clases; la
Home
API de Blender es solo una biblioteca específica que aprenderás a usar paso a paso.
Explore
Ejemplo mental
Notifications Imagina que Blender es una cocina gigante y bpy es un libro de recetas con instrucciones
para usar los utensilios (operadores), acceder a los ingredientes (datos) y ajustar la
Messages configuración del horno (propiedades). Un add-on es como tu propia receta personalizada
que añades al libro.
Grok
Lists
Bookmarks
2. Configuración del entorno: modo desarrollador, consola de Python y
Jobs editor de texto
Para desarrollar un add-on, necesitas configurar Blender para que sea más fácil escribir y
Premium
probar código. Esto incluye activar herramientas de desarrollo y familiarizarte con la interfaz.
Verified Orgs
Paso 1: Activar el modo desarrollador
Profile El modo desarrollador en Blender habilita herramientas adicionales, como menús
contextuales para inspeccionar elementos y opciones para desarrolladores.
More
Instrucciones:
Kaidan Cierra las preferencias. Ahora verás opciones adicionales al hacer clic derecho en la
@KaidanCrown interfaz (como "View Source" para inspeccionar elementos).
[Link] 20/93
28/7/25, 6:21 p.m. Grok / X
Instrucciones (Windows):
Explore
En Blender, ve a Window > Toggle System Console .
Notifications Aparecerá una ventana de consola donde puedes ver mensajes como
print("Hola") .
Messages
Instrucciones (Mac/Linux):
Grok
La consola no está disponible por defecto en Mac/Linux, pero puedes ver mensajes
Cambia una de las áreas de la interfaz a Info (haz clic en el icono de la esquina
Bookmarks
superior izquierda de cualquier área y selecciona "Info").
Prueba:
Communities
En la consola de Blender, escribe: [Link].primitive_cube_add() y presiona
Premium Enter.
Post En la barra superior, cambia un área de la interfaz a Text Editor (haz clic en el icono
de la esquina superior izquierda y selecciona "Text Editor").
Kaidan
@KaidanCrown print("¡Hola desde el editor de texto de Blender!")
python
[Link] 21/93
28/7/25, 6:21 p.m. Grok / X
Haz clic en el botón Run Script (triángulo de "play") en la barra del editor de texto.
Home (Mac/Linux).
Lists Configurar el entorno te permite escribir, probar y depurar código de manera eficiente. Como
principiante en Blender, familiarizarte con estas herramientas es clave para trabajar
Bookmarks cómodamente.
Jobs
Communities
3. Creación de un script Python básico en Blender
Premium
Concepto: Scripts en Blender
Verified Orgs
Un script Python en Blender es un archivo .py que usa el módulo bpy para interactuar con el
Profile programa. Antes de crear un add-on completo, probaremos un script simple para entender
cómo funciona bpy .
More
Ejemplo de script básico
Post Vamos a crear un script que cree un cubo y lo mueva a una posición específica.
@KaidanCrown
# Crear un cubo
[Link] 22/93
28/7/25, 6:21 p.m. Grok / X
[Link].primitive_cube_add(size=2, location=(0, 0, 0))
Bookmarks [Link] : Modifica la posición del cubo usando una tupla (x, y, z) .
Si estás acostumbrado a Python, piensa en bpy como una biblioteca externa (como math o
Communities
random ). La diferencia es que bpy está diseñada específicamente para interactuar con
Premium Blender. Los métodos como [Link] son similares a funciones, y los objetos como
[Link] son como instancias de clases con propiedades.
Verified Orgs
Prueba adicional
Profile
Modifica el script para cambiar el tamaño del cubo o moverlo a otra posición. Por ejemplo:
More
[Link].primitive_cube_add(size=5, location=(0, 0, 0))
cube = [Link]
Post
[Link] = (-1, 2, 0)
python
Kaidan
@KaidanCrown 4. Estructura de un add-on: bl_info , register() , unregister()
[Link] 23/93
28/7/25, 6:21 p.m. Grok / X
Un add-on en Blender es un script Python con una estructura específica que permite añadir
Home funcionalidades permanentes a Blender. A diferencia de un script que ejecutas una vez, un
add-on se instala en Blender y permanece disponible hasta que lo desactivas.
Explore
Componentes clave de un add-on
Notifications
Un add-on debe tener:
register() : Una función que registra las clases y propiedades del add-on en Blender.
Grok
unregister() : Una función que elimina las clases y propiedades cuando desactivas el
Lists add-on.
Premium
bl_info = {
"name": "Mi Primer Add-on",
Verified Orgs "author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0), # Versión mínima de Blender soportada
Profile "location": "View3D > Tools",
"description": "Un add-on simple para aprender",
More }
"category": "Learning",
python
Post
name : Nombre del add-on que aparece en la lista de add-ons.
[Link] 24/93
28/7/25, 6:21 p.m. Grok / X
category : Categoría para clasificar el add-on (por ejemplo, "Add Mesh", "Animation").
Home
Funciones register() y unregister()
Explore register() : Blender llama esta función cuando activas el add-on. Aquí registras clases,
propiedades u otros elementos.
Notifications
unregister() : Blender llama esta función cuando desactivas el add-on. Aquí limpias
Ejemplo básico:
Grok
Jobs
Estructura mínima de un add-on
Communities
Aquí está el código mínimo para un add-on vacío:
Premium
Post
import bpy
def register():
print("Add-on registrado")
def unregister():
print("Add-on desregistrado")
Kaidan
@KaidanCrown
python
[Link] 25/93
28/7/25, 6:21 p.m. Grok / X
if __name__ == "__main__":
register()
Messages Un diccionario es como una lista de pares clave-valor. En bl_info , las claves son
"name" , "author" , etc., y los valores son los datos correspondientes.
Grok
Las funciones register() y unregister() son como cualquier función en Python, pero
Blender las llama automáticamente al activar/desactivar el add-on.
Lists
Bookmarks
Jobs
5. Actividad práctica: Crear e instalar un add-on vacío
Communities
Objetivo
Premium Crear un add-on simple que se instale en Blender y muestre un mensaje en la consola al
activarse.
Verified Orgs
bl_info = {
"name": "Mi Primer Add-on",
"author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0),
Kaidan "location": "View3D > Tools",
@KaidanCrown "description": "Un add-on simple para aprender",
"category": "Learning",
[Link] 26/93
28/7/25, 6:21 p.m. Grok / X
}
import bpy
Messages
Guarda el archivo como mi_primer_addon.py (haz clic en Save As en el editor de
texto y guárdalo en tu computadora).
Grok
Instalar el add-on:
Lists
Ve a Edit > Preferences > Add-ons .
Busca "Mi Primer Add-on" en la lista de add-ons y marca la casilla para activarlo.
Jobs
Verifica que el mensaje "¡Mi Primer Add-on está registrado!" aparece en la consola
Communities (Windows) o ventana Info (Mac/Linux).
More Depuración
Home
Explore
6. Cierre y próximos pasos
Notifications
Messages Resumen
En esta lección:
Grok
Aprendiste qué es la API de Blender y el módulo bpy .
Lists Configuraste Blender para desarrollo (modo desarrollador, consola, editor de texto).
Communities
Próximos pasos
[Link].primitive_cylinder_add(radius=1, depth=2)
python
Kaidan
@KaidanCrown Consejos para principiantes
[Link] 28/93
28/7/25, 6:21 p.m. Grok / X
Home Usa la consola de Blender para experimentar con comandos como [Link] o
[Link] .
Explore Consulta la Documentación de la API de Blender si quieres explorar más.
Notifications
Messages
Recursos Adicionales
Grok
Documentación oficial: Blender Python API
Lists
Tutoriales para principiantes: Busca "Blender Python scripting" en YouTube para
Communities
Premium ¡Felicidades por completar la Lección 1! Ahora tienes las bases para empezar a desarrollar
add-ons en Blender. Si quieres aclarar algún concepto, practicar más ejemplos o avanzar a la
Verified Orgs
Lección 2, avísame y seguimos.
Kaidan ejecutar en Blender. Al final, tendrás un add-on con un operador que genera un cubo y podrás
@KaidanCrown ejecutarlo desde la consola de Blender.
[Link] 29/93
28/7/25, 6:21 p.m. Grok / X
Explore
Notifications
Actividad práctica: Crear un operador que genere un cubo y ejecutarlo desde la consola
Jobs
Cierre y próximos pasos
Communities
Premium
En Blender, un operador es una acción que el usuario puede ejecutar, como crear un objeto,
More
moverlo, o aplicar una transformación. En términos de la interfaz, los operadores suelen
manifestarse como botones, opciones de menú o comandos que puedes ejecutar. En la API
Post
de Blender, los operadores se definen usando la clase [Link] , que te permite
programar tus propias acciones personalizadas.
Piensa en un operador como una función en Python, pero con una estructura especial que
Blender reconoce y puede integrar en su interfaz. Por ejemplo:
Kaidan Cuando haces clic en "Add > Mesh > Cube" en Blender, estás ejecutando el operador
@KaidanCrown [Link].primitive_cube_add .
[Link] 30/93
28/7/25, 6:21 p.m. Grok / X
Un operador personalizado podría ser un botón que crea un cubo con propiedades
específicas, como el que construiremos en esta lección.
Home
¿Cómo encaja en un add-on?
Explore Los operadores son la base de la funcionalidad interactiva de un add-on. En nuestro add-on
"Cubo Mágico", crearemos un operador que genere un cubo, y más adelante lo conectaremos
Notifications a un botón en la interfaz.
Jobs
Communities
2. Propiedades de un operador: bl_idname , bl_label , bl_options
Premium
Concepto: Propiedades esenciales de un operador
Verified Orgs
Cuando defines un operador en Blender, necesitas especificar ciertas propiedades que le
Profile indican a Blender cómo identificar y mostrar el operador. Estas propiedades son como los
"metadatos" del operador. Las más importantes son:
More
bl_idname :
[Link] 31/93
28/7/25, 6:21 p.m. Grok / X
bl_label :
Messages Define comportamientos especiales del operador, como si soporta deshacer ( UNDO )
o si se registra en el historial de acciones.
Grok
Es un conjunto de opciones, como {'REGISTER', 'UNDO'} .
[Link] 32/93
28/7/25, 6:21 p.m. Grok / X
Notifications
Messages
3. Creación de un operador para generar un cubo básico
Grok
Concepto: Construyendo nuestro primer operador
Lists
Vamos a crear un operador que genere un cubo con un tamaño fijo (por ejemplo, 2 unidades)
Bookmarks en la posición (0, 0, 0). Este operador será la base del add-on "Cubo Mágico" y lo
integraremos en un add-on completo.
Jobs
Código del operador
Communities
Aquí está el código para un operador que crea un cubo:
Premium
import bpy
Verified Orgs
class CUBO_OT_generate_cube([Link]):
bl_idname = "cubo.generate_cube"
Profile bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con tamaño fijo"
bl_options = {'REGISTER', 'UNDO'}
More
def execute(self, context):
[Link].primitive_cube_add(size=2, location=(0, 0, 0))
Post [Link]({'INFO'}, "¡Cubo creado!")
return {'FINISHED'}
python
[Link] 33/93
28/7/25, 6:21 p.m. Grok / X
Verified Orgs El método execute es donde pones el código que quieres que ocurra, como si fuera el
cuerpo de una función normal.
Profile [Link] es una forma de mostrar mensajes al usuario, similar a print , pero aparece
en la interfaz de Blender (por ejemplo, en la barra de estado).
More
Post
[Link] 34/93
28/7/25, 6:21 p.m. Grok / X
Home Qué modo está activo (Object Mode, Edit Mode, etc.).
Communities
[Link].primitive_cube_add(size=2, location=(0, 0, 0))
python
Premium
size : Define el tamaño del cubo (2 unidades).
Verified Orgs
location : Define la posición inicial (x=0, y=0, z=0).
Piensa en [Link] como una colección de funciones que Blender ya tiene listas para
usar. Cada operador es como una instrucción que le das a Blender.
Kaidan
El objeto context es como un diccionario gigante que contiene información sobre lo que
@KaidanCrown
está pasando en Blender. No lo usaremos mucho en esta lección, pero en lecciones
[Link] 35/93
28/7/25, 6:21 p.m. Grok / X
Home
Explore
5. Actividad práctica: Crear un operador que genere un cubo y ejecutarlo
Notifications desde la consola
Messages Objetivo
Crear un add-on con un operador que genere un cubo y probarlo ejecutándolo desde la
Grok
consola de Blender.
Lists
Instrucciones paso a paso
bl_info = {
Premium "name": "Cubo Mágico",
"author": "Tu Nombre",
class CUBO_OT_generate_cube([Link]):
Post
bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con tamaño fijo"
bl_options = {'REGISTER', 'UNDO'}
[Link] 36/93
28/7/25, 6:21 p.m. Grok / X
[Link].register_class(CUBO_OT_generate_cube)
print("Add-on registrado")
def unregister():
Home [Link].unregister_class(CUBO_OT_generate_cube)
print("Add-on desregistrado")
Notifications
Guarda el archivo como cubo_magico.py (haz clic en Save As y elige una ubicación
en tu computadora).
Messages
Explicación de las nuevas partes del código:
Grok
[Link].register_class(CUBO_OT_generate_cube) : Registra la clase del operador
Jobs Estas funciones son necesarias porque los operadores son clases que deben
registrarse explícitamente.
Communities
Instalar el add-on:
Kaidan [Link].generate_cube()
python
@KaidanCrown
[Link] 37/93
28/7/25, 6:21 p.m. Grok / X
Deberías ver:
Explore Prueba deshacer la acción con Ctrl+Z para confirmar que UNDO funciona.
Depuración:
Notifications
Si el operador no funciona, verifica:
Messages
Que el add-on está activado en Preferences > Add-ons .
Bookmarks Si ves un error como Operator not found , asegúrate de que el add-on está
registrado.
Jobs
Prueba adicional:
Communities
Modifica el operador para cambiar el tamaño del cubo a 5 unidades:
Premium
[Link].primitive_cube_add(size=5, location=(0, 0, 0))
python
Verified Orgs
Guarda el archivo, reinstala el add-on (desactiva y vuelve a activar en Preferences >
Profile
Add-ons ), y ejecuta el operador nuevamente desde la consola.
More
Resultado esperado
Post Un add-on instalado que incluye un operador funcional ( cubo.generate_cube ) que crea un
cubo cuando lo ejecutas desde la consola. Aunque aún no tiene una interfaz gráfica, has
dado el primer paso para construir el add-on "Cubo Mágico".
Kaidan
@KaidanCrown
6. Cierre y próximos pasos
[Link] 38/93
28/7/25, 6:21 p.m. Grok / X
Resumen
En esta lección:
Modifica el operador para que el cubo se genere en una posición diferente, como (2, 3,
Communities 1) .
Profile
Lee sobre [Link] en la Documentación de la API de Blender para
Usa la consola de Blender para probar comandos y ver cómo funcionan los operadores
predefinidos.
Kaidan
Si encuentras errores, revisa la consola o ventana Info para obtener pistas sobre qué
@KaidanCrown
salió mal.
[Link] 39/93
28/7/25, 6:21 p.m. Grok / X
Recursos Adicionales
Home
Documentación oficial: Blender Python API - Operators
Explore
Tutoriales: Busca "Blender Python operator tutorial" en YouTube para ejemplos visuales.
Messages
Grok
¡Felicidades por completar la Lección 2! Ahora tienes un add-on con un operador funcional, y
Lists estás listo para añadir más funcionalidades. Si quieres aclarar algún concepto, probar más
ejemplos o avanzar a la Lección 3, avísame y seguimos.
Bookmarks
Jobs
[Link] 40/93
28/7/25, 6:21 p.m. Grok / X
Estructura de la Lección
Home
Propiedades en Blender: [Link] (FloatProperty, FloatVectorProperty)
Explore
Almacenar propiedades en la escena ( [Link] )
Lists
Bookmarks
1. Propiedades en Blender: [Link] (FloatProperty,
Jobs
FloatVectorProperty)
Communities
Concepto: ¿Qué son las propiedades en Blender?
Premium En Blender, las propiedades son variables que puedes usar para almacenar datos
personalizables, como números, vectores, cadenas de texto o booleanos, que el usuario
Verified Orgs
puede modificar a través de la interfaz (por ejemplo, sliders, campos de texto o menús
Profile desplegables). Estas propiedades se definen usando el módulo [Link] , que proporciona
clases específicas para diferentes tipos de datos.
More En nuestro add-on "Cubo Mágico", usaremos propiedades para permitir al usuario definir:
El módulo [Link]
Kaidan FloatProperty : Para un número decimal (por ejemplo, el tamaño del cubo).
@KaidanCrown
[Link] 41/93
28/7/25, 6:21 p.m. Grok / X
Messages
[Link](
Grok name="Tamaño",
description="Tamaño del cubo",
default=2.0,
Lists min=0.1,
max=10.0
)
Bookmarks python
Profile Un FloatVectorProperty se usa para un vector de valores decimales, ideal para cosas como
posiciones, rotaciones o colores. Ejemplo:
More
[Link](
Post name="Rotación",
description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
subtype='EULER'
)
python
Kaidan default : Un vector inicial (en este caso, una tupla de tres ceros).
@KaidanCrown
[Link] 42/93
28/7/25, 6:21 p.m. Grok / X
subtype='EULER' : Indica que el vector representa una rotación en grados (Euler angles),
lo que ajusta la interfaz para mostrar controles de rotación.
Home
Para principiantes en Python
Explore Si estás acostumbrado a variables en Python, una propiedad de [Link] es como una
variable especial que Blender puede mostrar y modificar en la interfaz. Por ejemplo, un
Notifications FloatProperty es como una variable float , pero con reglas adicionales (como un valor
mínimo/máximo) y la capacidad de aparecer en un slider o campo de texto.
Messages
Ejemplo mental
Grok
Imagina que estás diseñando un formulario en una aplicación. Un FloatProperty es como un
Lists campo donde el usuario escribe un número (por ejemplo, "Tamaño: 2.0"), y un
FloatVectorProperty es como tres campos para X, Y, Z (por ejemplo, "Rotación: 0, 0, 0").
Bookmarks Blender usa estas propiedades para crear controles interactivos en la interfaz.
Jobs
Communities
2. Almacenar propiedades en la escena ( [Link] )
Premium
Concepto: ¿Dónde se guardan las propiedades?
Verified Orgs
Las propiedades personalizadas deben almacenarse en un lugar donde Blender pueda
Profile accederlas. Uno de los lugares más comunes es la escena ( [Link] ), que representa
el entorno actual de trabajo en Blender (como los objetos, cámaras y configuraciones de la
More escena).
[Link] 43/93
28/7/25, 6:21 p.m. Grok / X
[Link].cube_size = [Link](
name="Tamaño",
Home description="Tamaño del cubo",
default=2.0,
min=0.1,
Explore max=10.0
)
python
Notifications
Esto crea una propiedad llamada cube_size en la escena.
Messages Puedes acceder a ella desde cualquier operador o panel con [Link].cube_size .
Bookmarks
# Leer el valor
size = [Link].cube_size
Jobs # Modificar el valor
[Link].cube_size = 5.0
python
Communities
Para principiantes en Python
Premium
Piensa en [Link] como un diccionario gigante donde puedes guardar tus variables
Verified Orgs personalizadas. Al asignar [Link].cube_size , estás diciendo: "Guarda esta variable
en la escena para que todos los componentes del add-on puedan usarla". Es similar a definir
Profile una variable global, pero organizada dentro de la estructura de Blender.
Kaidan
@KaidanCrown
[Link] 44/93
28/7/25, 6:21 p.m. Grok / X
Grok
Cómo definir una función de actualización
Lists Define una función que acepte self (la escena) y context (el contexto de Blender).
Profile max=10.0,
update=update_cube_size
)
python
More
Una función de actualización es como un callback en Python: una función que se llama
automáticamente en respuesta a un evento (en este caso, cambiar una propiedad). Es similar
Kaidan
a usar un decorador o un manejador de eventos en otros lenguajes, pero en Blender se asocia
@KaidanCrown
directamente con la propiedad.
[Link] 45/93
28/7/25, 6:21 p.m. Grok / X
Ejemplo mental
Imagina que tienes un termostato en tu casa. Cada vez que cambias la temperatura (la
Home propiedad), el termostato ejecuta una acción (como encender el aire acondicionado). La
función update es como esa acción que responde al cambio.
Explore
Notifications
En la Lección 2, creamos un operador que generaba un cubo con un tamaño fijo ( size=2 ).
Lists
Ahora, modificaremos ese operador para usar las propiedades cube_size y cube_rotation
Bookmarks definidas en la escena, haciendo que el cubo se genere con los valores especificados por el
usuario.
Jobs
Código actualizado del operador
Communities
Aquí está el operador modificado:
Premium
class CUBO_OT_generate_cube([Link]):
Verified Orgs bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
Profile bl_options = {'REGISTER', 'UNDO'}
[Link] 46/93
28/7/25, 6:21 p.m. Grok / X
Messages
Grok
5. Actividad práctica: Añadir propiedades para tamaño y rotación, y
Lists
actualizar el operador
Bookmarks
Objetivo
Jobs Modificar el add-on de la Lección 2 para incluir propiedades personalizables ( cube_size y
cube_rotation ) y actualizar el operador para usarlas. Aunque aún no tenemos una interfaz
Communities
gráfica (eso vendrá en la Lección 4), probaremos las propiedades modificándolas desde la
consola.
Premium
bl_info = {
"name": "Cubo Mágico",
"author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0),
"location": "View3D > Tools",
Kaidan "description": "Un add-on para generar cubos personalizados",
@KaidanCrown "category": "Add Mesh",
}
[Link] 47/93
28/7/25, 6:21 p.m. Grok / X
import bpy
# Funciones de actualización
Notifications # Operador
class CUBO_OT_generate_cube([Link]):
bl_idname = "cubo.generate_cube"
Messages bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}
Grok
def execute(self, context):
size = [Link].cube_size
Lists rotation = [Link].cube_rotation
[Link].primitive_cube_add(size=size, location=(0, 0, 0), rotation=rotation)
Jobs # Registro
def register():
[Link].register_class(CUBO_OT_generate_cube)
Communities # Definir propiedades
[Link].cube_size = [Link](
name="Tamaño",
Premium description="Tamaño del cubo",
default=2.0,
min=0.1,
Verified Orgs max=10.0,
update=update_cube_size
)
Profile [Link].cube_rotation = [Link](
name="Rotación",
description="Rotación del cubo en grados (X, Y, Z)",
More default=(0.0, 0.0, 0.0),
subtype='EULER',
update=update_cube_rotation
Post )
print("Add-on registrado")
def unregister():
[Link].unregister_class(CUBO_OT_generate_cube)
# Eliminar propiedades
del [Link].cube_size
del [Link].cube_rotation
Kaidan print("Add-on desregistrado")
@KaidanCrown
python
[Link] 48/93
28/7/25, 6:21 p.m. Grok / X
py
if __name__ == "__main__":
register()
Propiedades:
Messages
cube_size : Un FloatProperty para el tamaño, con valor por defecto 2.0 y
Instalar el add-on:
Profile
Ve a Edit > Preferences > Add-ons .
More
Haz clic en Install y selecciona cubo_magico.py .
Kaidan Abre la consola de Blender ( Window > Toggle System Console en Windows, o usa la
@KaidanCrown ventana Info en Mac/Linux).
[Link] 49/93
28/7/25, 6:21 p.m. Grok / X
Grok
Deberías ver: Rotación actualizada: (45.0, 0.0, 0.0) .
Lists
Ejecuta el operador:
Bookmarks
[Link].generate_cube()
python
Jobs
Deberías ver:
Communities
Un cubo en la escena con tamaño 5.0 y rotación de 45 grados en el eje X.
Premium Un mensaje: ¡Cubo creado! Tamaño: 5.0, Rotación: (45.0, 0.0, 0.0) .
Prueba adicional:
Kaidan
@KaidanCrown
[Link] 50/93
28/7/25, 6:21 p.m. Grok / X
Home Ejecuta el operador nuevamente y verifica que el cubo refleja los nuevos valores.
Intenta deshacer la acción con Ctrl+Z para confirmar que UNDO funciona.
Explore
Resultado esperado
Notifications
Un add-on que permite personalizar el tamaño y la rotación del cubo a través de
Messages propiedades, aunque todavía las modificamos desde la consola. El operador ahora usa estos
valores para generar el cubo.
Grok
Lists
Jobs Resumen
[Link] 51/93
28/7/25, 6:21 p.m. Grok / X
Modifica el FloatProperty para cambiar los límites de cube_size (por ejemplo, min=0.5 ,
max=20.0 ) y prueba diferentes valores.
Home Añade una tercera propiedad (por ejemplo, un FloatVectorProperty para la posición del
cubo) y actualiza el operador para usarla.
Explore Lee sobre [Link] en la Documentación de la API de Blender para explorar otros tipos
de propiedades, como BoolProperty o StringProperty .
Notifications
Bookmarks Experimenta con pequeños cambios en el código (como modificar los valores por
defecto) para ganar confianza con la API.
Jobs
Communities
Post
Generame
¡Felicidades por completar la Lección una MasterClass
3! Ahora para la
tu add-on puede Leccion4.
manejar Explica
propiedades
personalizables, un paso clavedetalladamente
hacia un add-oncada uno de los
interactivo. temas yaclarar
Si quieres conceptos.
algún
concepto, probar más ejemplos o avanzar a la Lección 4, avísame y seguimos.
Kaidan ¡Bienvenido a la MasterClass de la Lección 4: Diseñando la Interfaz de Usuario! En esta
@KaidanCrown
lección, avanzarás en el desarrollo del add-on "Cubo Mágico" en Blender con Python,
[Link] 52/93
28/7/25, 6:21 p.m. Grok / X
enfocándote en crear una interfaz de usuario que permita al usuario interactuar con las
propiedades y el operador del add-on desde la interfaz gráfica de Blender. Dado que eres un
aprendiz de Python sin experiencia previa en Blender, pero con conocimientos básicos de
Home
Python y las lecciones anteriores, esta MasterClass explicará cada concepto de manera clara
Explore y detallada, con ejemplos prácticos adaptados a tu nivel. Al final, tendrás un add-on con un
panel en el N-Panel que muestra las propiedades de tamaño y rotación, junto con un botón
Notifications para generar el cubo.
Bookmarks
Verified Orgs Actividad práctica: Crear un panel en el N-Panel para mostrar las propiedades y el botón
del operador
Profile
Cierre y próximos pasos
More
Post
1. Creación de paneles ( [Link] )
[Link] 53/93
28/7/25, 6:21 p.m. Grok / X
en la vista 3D) o las pestañas de propiedades. En la API de Blender, los paneles se definen
usando la clase [Link] , que te permite personalizar su contenido y ubicación.
Notifications
¿Cómo encaja en un add-on?
Messages El panel es la interfaz visible del add-on, donde los usuarios interactúan con las
funcionalidades. Hasta ahora, hemos usado la consola para modificar propiedades y ejecutar
Grok
operadores, pero un panel hace que el add-on sea más accesible y profesional, ya que los
usuarios no necesitarán escribir código.
Lists
More
bl_label : Nombre visible del panel en la interfaz.
bl_space_type : Área de Blender donde aparece el panel (por ejemplo, VIEW_3D para la
vista 3D).
bl_region_type : Región específica dentro del área (por ejemplo, UI para el N-Panel).
[Link] 54/93
28/7/25, 6:21 p.m. Grok / X
draw(self, context) : Método que define el contenido del panel (botones, propiedades,
etiquetas).
Home
Para principiantes en Python
Explore Si estás familiarizado con clases en Python, [Link] es como una plantilla que
defines para crear un panel. El método draw es donde especificas qué controles (como
Notifications sliders o botones) aparecen en el panel, similar a cómo defines el cuerpo de una función.
Piensa en el panel como una ventana en una aplicación donde colocas elementos
Messages interactivos.
Grok
Lists
2. Configuración del panel: bl_space_type , bl_region_type , bl_category
Bookmarks
Para que el panel aparezca en la interfaz de Blender, debes especificar dónde y cómo se
Communities muestra. Esto se hace con las propiedades bl_space_type , bl_region_type y bl_category .
bl_space_type :
Premium
Define el área de Blender donde aparecerá el panel. Las áreas son las secciones
Verified Orgs
principales de la interfaz, como la vista 3D, el editor de propiedades o el editor de
nodos.
Profile
Para nuestro add-on, usaremos 'VIEW_3D' , que corresponde al área de la vista 3D
More (donde modelas objetos).
bl_region_type :
Define la región dentro del área donde aparece el panel. En la vista 3D, las regiones
comunes son:
Kaidan
@KaidanCrown 'UI' : El N-Panel (la barra lateral que abres con la tecla N ).
[Link] 55/93
28/7/25, 6:21 p.m. Grok / X
Home Usaremos 'UI' para colocar el panel en el N-Panel, que es un lugar común para los
add-ons.
Explore
bl_category :
Grok Si la pestaña ya existe, el panel se agrupará con otros paneles en esa pestaña.
bl_context (opcional):
Lists
Especifica el modo en el que el panel está visible (por ejemplo, objectmode para el
Bookmarks modo Objeto, editmode para el modo Edición).
Jobs Usaremos bl_context = "objectmode" para que el panel solo aparezca en el modo
Objeto.
Communities
Ejemplo mental
Premium Imagina que estás decorando una casa. El bl_space_type es la habitación (por ejemplo, la
sala de estar, que es la vista 3D). El bl_region_type es el lugar específico en la habitación
Verified Orgs
(como una pared, que es el N-Panel). El bl_category es la etiqueta en la puerta de la
Profile habitación (como "Cubo Mágico"). El método draw es donde colocas los muebles (controles
como sliders y botones).
More
Para principiantes en Python
Post Estas propiedades son como configuraciones que le dices a Blender dónde y cómo mostrar
tu panel. No necesitas entender toda la arquitectura de Blender, solo saber que 'VIEW_3D' y
'UI' colocan el panel en el N-Panel, y bl_category le da un nombre a la pestaña.
Kaidan
@KaidanCrown
[Link] 56/93
28/7/25, 6:21 p.m. Grok / X
El método draw recibe el parámetro context (el contexto de Blender) y usa [Link] para
Jobs
construir la interfaz. El objeto layout es como un lienzo donde colocas los controles en
orden.
Communities
Ejemplo básico:
Premium
More
[Link] : Añade un texto estático (como un título).
Post [Link] : Muestra una propiedad (como un slider o campo de texto).
Mostrando propiedades
Kaidan
@KaidanCrown Para mostrar una propiedad como cube_size , usas:
[Link] 57/93
28/7/25, 6:21 p.m. Grok / X
[Link]([Link], "cube_size")
python
Home
[Link] accede a la escena actual.
Messages
Añadiendo operadores
Lists
[Link]("cubo.generate_cube")
python
Bookmarks
"cubo.generate_cube" es el bl_idname del operador.
Jobs
El botón mostrará el texto definido en bl_label del operador (por ejemplo, "Generar
Communities Cubo Mágico").
Piensa en el método draw como una función que "dibuja" la interfaz línea por línea. Cada
Verified Orgs
llamada a [Link] o [Link] agrega un elemento al panel, como si estuvieras
More
Post
4. Actividad práctica: Crear un panel en el N-Panel para mostrar las
propiedades y el botón del operador
Objetivo
Kaidan Añadir un panel al add-on "Cubo Mágico" que aparezca en el N-Panel, muestre las
@KaidanCrown propiedades cube_size y cube_rotation , y un botón para ejecutar el operador
[Link] 58/93
28/7/25, 6:21 p.m. Grok / X
Notifications Haz clic en New y pega el siguiente código (una versión actualizada del add-on de la
Lección 3):
Messages
bl_info = {
Grok "name": "Cubo Mágico",
"author": "Tu Nombre",
"version": (1, 0),
Lists "blender": (3, 0, 0),
"location": "View3D > N-Panel > Cubo Mágico",
"description": "Un add-on para generar cubos personalizados",
Bookmarks "category": "Add Mesh",
}
Jobs
import bpy
# Panel
class CUBO_PT_panel([Link]):
Kaidan bl_label = "Cubo Mágico"
[Link] 59/93
28/7/25, 6:21 p.m. Grok / X
bl_region_type = 'UI'
bl_category = "Cubo Mágico"
bl_context = "objectmode"
Bookmarks name="Tamaño",
description="Tamaño del cubo",
default=2.0,
Jobs min=0.1,
max=10.0,
update=update_cube_size
Communities )
[Link].cube_rotation = [Link](
name="Rotación",
Premium description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
subtype='EULER',
Verified Orgs update=update_cube_rotation
)
print("Add-on registrado")
Profile
def unregister():
for cls in reversed(classes):
More [Link].unregister_class(cls)
del [Link].cube_size
del [Link].cube_rotation
Post print("Add-on desregistrado")
if __name__ == "__main__":
python
register()
[Link] 60/93
28/7/25, 6:21 p.m. Grok / X
Notifications Panel.
Registro:
Communities
La lista classes incluye tanto el operador como el panel.
Premium register() y unregister() manejan ambas clases usando un bucle.
Instalar el add-on:
Verified Orgs
Ve a Edit > Preferences > Add-ons .
Profile
Haz clic en Install y selecciona cubo_magico.py .
Probar el panel:
[Link] 61/93
28/7/25, 6:21 p.m. Grok / X
Deberías ver:
Verifica que:
Grok
Un cubo aparece en la escena con tamaño 5.0 y rotación de 45 grados en el eje
Lists X.
Bookmarks Un mensaje aparece en la consola o ventana Info: ¡Cubo creado! Tamaño: 5.0,
Rotación: (45.0, 0.0, 0.0) .
Jobs
Prueba deshacer la acción con Ctrl+Z para confirmar que UNDO funciona.
Communities Depuración:
Si el panel no aparece:
Premium
Asegúrate de estar en modo Objeto ( bl_context = "objectmode" ).
Verified Orgs
Verifica que el N-Panel está abierto (presiona N ).
Kaidan
@KaidanCrown
python
[Link] 62/93
28/7/25, 6:21 p.m. Grok / X
Un add-on con un panel en el N-Panel que muestra un slider para el tamaño, campos para la
Notifications rotación y un botón para generar un cubo con las propiedades especificadas. Ahora el add-
on es completamente interactivo desde la interfaz gráfica.
Messages
Grok
Lists
5. Cierre y próximos pasos
Bookmarks
Resumen
Jobs En esta lección:
Modifica el panel para añadir una etiqueta o separador entre las propiedades y el botón:
Kaidan
@KaidanCrown [Link](text="Propiedades del Cubo")
python
[Link] 63/93
28/7/25, 6:21 p.m. Grok / X
[Link]()
Cambia el bl_category a otro nombre (por ejemplo, "Mi Herramienta" ) y verifica que el
Home panel aparece en una pestaña diferente.
Notifications
Consejos para principiantes
Messages El N-Panel es tu amigo: es el lugar estándar para los add-ons, así que acostúmbrate a
usarlo con la tecla N .
Grok
Si el panel no aparece donde esperas, revisa bl_space_type , bl_region_type y
Lists bl_context .
Experimenta con pequeños cambios en el método draw para personalizar el diseño del
Bookmarks panel.
Jobs
Communities
Recursos Adicionales
Premium
Documentación oficial: Blender Python API - Panels
Verified Orgs
Tutoriales: Busca "Blender Python panel tutorial" en YouTube para ejemplos visuales.
More
Post
¡Felicidades por completar la Lección 4! Ahora tu add-on tiene una interfaz gráfica funcional,
Generame una MasterClass para la Leccion5. Explica
haciendo que sea mucho más fácil de usar. Si quieres aclarar algún concepto, probar más
detalladamente cada uno de los temas y conceptos.
ejemplos o avanzar a la Lección 5, avísame y seguimos.
Kaidan esta lección, continuarás desarrollando el add-on "Cubo Mágico" en Blender con Python,
@KaidanCrown enfocándote en añadir un operador de reseteo para restaurar las propiedades a sus valores
[Link] 64/93
28/7/25, 6:21 p.m. Grok / X
Explore adaptados a tu nivel. Al final, tendrás un add-on más robusto con un operador adicional y
cubos que se generan en posiciones aleatorias dentro de un rango (-5, 5).
Notifications Duración estimada: 1-1.5 horas
Nivel: Principiante (con conocimientos básicos de Python y las Lecciones 1, 2, 3 y 4)
Messages
Objetivo: Implementar un operador para resetear propiedades y modificar el operador
existente para generar cubos en posiciones aleatorias, avanzando hacia la funcionalidad
Grok
completa del ejercicio propuesto.
Lists
Bookmarks
More
Post
1. Creación de un operador para resetear propiedades
[Link] 65/93
28/7/25, 6:21 p.m. Grok / X
proporciona una forma rápida de volver a la configuración inicial sin tener que ajustar
manualmente cada propiedad.
Notifications Aparecerá como un botón en el panel, junto al botón "Generar Cubo Mágico".
Bookmarks
class CUBO_OT_reset([Link]):
Profile
bl_idname = "[Link]" : Identificador único para el operador.
execute(self, context) :
[Link] 66/93
28/7/25, 6:21 p.m. Grok / X
Integración en el panel
Home
Para que el operador de reseteo aparezca como un botón en el panel, añadiremos una línea al
Explore método draw del panel creado en la Lección 4:
Notifications
[Link]("[Link]")
python
Messages
Esto creará un botón etiquetado "Resetear Propiedades" en el panel.
Grok
Para principiantes en Python
Lists
El operador de reseteo es como una función que "limpia" las variables de la escena, similar a
Imagina que estás configurando un videojuego con ajustes personalizados (como volumen o
Premium
dificultad). El botón de reseteo es como la opción "Restaurar valores predeterminados" que
Profile
More
2. Uso de la librería random para generar posiciones aleatorias
Post
Concepto: Generación de posiciones aleatorias
Como parte del ejercicio propuesto, queremos que el cubo se genere en una posición
aleatoria dentro de un rango (-5, 5) para los ejes X, Y y Z. Para esto, usaremos el módulo
random de Python, que proporciona funciones para generar valores aleatorios.
Kaidan
@KaidanCrown Uso del módulo random
[Link] 67/93
28/7/25, 6:21 p.m. Grok / X
Messages
Ejemplo de código:
Grok
import random
Lists
x = [Link](-5, 5)
y = [Link](-5, 5)
Bookmarks z = [Link](-5, 5)
location = (x, y, z)
[Link].primitive_cube_add(location=location)
Jobs python
Verified Orgs
import random
@KaidanCrown
python
[Link] 68/93
28/7/25, 6:21 p.m. Grok / X
python
[Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}, Posición: {location}"
return {'FINISHED'}
Home
Para principiantes en Python
Explore El módulo random es como tirar un dado para obtener un número dentro de un rango. La
función [Link](-5, 5) es similar a elegir un número al azar entre -5 y 5, y lo usamos
Notifications
para cada coordenada (X, Y, Z). La tupla location es solo una forma de agrupar estos tres
números para pasárselos a Blender.
Messages
Ejemplo mental
Grok
Imagina que estás colocando objetos en un escenario al azar, como esparcir confeti en una
Lists habitación. Cada cubo que generes aparecerá en un lugar diferente dentro del rango que
definimos, haciendo que el add-on sea más dinámico.
Bookmarks
Jobs
Communities
3. Registro y desregistro de múltiples clases y propiedades
Premium
Concepto: Gestionando múltiples clases
Verified Orgs En las lecciones anteriores, registramos una sola clase ( CUBO_OT_generate_cube ) y luego
añadimos un panel ( CUBO_PT_panel ). Ahora, con el nuevo operador de reseteo
Profile ( CUBO_OT_reset ), tenemos varias clases que deben registrarse y desregistrarse
correctamente para que el add-on funcione sin problemas.
More
Uso de una lista de clases
Post
Para manejar múltiples clases, definimos una lista classes que incluye todas las clases del
add-on, y usamos un bucle en las funciones register() y unregister() :
classes = (
CUBO_OT_generate_cube,
Kaidan
CUBO_OT_reset,
@KaidanCrown CUBO_PT_panel,
)
[Link] 69/93
28/7/25, 6:21 p.m. Grok / X
def register():
for cls in classes:
[Link].register_class(cls)
Home
def unregister():
for cls in reversed(classes):
Explore python [Link].unregister_class(cls)
Profile [Link].register_class(cls)
[Link].cube_size = [Link](...)
[Link].cube_rotation = [Link](...)
More print("Add-on registrado")
def unregister():
for cls in reversed(classes):
Post
[Link].unregister_class(cls)
del [Link].cube_size
del [Link].cube_rotation
print("Add-on desregistrado")
python
[Link] 70/93
28/7/25, 6:21 p.m. Grok / X
Piensa en la lista classes como una lista de tareas que Blender debe realizar para activar el
add-on. El bucle en register() es como marcar cada tarea como "hecha", y el bucle en
unregister() es como deshacerlas en orden inverso. Las propiedades son como variables
Home
temporales que creas y eliminas para mantener todo limpio.
Explore
Por qué es importante
Notifications Registrar y desregistrar correctamente evita errores, como clases o propiedades que se
quedan "atascadas" en Blender después de desactivar el add-on, lo que podría causar
Messages conflictos con otros add-ons.
Grok
Lists
4. Actividad práctica: Implementar el operador de reseteo y la
Bookmarks
generación de cubos en posiciones aleatorias
Jobs
Objetivo
Communities
Añadir un operador de reseteo al add-on "Cubo Mágico" y modificar el operador de
generación para que los cubos aparezcan en posiciones aleatorias. Actualizar el panel para
Premium
incluir el botón de reseteo.
Verified Orgs
Instrucciones paso a paso
Profile Crear el archivo del add-on:
Haz clic en New y pega el siguiente código (una versión actualizada del add-on de la
Post Lección 4):
bl_info = {
"name": "Cubo Mágico",
"author": "Tu Nombre",
"version": (1, 0),
[Link] 71/93
28/7/25, 6:21 p.m. Grok / X
"category": "Add Mesh",
}
import bpy
# Funciones de actualización
Explore def update_cube_size(self, context):
print(f"Tamaño actualizado: {self.cube_size}")
# Panel
class CUBO_PT_panel([Link]):
bl_label = "Cubo Mágico"
bl_idname = "CUBO_PT_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
Kaidan bl_category = "Cubo Mágico"
@KaidanCrown bl_context = "objectmode"
[Link] 72/93
28/7/25, 6:21 p.m. Grok / X
def draw(self, context):
layout = [Link]
scene = [Link]
[Link](scene, "cube_size")
def register():
Grok for cls in classes:
[Link].register_class(cls)
[Link].cube_size = [Link](
Lists name="Tamaño",
description="Tamaño del cubo",
Bookmarks default=2.0,
min=0.1,
max=10.0,
Jobs update=update_cube_size
)
[Link].cube_rotation = [Link](
Communities name="Rotación",
description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
Premium subtype='EULER',
update=update_cube_rotation
)
Verified Orgs print("Add-on registrado")
def unregister():
Profile for cls in reversed(classes):
[Link].unregister_class(cls)
del [Link].cube_size
More del [Link].cube_rotation
print("Add-on desregistrado")
[Link] 73/93
28/7/25, 6:21 p.m. Grok / X
Operador CUBO_OT_reset :
Lists Registro:
Verified Orgs Verifica que el mensaje "Add-on registrado" aparece en la consola (Windows) o
ventana Info (Mac/Linux).
Profile
Probar el panel:
More
En la vista 3D, asegúrate de estar en modo Objeto (selecciona "Object Mode" en el
menú desplegable superior).
Post
Presiona N para abrir el N-Panel.
Deberías ver:
[Link] 74/93
28/7/25, 6:21 p.m. Grok / X
Messages Z.
Prueba deshacer las acciones con Ctrl+Z para confirmar que UNDO funciona.
Premium
Depuración:
Verified Orgs
Si el panel o los botones no aparecen:
Post Si las posiciones no son aleatorias, confirma que import random está incluido y que
[Link] se usa correctamente.
[Link] 75/93
28/7/25, 6:21 p.m. Grok / X
Modifica el rango de posiciones aleatorias a (-10, 10) y verifica que los cubos se
generan en un área más grande.
Explore [Link](text="Opciones")
[Link]("[Link]")
python
Notifications
Reinstala el add-on y verifica que aparece el texto "Opciones".
Messages
Resultado esperado
Grok
Un add-on con un panel en el N-Panel que incluye:
Lists
Propiedades para tamaño y rotación.
Communities
Premium
5. Cierre y próximos pasos
Verified Orgs
Resumen
Una propiedad para elegir el color del cubo (usando FloatVectorProperty con
subtype='COLOR' ).
El módulo random es una herramienta poderosa para añadir variabilidad a tus add-ons.
Jobs
Practica usándolo en scripts simples fuera de Blender.
Communities Asegúrate de registrar todas las clases en la lista classes para evitar errores.
Verified Orgs
Profile
Documentación oficial:
Post
Blender Python API - Operators
Python random module
Tutoriales: Busca "Blender Python random position" en YouTube para ejemplos visuales.
[Link] 77/93
28/7/25, 6:21 p.m. Grok / X
Explore Esta es la última lección del plan de clases para desarrollar el add-on "Cubo Mágico" en
Blender con Python. En esta lección, completarás el add-on implementando las
Notifications funcionalidades finales del ejercicio propuesto: añadir una propiedad para elegir el color del
cubo y crear un operador para eliminar todos los cubos generados. También aprenderás a
Messages empaquetar el add-on en un archivo .zip para su distribución. Dado que eres un aprendiz
de Python sin experiencia previa en Blender, pero con conocimientos básicos de Python y las
Grok
lecciones anteriores, esta MasterClass explicará cada concepto de manera clara y detallada,
con ejemplos prácticos adaptados a tu nivel.
Lists
Duración estimada: 1-1.5 horas
Bookmarks Nivel: Principiante (con conocimientos básicos de Python y las Lecciones 1, 2, 3, 4 y 5)
Objetivo: Completar el add-on "Cubo Mágico" con una propiedad para el color del cubo, un
Jobs
operador para eliminar cubos y empaquetar el add-on para distribución.
Communities
Premium
Kaidan
@KaidanCrown
[Link] 78/93
28/7/25, 6:21 p.m. Grok / X
Messages
Crear un material
Profile
Asignar el material a un objeto
More
Para asignar el material al cubo recién creado:
Post
obj = [Link] # Obtener el objeto activo (el cubo recién creado)
[Link](material) # Añadir el material al objeto
python
Explicación
Kaidan [Link](name) : Crea un nuevo material con un nombre único.
@KaidanCrown
[Link] 79/93
28/7/25, 6:21 p.m. Grok / X
Home [Link]["Base Color"] : Establece el color base en formato RGBA (rojo, verde,
azul, alfa). El valor es una tupla de 4 floats entre 0.0 y 1.0.
Explore [Link] : Asigna el material al objeto.
Notifications
Para principiantes en Python
Messages Piensa en un material como una pintura que aplicas a un objeto. Crear un material es como
mezclar un color en una paleta, y asignarlo es como pintar el objeto con ese color. El nodo
Grok Principled BSDF es como el "tipo de pintura" predeterminado en Blender, y nosotros solo
ajustamos su color base.
Lists
Ejemplo mental
Bookmarks
Imagina que estás pintando un cubo de madera. El material es la pintura (por ejemplo, roja), y
Jobs asignarlo al cubo es como aplicar esa pintura al objeto. En Blender, esto se hace con código
en lugar de un pincel.
Communities
Premium
More Para permitir al usuario elegir el color del cubo, usaremos un FloatVectorProperty con
subtype='COLOR' . Esto crea un control gráfico en la interfaz (un selector de color) que permite
Ejemplo:
Kaidan
[Link].cube_color = [Link](
@KaidanCrown name="Color",
description="Color del cubo",
[Link] 80/93
28/7/25, 6:21 p.m. Grok / X
default=(1.0, 1.0, 1.0), # Blanco por defecto
min=0.0,
max=1.0,
subtype='COLOR'
Home )
python
Profile
Ejemplo mental
More Imagina que estás configurando una lámpara con un control para elegir el color de la luz. La
propiedad de color es como ese control, donde el usuario puede mover un cursor en una
Post paleta para elegir un color.
Para completar el ejercicio propuesto, necesitamos un operador que elimine todos los cubos
generados por el add-on. En Blender, los objetos se almacenan en [Link] , y
podemos filtrarlos por su tipo (por ejemplo, 'MESH' ) o nombre para identificar los cubos.
Home
Lógica del operador de eliminación
Explore
Seleccionar todos los objetos de tipo 'MESH' (los cubos son mallas).
Notifications
Eliminar los objetos seleccionados usando [Link] .
Grok
class CUBO_OT_delete_cubes([Link]):
Lists bl_idname = "cubo.delete_cubes"
bl_label = "Eliminar Cubos"
bl_description = "Elimina todos los cubos en la escena"
Bookmarks bl_options = {'REGISTER', 'UNDO'}
Profile
[Link].select_all(action='DESELECT') : Deselecciona todos los objetos para
More empezar desde cero.
[Link] == 'MESH' and "Cube" in [Link] : Filtra objetos que son mallas y tienen
Post "Cube" en su nombre (los cubos creados por primitive_cube_add se nombran "Cube",
"Cube.001", etc.).
Kaidan
@KaidanCrown Para principiantes en Python
[Link] 82/93
28/7/25, 6:21 p.m. Grok / X
El operador de eliminación es como un "botón de limpieza" que recorre una lista de objetos en
la escena, selecciona los que son cubos y los elimina. Es similar a recorrer una lista en Python
con un bucle for y aplicar una acción a los elementos que cumplen una condición.
Home
Ejemplo mental
Explore
Imagina que tienes una caja llena de bloques de madera, pero solo quieres eliminar los cubos.
Notifications El operador recorre la caja, identifica los cubos y los retira, dejando el resto intacto.
Messages
Grok
4. Empaquetar el add-on en un archivo .zip
Lists
Concepto: Distribuir el add-on
Bookmarks
Para compartir el add-on con otros usuarios, puedes empaquetarlo en un archivo .zip .
Jobs Blender permite instalar add-ons desde archivos .zip , lo que facilita su distribución. El .zip
puede contener un solo archivo .py o una carpeta con múltiples archivos, pero en nuestro
Communities caso, usaremos un solo archivo.
Verified Orgs Crea una carpeta con el nombre del add-on (por ejemplo, cubo_magico ).
More En Blender, instala el add-on desde el .zip usando Edit > Preferences > Add-ons >
Install .
Post
Por qué empaquetar
Empaquetar en un .zip es una práctica estándar para distribuir add-ons, ya que permite
incluir múltiples archivos (como módulos adicionales o recursos) y facilita la instalación para
otros usuarios.
Kaidan
@KaidanCrown Para principiantes en Python
[Link] 83/93
28/7/25, 6:21 p.m. Grok / X
Explore
Notifications
5. Actividad práctica: Implementar la propiedad de color, el operador de
Messages eliminación y empaquetar el add-on
Grok Objetivo
Profile
bl_info = {
import bpy
import random
[Link] 84/93
28/7/25, 6:21 p.m. Grok / X
[Link] 85/93
28/7/25, 6:21 p.m. Grok / X
bl_options = {'REGISTER', 'UNDO'}
Premium # Registro
classes = (
CUBO_OT_generate_cube,
Verified Orgs CUBO_OT_reset,
CUBO_OT_delete_cubes,
CUBO_PT_panel,
Profile )
def register():
More for cls in classes:
[Link].register_class(cls)
[Link].cube_size = [Link](
Post name="Tamaño",
description="Tamaño del cubo",
default=2.0,
min=0.1,
max=10.0,
update=update_cube_size
)
[Link].cube_rotation = [Link](
Kaidan name="Rotación",
@KaidanCrown description="Rotación del cubo en grados (X, Y, Z)",
default=(0.0, 0.0, 0.0),
[Link] 86/93
28/7/25, 6:21 p.m. Grok / X
subtype='EULER',
update=update_cube_rotation
)
[Link].cube_color = [Link](
Home name="Color",
description="Color del cubo",
default=(1.0, 1.0, 1.0),
Explore min=0.0,
max=1.0,
subtype='COLOR',
Notifications update=update_cube_color
)
print("Add-on registrado")
Messages
def unregister():
for cls in reversed(classes):
Grok [Link].unregister_class(cls)
del [Link].cube_size
del [Link].cube_rotation
Lists del [Link].cube_color
print("Add-on desregistrado")
Operador CUBO_OT_reset :
[Link] 87/93
28/7/25, 6:21 p.m. Grok / X
Panel:
Registro:
Notifications
La lista classes incluye CUBO_OT_delete_cubes .
Messages Se registra y desregistra la nueva propiedad cube_color .
Premium En la vista 3D, asegúrate de estar en modo Objeto (selecciona "Object Mode").
Cambia el tamaño a 3.0, la rotación a (45.0, 0.0, 0.0) y el color a rojo (por ejemplo,
Kaidan (1.0, 0.0, 0.0)).
@KaidanCrown
Haz clic en "Generar Cubo Mágico" varias veces.
[Link] 88/93
28/7/25, 6:21 p.m. Grok / X
Verifica que:
Explore Un mensaje aparece en la consola o ventana Info, como: ¡Cubo creado! Tamaño:
3.0, Rotación: (45.0, 0.0, 0.0), Posición: (x, y, z), Color: (1.0, 0.0,
0.0) .
Notifications
Haz clic en "Resetear Propiedades" y verifica que:
Messages
El tamaño vuelve a 2.0, la rotación a (0.0, 0.0, 0.0) y el color a blanco.
Grok Un mensaje aparece: "Propiedades reseteadas".
Si el panel no aparece:
[Link] 89/93
28/7/25, 6:21 p.m. Grok / X
Jobs
count = sum(1 for obj in [Link] if [Link] == 'MESH' and "Cube" in [Link])
[Link]({'INFO'}, f"{count} cubos eliminados")
Communities python
Un panel en el N-Panel con controles para tamaño, rotación, color y tres botones
Profile (generar, resetear, eliminar).
More Cubos generados en posiciones aleatorias con el tamaño, rotación y color especificados.
[Link] 90/93
28/7/25, 6:21 p.m. Grok / X
Resumen
En esta lección:
Messages Completaste el add-on "Cubo Mágico" con todas las funcionalidades del ejercicio
propuesto.
Grok
Próximos pasos
Lists
Has completado el plan de 6 lecciones para desarrollar el add-on "Cubo Mágico". Ahora
puedes:
Bookmarks
Explorar mejoras adicionales, como:
Jobs
Añadir una propiedad para elegir otros tipos de mallas (esferas, cilindros).
Profile Aprender más sobre la API de Blender para crear add-ons más complejos.
Añade una propiedad para controlar el rango de posiciones aleatorias (por ejemplo, un
FloatProperty para el rango máximo).
Comparte el archivo .zip con un amigo y pídeles que lo instalen en Blender para
probarlo.
Kaidan
@KaidanCrown
[Link] 91/93
28/7/25, 6:21 p.m. Grok / X
Home
Consejos para principiantes
Explore Los materiales pueden parecer complicados, pero en esta lección usamos una
configuración simple (color base). Con Grok 3
el tiempo, puedes explorar nodos más avanzados.
Notifications
Depura usando la consola de Blender para verificar que las propiedades y operadores
funcionan como esperas.
Messages
¡Celebra tu logro! Has creado un add-on completo desde cero, lo cual es un gran paso en
Grok tu aprendizaje de Python y Blender.
Lists
Bookmarks
Recursos Adicionales
Jobs
Documentación oficial:
Communities Blender Python API - Materials
Blender Python API - Properties
Premium
Tutoriales: Busca "Blender Python material tutorial" en YouTube para ejemplos visuales.
Verified Orgs Comunidad: Blender Stack Exchange o el canal de Blender en Discord para resolver
dudas.
Profile
More
Post ¡Felicidades por completar la Lección 6 y todo el plan de clases! Ahora tienes un add-on
funcional y listo para compartir, que cumple con todos los requisitos del ejercicio propuesto.
Si quieres explorar mejoras adicionales, revisar algún concepto o trabajar en otro proyecto de
Blender con Python, avísame y seguimos.
explicar nodos avanzados crear texturas Blender
Kaidan
@KaidanCrown
[Link] 92/93
28/7/25, 6:21 p.m. Grok / X
Ask anything
DeepSearch Think
Home
Explore
Notifications
Messages
Grok
Lists
Bookmarks
Jobs
Communities
Premium
Verified Orgs
Profile
More
Post
Kaidan
@KaidanCrown
[Link] 93/93