0% encontró este documento útil (0 votos)
7 vistas93 páginas

Crear Add-on en Blender con Python

Este documento es una guía práctica para crear un add-on en Blender utilizando Python, llamado 'Cubo Mágico', que permite generar un cubo con propiedades personalizables. Se detalla el proceso paso a paso, desde la estructura básica del script hasta la creación de operadores y paneles en la interfaz de Blender. Incluye ejemplos de código y explicaciones sobre cómo registrar las clases y propiedades necesarias para el funcionamiento del add-on.

Cargado por

reygarcia
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas93 páginas

Crear Add-on en Blender con Python

Este documento es una guía práctica para crear un add-on en Blender utilizando Python, llamado 'Cubo Mágico', que permite generar un cubo con propiedades personalizables. Se detalla el proceso paso a paso, desde la estructura básica del script hasta la creación de operadores y paneles en la interfaz de Blender. Incluye ejemplos de código y explicaciones sobre cómo registrar las clases y propiedades necesarias para el funcionamiento del add-on.

Cargado por

reygarcia
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

28/7/25, 6:21 p.m.

Grok / X

Home hazme una máster clases de como hacer un add-ons en


blender con Python ponle enfoque práctico
Explore
¡Vamos a crear una máster class práctica para desarrollar un add-on en Blender con
Notifications
Python! El objetivo es que aprendas a crear un add-on funcional desde cero, con un enfoque

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:

Crear un cubo con un tamaño y rotación definidos.


Verified Orgs
Incluir un botón para generar el cubo y otro para resetear los parámetros.
Profile
Prerrequisitos
More Blender: Descarga e instala Blender (versión 3.0 o superior recomendada, pero
funcionará en versiones recientes como 4.2).
Post
Conocimientos básicos:

Python (sintaxis básica, funciones, clases).

Familiaridad con la interfaz de Blender.

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

Activar el modo desarrollador en Blender:

Ve a Edit > Preferences > Interface > Developer Extras y activa la opción.
Home

Explore

Notifications Estructura del Add-on

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.

Lists Funciones de registro/desregistro: Para activar/desactivar el add-on.

Bookmarks Vamos a construir el add-on paso a paso.

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

Verified Orgs estructura mínima:

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

# Código del add-on irá aquí

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.

El bloque if __name__ == "__main__": asegura que el add-on se registre al ejecutarse.


Grok
Prueba inicial:
Lists
Abre Blender.
Bookmarks Ve a Edit > Preferences > Add-ons > Install y selecciona cubo_magico.py .

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'}

def execute(self, context):


# Crear un cubo con propiedades predeterminadas
[Link].primitive_cube_add(size=2, location=(0, 0, 0))
Kaidan [Link]({'INFO'}, "¡Cubo creado!")
@KaidanCrown python
return {'FINISHED'}

[Link] 3/93
28/7/25, 6:21 p.m. Grok / X

Explicación:

[Link] : Clase base para operadores en Blender.

Home bl_idname : Identificador único (usa el formato [Link] ).

bl_label : Nombre que aparece en la interfaz.


Explore
bl_options : Habilita el soporte para deshacer ( UNDO ).
Notifications
execute(self, context) : Método que contiene la lógica del operador. Aquí usamos
[Link].primitive_cube_add para crear un cubo.
Messages

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

Premium def update_cube_size(self, context):


print(f"Tamaño actualizado: {self.cube_size}")

Verified Orgs def update_cube_rotation(self, context):


print(f"Rotación actualizada: {self.cube_rotation}")

Profile [Link].cube_size = [Link](


name="Tamaño",
description="Tamaño del cubo",
More default=2.0,
min=0.1,
max=10.0,
Post update=update_cube_size
)

[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:

[Link] : Añadimos propiedades a la escena para que sean accesibles

Home globalmente.

FloatProperty : Para el tamaño (un solo valor flotante).


Explore
FloatVectorProperty : Para la rotación (tres valores para X, Y, Z).

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

Bookmarks Actualiza el operador para usar las propiedades definidas:

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}")

python return {'FINISHED'}

Post
Explicación:

Accedemos a [Link].cube_size y [Link].cube_rotation para obtener los


valores.

Pasamos estos valores a [Link].primitive_cube_add .


Kaidan
@KaidanCrown

[Link] 5/93
28/7/25, 6:21 p.m. Grok / X

Paso 5: Crear un Panel en la Interfaz

Ahora crearemos un panel en el N-Panel (pestaña lateral en la vista 3D) para mostrar las
Home propiedades y el botón.

Añade este código después del operador:


Explore

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"

Lists def draw(self, context):


layout = [Link]
scene = [Link]
Bookmarks
# Añadir controles al panel
[Link](scene, "cube_size")
Jobs [Link](scene, "cube_rotation")
[Link]("cubo.generate_cube")
python
Communities
Explicación:
Premium
[Link] : Clase base para paneles en Blender.

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.

More draw(self, context) : Define el contenido del panel (propiedades y botón).

Post

Paso 6: Añadir un Operador de Reseteo

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

Y actualiza el panel para incluir este botón:


Grok

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"

Communities def draw(self, context):


layout = [Link]
scene = [Link]
Premium
[Link](scene, "cube_size")
[Link](scene, "cube_rotation")
Verified Orgs [Link]("cubo.generate_cube")
[Link]("[Link]")
python
Profile

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

Verified Orgs Explicación:

[Link].register_class : Registra cada clase en Blender.


Profile
unregister : Desregistra las clases y elimina las propiedades para evitar conflictos.
More

Post

Paso 8: Código Completo

Aquí está el código completo del add-on:

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",

Home "description": "Añade un cubo con tamaño y rotación personalizables",


"category": "Add Mesh",
}
Explore
import bpy

Notifications # Funciones de actualización


def update_cube_size(self, context):
print(f"Tamaño actualizado: {self.cube_size}")
Messages
def update_cube_rotation(self, context):
print(f"Rotación actualizada: {self.cube_rotation}")
Grok
# Operador para generar cubo
class CUBO_OT_generate_cube([Link]):
Lists bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"

Bookmarks bl_description = "Crea un cubo con las propiedades especificadas"


bl_options = {'REGISTER', 'UNDO'}

Jobs def execute(self, context):


size = [Link].cube_size
rotation = [Link].cube_rotation
Communities [Link].primitive_cube_add(size=size, location=(0, 0, 0), rotation=rotation)
[Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}")
return {'FINISHED'}
Premium
# Operador para resetear
class CUBO_OT_reset([Link]):
Verified Orgs bl_idname = "[Link]"
bl_label = "Resetear Propiedades"
bl_description = "Restaura los valores por defecto"
Profile bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


More [Link].cube_size = 2.0
[Link].cube_rotation = (0.0, 0.0, 0.0)
[Link]({'INFO'}, "Propiedades reseteadas")
Post return {'FINISHED'}

# 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")

Home [Link](scene, "cube_rotation")


[Link]("cubo.generate_cube")
[Link]("[Link]")
Explore
# Registro de clases
classes = (
Notifications CUBO_OT_generate_cube,
CUBO_OT_reset,
CUBO_PT_panel,
Messages )

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

Paso 9: Instalar y Probar el Add-on


Kaidan
@KaidanCrown Guarda el archivo: Asegúrate de que el archivo se llama cubo_magico.py .

[Link] 10/93
28/7/25, 6:21 p.m. Grok / X

Instala el add-on:

En Blender, ve a Edit > Preferences > Add-ons > Install .


Home Selecciona cubo_magico.py y actívalo.

Explore Prueba el add-on:

En la vista 3D, presiona N para abrir el N-Panel.


Notifications
Busca la pestaña "Cubo Mágico".
Messages Ajusta el tamaño y la rotación, haz clic en "Generar Cubo Mágico" y observa el
resultado.
Grok
Usa "Resetear Propiedades" para volver a los valores por defecto.
Lists

Bookmarks

Jobs Paso 10: Empaquetar el Add-on (Opcional)

Para distribuir el add-on, comprímelo en un archivo .zip :


Communities
Crea una carpeta llamada cubo_magico .
Premium
Coloca cubo_magico.py dentro.

Verified Orgs Comprime la carpeta en cubo_magico.zip .

Instala el .zip en Blender como si fuera un solo archivo.


Profile

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:

Consulta la API de Blender para más funciones.


Home Explora [Link] , [Link] , y [Link] para personalizar más.

Explore Buenas prácticas:

Usa nombres únicos para bl_idname (por ejemplo, cubo.generate_cube ).


Notifications
Asegúrate de desregistrar propiedades en unregister() para evitar conflictos.
Messages
Siguientes pasos:

Grok Añade más funcionalidades, como:

Lists Generar otros tipos de mallas (esferas, cilindros).

Añadir materiales al cubo.


Bookmarks
Crear un menú desplegable con opciones avanzadas.

Jobs

Communities

Premium Ejercicio Práctico

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.

Post Pista para el ejercicio 1:


Usa [Link](-5, 5) (importa random ) y pásalo a location en
[Link].primitive_cube_add .

Kaidan
@KaidanCrown

[Link] 12/93
28/7/25, 6:21 p.m. Grok / X

Recursos Adicionales

Documentación oficial: Blender Python API


Home
Tutoriales: Busca en YouTube "Blender Python add-on tutorial" para ejemplos visuales.

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

Jobs Necesito que me generes un plan de clases de 6 lecciones


para poder hacer este ejercicio. (Mas adelante te pedire que
Communities me desarrolles completa y detalladamente cada lesson, solo
el outline de momento)
Premium
A continuación, te presento un plan de clases estructurado en 6 lecciones para aprender a
Verified Orgs
desarrollar el add-on "Cubo Mágico" en Blender con Python, con un enfoque práctico y

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.

Plan de Clases: Desarrollo de un Add-on en Blender con Python


Kaidan
@KaidanCrown
Lección 1: Introducción a Blender y la API de Python
[Link] 13/93
28/7/25, 6:21 p.m. Grok / X

Objetivo: Comprender los fundamentos del desarrollo de add-ons en Blender y configurar el


entorno de trabajo.

Home Temas:

Introducción a la API de Blender y su estructura ( bpy ).


Explore
Configuración del entorno: activar modo desarrollador, consola de Python y editor de
Notifications texto.

Creación de un script Python básico en Blender.


Messages
Estructura de un add-on: bl_info , register() , unregister() .
Grok
Actividad práctica:

Lists Crear e instalar un add-on vacío que imprima un mensaje en la consola.

Resultado esperado: Un add-on básico que se instala y registra correctamente en


Bookmarks
Blender.
Jobs

Communities

Premium Lección 2: Creando Operadores en Blender

Objetivo: Aprender a crear operadores para ejecutar acciones en Blender.


Verified Orgs
Temas:

Profile Qué es un operador ( [Link] ).

Propiedades de un operador: bl_idname , bl_label , bl_options .


More
Creación de un operador para generar un cubo básico.
Post Introducción al contexto ( context ) y uso de [Link] .

Actividad práctica:

Crear un operador que genere un cubo con tamaño fijo.

Ejecutar el operador desde la consola de Blender ( [Link] ).


Kaidan
@KaidanCrown Resultado esperado: Un add-on con un operador funcional que crea un cubo.

[Link] 14/93
28/7/25, 6:21 p.m. Grok / X

Lección 3: Añadiendo Propiedades Personalizables


Home
Objetivo: Implementar propiedades personalizables para controlar parámetros del cubo.

Explore Temas:

Propiedades en Blender: [Link] (FloatProperty, FloatVectorProperty).


Notifications
Almacenar propiedades en la escena ( [Link] ).
Messages
Funciones de actualización ( update ) para propiedades.

Grok Actividad práctica:

Lists Añadir propiedades para el tamaño y la rotación del cubo.

Modificar el operador para usar estas propiedades.


Bookmarks
Resultado esperado: Un add-on que permite personalizar el tamaño y la rotación del
Jobs cubo generado.

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:

Creación de paneles ( [Link] ).


More
Configuración del panel: bl_space_type , bl_region_type , bl_category .

Post Añadir propiedades y operadores al panel.

Actividad práctica:

Crear un panel en el N-Panel para mostrar las propiedades y el botón del operador.

Probar la interfaz ajustando valores y generando cubos.


Kaidan
Resultado esperado: Un add-on con un panel funcional en el N-Panel.
@KaidanCrown

[Link] 15/93
28/7/25, 6:21 p.m. Grok / X

Lección 5: Mejorando la Funcionalidad del Add-on


Home
Objetivo: Añadir un operador de reseteo y la funcionalidad de posición aleatoria (parte del

Explore ejercicio).

Temas:
Notifications
Creación de un operador para resetear propiedades.
Messages Uso de la librería random para generar posiciones aleatorias.

Registro y desregistro de múltiples clases y propiedades.


Grok
Actividad práctica:
Lists
Implementar un operador para resetear el tamaño y la rotación.
Bookmarks Modificar el operador de generación para usar posiciones aleatorias en un rango (-5,
5).
Jobs
Resultado esperado: Un add-on con un botón de reseteo y cubos generados en
Communities 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

More (ejercicio propuesto).

Temas:
Post
Crear y asignar materiales a objetos ( [Link] ).

Propiedades para colores ( FloatVectorProperty con subtype='COLOR' ).

Crear un operador para eliminar cubos específicos.

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

Crear un operador que elimine todos los cubos generados.

Empaquetar el add-on en un archivo .zip para distribución.

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

Bookmarks familiaridad con la interfaz de Blender.

Recursos: Documentación de la API de Blender, consola de Blender para depuración, y


Jobs ejemplos de código proporcionados.

Evaluación: Los estudiantes completarán el add-on paso a paso, y al final de la Lección


Communities
6, tendrán un add-on funcional con todas las características solicitadas.
Premium

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

Kaidan Generame una MasterClass para la Leccion1. Explica


@KaidanCrown detalladamente cada uno de los temas y conceptos. (Info

[Link] 17/93
28/7/25, 6:21 p.m. Grok / X

extra sobre mi: Soy aprendiz de Python aun y no he usado


Blender. Puede que sepa trabajar con Python pero no
conozco nada sobre los metodos y clases q utiliza Blender)
Home

¡Bienvenido a la MasterClass de la Lección 1: Introducción a Blender y la API de Python!


Explore
Esta lección está diseñada para alguien como tú: un aprendiz de Python con conocimientos
Notifications básicos (variables, funciones, clases) pero sin experiencia previa en Blender o su API. Vamos
a construir una base sólida para que entiendas cómo desarrollar add-ons en Blender con
Messages Python, con un enfoque práctico y detallado. Cubriremos los fundamentos de la API de
Blender, configuraremos el entorno de trabajo, crearemos un script Python básico y
Grok
construiremos un add-on vacío que se pueda instalar en Blender.

Lists Duración estimada: 1-1.5 horas


Nivel: Principiante (con conocimientos básicos de Python)
Bookmarks Objetivo: Comprender los fundamentos del desarrollo de add-ons en Blender y crear un add-
on vacío que imprima un mensaje en la consola.
Jobs

Communities

Premium Estructura de la Lección

Verified Orgs Introducción a la API de Blender y su estructura ( bpy )

Configuración del entorno: modo desarrollador, consola de Python y editor de texto


Profile
Creación de un script Python básico en Blender
More Estructura de un add-on: bl_info , register() , unregister()

Actividad práctica: Crear e instalar un add-on vacío


Post
Cierre y próximos pasos

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

Concepto: ¿Qué es Blender y su API?

Blender es un software gratuito y de código abierto para modelado 3D, animación,

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() .

Bookmarks Puedes acceder a la escena actual con [Link] .

Puedes modificar propiedades de un objeto con [Link] .


Jobs
Estructura de bpy
Communities
El módulo bpy se divide en varias partes clave:
Premium [Link] : Contiene operadores, que son funciones que ejecutan acciones (como crear un
cubo o mover un objeto). Ejemplo: [Link].primitive_cube_add(size=2) .
Verified Orgs
[Link] : Proporciona acceso al contexto actual, como la escena seleccionada o el

Profile objeto activo. Ejemplo: [Link] accede a la escena actual.

[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] : Permite definir propiedades personalizables (como sliders o campos de


texto). Ejemplo: [Link] para un número decimal.

¿Por qué es importante para un add-on?


Kaidan
@KaidanCrown

[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

Communities Concepto: Preparando Blender para desarrollo

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:

Post Abre Blender.

Ve a Edit > Preferences (en la barra superior).

En la pestaña Interface , marca la casilla Developer Extras (Extras de


Desarrollador).

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

Paso 2: Acceder a la consola de Python

La consola de Python en Blender te permite ejecutar comandos Python directamente y ver

Home mensajes de depuración.

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

Lists en la Info Window:

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").

Jobs Ejecuta comandos y observa los mensajes en esta ventana.

Prueba:
Communities
En la consola de Blender, escribe: [Link].primitive_cube_add() y presiona
Premium Enter.

Deberías ver un cubo aparecer en la escena 3D.


Verified Orgs

Profile Paso 3: Usar el editor de texto

Blender incluye un editor de texto integrado para escribir scripts Python.


More
Instrucciones:

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").

Haz clic en New para crear un nuevo archivo de texto.

Escribe un script simple, por ejemplo:

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.

Verifica que el mensaje aparece en la consola (Windows) o en la ventana Info

Home (Mac/Linux).

Explore Alternativa: Editor externo

Si prefieres, puedes usar un editor como VS Code:


Notifications
Escribe tu script en VS Code y guárdalo con extensión .py .
Messages Luego, en Blender, usa Edit > Preferences > Add-ons > Install para cargar el archivo.

Grok Por qué es importante

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.

En el editor de texto de Blender, crea un nuevo archivo ( New ).

Escribe el siguiente código:

Kaidan import bpy

@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))

# Seleccionar el cubo recién creado


cube = [Link]
python
Home [Link] = (2, 3, 1) # Mover el cubo a la posición (x=2, y=3, z=1)

Haz clic en Run Script .


Explore
Observa que aparece un cubo en la escena 3D, movido a la posición (2, 3, 1).
Notifications
Explicación del código
Messages
import bpy : Importa el módulo principal de la API de Blender.

Grok [Link].primitive_cube_add : Llama a un operador que crea un cubo. El parámetro


size define el tamaño, y location la posición inicial.
Lists
[Link] : Accede al objeto activo (el cubo recién creado).

Bookmarks [Link] : Modifica la posición del cubo usando una tupla (x, y, z) .

Jobs Para principiantes en Python

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

Concepto: ¿Qué es un add-on?

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:

Messages bl_info : Un diccionario con metadatos que describe el add-on.

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.

Clases (opcional, en lecciones futuras): Para definir operadores, paneles, etc.


Bookmarks
El diccionario bl_info
Jobs
El bl_info es un diccionario que contiene información sobre el add-on. Es obligatorio para
Communities que Blender lo reconozca. Ejemplo:

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.

author : Tu nombre o seudónimo.

version : Versión del add-on (por ejemplo, (1, 0) para 1.0).

blender : Versión mínima de Blender compatible.


Kaidan
@KaidanCrown location : Dónde aparece el add-on en la interfaz (informativo).

[Link] 24/93
28/7/25, 6:21 p.m. Grok / X

description : Descripción breve del add-on.

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

Messages todo lo que registraste para evitar conflictos.

Ejemplo básico:
Grok

Lists def register():


print("Add-on registrado")

Bookmarks def unregister():


print("Add-on desregistrado")
python

Jobs
Estructura mínima de un add-on
Communities
Aquí está el código mínimo para un add-on vacío:
Premium

Verified Orgs bl_info = {


"name": "Mi Primer Add-on",
"author": "Tu Nombre",

Profile "version": (1, 0),


"blender": (3, 0, 0),
"location": "View3D > Tools",
More "description": "Un add-on simple para aprender",
"category": "Learning",
}

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()

Home if __name__ == "__main__": : Ejecuta register() cuando cargas el script directamente


(útil para pruebas).
Explore
Para principiantes en Python
Notifications
Si no estás familiarizado con diccionarios o funciones en Python:

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

Instrucciones paso a paso


Profile
Crear el archivo del add-on:
More
Abre el editor de texto en Blender ( Text Editor ).

Post Haz clic en New y pega el siguiente código:

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

Home def register():


print("¡Mi Primer Add-on está registrado!")

Explore def unregister():


print("¡Mi Primer Add-on está desregistrado!")

Notifications if __name__ == "__main__":


python
register()

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 .

Bookmarks Haz clic en Install y selecciona mi_primer_addon.py .

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).

Premium Probar la desactivación:

Desmarca la casilla del add-on en Preferences > Add-ons .


Verified Orgs
Verifica que el mensaje "¡Mi Primer Add-on está desregistrado!" aparece en la
Profile consola.

More Depuración

Si no ves el mensaje, asegúrate de que:


Post
La consola está abierta (Windows) o la ventana Info está visible (Mac/Linux).

El archivo tiene la extensión .py .

No hay errores de sintaxis (por ejemplo, indentación incorrecta).

Si hay errores, Blender mostrará un mensaje en la consola o en Preferences > Add-ons .


Kaidan
@KaidanCrown
Resultado esperado
[Link] 27/93
28/7/25, 6:21 p.m. Grok / X

Un add-on instalado que imprime mensajes al activarse/desactivarse, aunque no hace nada


visible en la interfaz aún (eso lo haremos en las próximas lecciones).

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).

Creaste un script básico para generar un cubo.


Bookmarks
Entendiste la estructura de un add-on ( bl_info , register , unregister ).
Jobs Creaste e instalaste un add-on vacío.

Communities
Próximos pasos

Premium En la Lección 2, aprenderás a crear operadores ( [Link] ) para añadir


funcionalidades interactivas, como un botón para generar un cubo. Esto te permitirá empezar
Verified Orgs a construir el add-on "Cubo Mágico".

Profile Tarea para casa

Modifica el bl_info de tu add-on (cambia el nombre, descripción o categoría).


More
Escribe un script simple en el editor de texto de Blender que cree una esfera en lugar de
Post un cubo ( [Link].primitive_ico_sphere_add() ).

Practica ejecutando comandos en la consola de Python, como:

[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

No te preocupes si la API de Blender parece abrumadora al principio. Es solo una


biblioteca de Python, y aprenderás sus métodos con la práctica.

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

Bookmarks ejemplos visuales.

Comunidad: Blender Stack Exchange o el canal de Blender en Discord para preguntas.


Jobs

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.

Profile Generame una MasterClass para la Leccion 2. Explica


detalladamente cada uno de los temas y conceptos.
More
¡Bienvenido a la MasterClass de la Lección 2: Creando Operadores en Blender! En esta
Post lección, avanzarás en tu camino para desarrollar el add-on "Cubo Mágico" en Blender con
Python. Dado que eres un aprendiz de Python y no tienes experiencia previa con Blender,
pero tienes conocimientos básicos de Python, esta lección se enfocará en explicaciones
claras y detalladas, con ejemplos prácticos adaptados a tu nivel. Nos centraremos en crear
operadores ( [Link] ), que son como botones o acciones que el usuario puede

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

Duración estimada: 1-1.5 horas


Nivel: Principiante (con conocimientos básicos de Python y la Lección 1)
Objetivo: Aprender a crear operadores en Blender y construir un add-on con un operador
Home
funcional que genere un cubo con tamaño fijo.

Explore

Notifications

Messages Estructura de la Lección

Qué es un operador ( [Link] )


Grok
Propiedades de un operador: bl_idname , bl_label , bl_options
Lists Creación de un operador para generar un cubo básico

Bookmarks Introducción al contexto ( context ) y uso de [Link]

Actividad práctica: Crear un operador que genere un cubo y ejecutarlo desde la consola
Jobs
Cierre y próximos pasos

Communities

Premium

Verified Orgs 1. Qué es un operador ( [Link] )

Profile Concepto: ¿Qué es un operador?

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.

Messages Para principiantes en Python

Si estás acostumbrado a funciones en Python, un operador es similar a una función, pero


Grok
está envuelto en una clase. Las clases en Python son como moldes que definen objetos con
Lists propiedades y métodos. En este caso, [Link] es una clase base proporcionada
por Blender, y nosotros crearemos una clase personalizada que herede de ella para definir
Bookmarks nuestra acción.

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 :

Post Es el identificador único del operador, como su nombre interno en Blender.

Debe seguir el formato [Link] , donde category es un grupo (por ejemplo,


mesh , object ) y name es el nombre del operador.

Ejemplo: cubo.generate_cube (usaremos esta convención para nuestro add-on).

Regla importante: No uses espacios ni caracteres especiales, y asegúrate de que


Kaidan
@KaidanCrown sea único para evitar conflictos con otros add-ons.

[Link] 31/93
28/7/25, 6:21 p.m. Grok / X

bl_label :

Es el nombre visible del operador, que aparece en la interfaz (por ejemplo, en un


Home botón o menú).

Puede ser cualquier texto legible, como "Generar Cubo Mágico".


Explore
Ejemplo: bl_label = "Generar Cubo Mágico" .
Notifications
bl_options :

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'} .

Lists REGISTER : Permite que el operador aparezca en el historial de Blender.

UNDO : Habilita la capacidad de deshacer la acción (por ejemplo, con Ctrl+Z).


Bookmarks
Ejemplo: bl_options = {'REGISTER', 'UNDO'} .
Jobs
Método execute(self, context) :
Communities
Este es el corazón del operador, donde defines la lógica de lo que hace.

Premium self se refiere al operador mismo (como en cualquier clase de Python).

context es un objeto que contiene información sobre el estado actual de Blender


Verified Orgs
(como la escena activa o el objeto seleccionado).

Profile Debe devolver {'FINISHED'} si la acción se completa correctamente, o


{'CANCELLED'} si falla.
More
Ejemplo mental
Post Imagina que un operador es como un botón en una máquina expendedora. El bl_idname es el
código interno del botón (como "A1"), el bl_label es la etiqueta en el botón ("Refresco"), y
bl_options define si puedes cancelar la compra. El método execute es lo que sucede
cuando presionas el botón: la máquina entrega el producto.

Kaidan Para principiantes en Python


@KaidanCrown

[Link] 32/93
28/7/25, 6:21 p.m. Grok / X

Si no estás familiarizado con clases, piensa en [Link] como una plantilla


que Blender proporciona. Tú solo llenas los detalles (como bl_idname y execute ) para
personalizar la acción.
Home
El método execute es como una función normal, pero debe seguir las reglas de Blender
Explore (usar context y devolver {'FINISHED'} ).

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

Explicación del código

import bpy : Importa el módulo de la API de Blender.


Kaidan
@KaidanCrown class CUBO_OT_generate_cube([Link]) :

[Link] 33/93
28/7/25, 6:21 p.m. Grok / X

Define una clase llamada CUBO_OT_generate_cube que hereda de


[Link] .

Home La convención CUBO_OT_ indica que es un operador (OT = Operator).

bl_idname = "cubo.generate_cube" : Identificador único del operador.


Explore
bl_label = "Generar Cubo Mágico" : Nombre que aparecerá en la interfaz.

Notifications bl_description : Descripción opcional que aparece como tooltip.

bl_options = {'REGISTER', 'UNDO'} : Habilita deshacer y registro en el historial.


Messages
execute(self, context) :
Grok
Usa [Link].primitive_cube_add para crear un cubo con tamaño 2 y posición

Lists (0, 0, 0).

[Link]({'INFO'}, "¡Cubo creado!") muestra un mensaje en la interfaz de


Bookmarks Blender.

Jobs return {'FINISHED'} indica que la acción se completó correctamente.

Communities Para principiantes en Python

La línea class CUBO_OT_generate_cube([Link]) es como decir: "Voy a crear


Premium una nueva acción basada en la plantilla de Blender para operadores".

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

4. Introducción al contexto ( context ) y uso de [Link]

Concepto: ¿Qué es el contexto?


Kaidan El context es un objeto proporcionado por Blender que contiene información sobre el estado
@KaidanCrown
actual del programa. Por ejemplo:

[Link] 34/93
28/7/25, 6:21 p.m. Grok / X

Qué escena está activa ( [Link] ).

Qué objeto está seleccionado ( [Link] ).

Home Qué modo está activo (Object Mode, Edit Mode, etc.).

Explore En el método execute(self, context) , Blender pasa automáticamente el objeto context al


operador, permitiéndote acceder a esta información. En esta lección, no usaremos context
Notifications directamente, pero es importante entender que está ahí para cuando necesitemos
personalizar el comportamiento según el estado de Blender.
Messages
Uso de [Link]
Grok
El módulo [Link] contiene operadores predefinidos de Blender, como los que usas al
Lists interactuar con la interfaz (por ejemplo, añadir un cubo, mover un objeto). En nuestro
operador, usamos [Link].primitive_cube_add , que es el equivalente a seleccionar
Bookmarks "Add > Mesh > Cube" en la interfaz.

Jobs Ejemplo de [Link] :

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).

Profile Otros ejemplos de operadores en [Link] :

More [Link].select_all(action='SELECT') : Selecciona todos los objetos.

[Link](value=(1, 0, 0)) : Mueve el objeto seleccionado 1 unidad


Post en el eje X.

Para principiantes en Python

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

futuras lo necesitarás para acceder a propiedades como el tamaño del cubo.

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

Bookmarks Crear el archivo del add-on:

Abre Blender y ve al Text Editor (cambia un área de la interfaz a "Text Editor").


Jobs
Haz clic en New y pega el siguiente código:
Communities

bl_info = {
Premium "name": "Cubo Mágico",
"author": "Tu Nombre",

Verified Orgs "version": (1, 0),


"blender": (3, 0, 0),
"location": "View3D > Tools",
Profile "description": "Un add-on para generar cubos personalizados",
"category": "Add Mesh",
}
More
import bpy

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'}

def execute(self, context):


[Link].primitive_cube_add(size=2, location=(0, 0, 0))
[Link]({'INFO'}, "¡Cubo creado!")
Kaidan
return {'FINISHED'}
@KaidanCrown
def register():

[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")

Explore if __name__ == "__main__":


register()
python

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

Lists para que Blender la reconozca.

[Link].unregister_class(CUBO_OT_generate_cube) : Elimina el operador al


Bookmarks desactivar el add-on.

Jobs Estas funciones son necesarias porque los operadores son clases que deben
registrarse explícitamente.
Communities
Instalar el add-on:

Premium Ve a Edit > Preferences > Add-ons .

Haz clic en Install y selecciona cubo_magico.py .


Verified Orgs
Busca "Cubo Mágico" en la lista de add-ons y marca la casilla para activarlo.
Profile Verifica que el mensaje "Add-on registrado" aparece en la consola (Windows) o
ventana Info (Mac/Linux).
More
Ejecutar el operador desde la consola:
Post
Abre la consola de Blender ( Window > Toggle System Console en Windows, o usa la
ventana Info en Mac/Linux).

Escribe el siguiente comando y presiona Enter:

Kaidan [Link].generate_cube()
python
@KaidanCrown

[Link] 37/93
28/7/25, 6:21 p.m. Grok / X

Deberías ver:

Un cubo aparecer en la escena 3D en la posición (0, 0, 0) con tamaño 2.


Home Un mensaje en la consola o ventana Info: "¡Cubo creado!".

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 .

Grok Que no hay errores de sintaxis (como indentación incorrecta).

Que el comando en la consola es correcto ( cubo.generate_cube , no otro


Lists
nombre).

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:

Home Aprendiste qué es un operador y cómo se define usando [Link] .

Entendiste las propiedades clave de un operador ( bl_idname , bl_label , bl_options ).


Explore
Creaste un operador que genera un cubo con tamaño fijo.
Notifications
Exploraste el uso de context y [Link] .

Messages Construiste un add-on con un operador funcional y lo probaste desde la consola.

Grok Próximos pasos

En la Lección 3, añadiremos propiedades personalizables ( [Link] ) para que el usuario


Lists
pueda definir el tamaño y la rotación del cubo. Esto hará que el add-on sea más interactivo y
flexible.
Bookmarks

Jobs Tarea para casa

Modifica el operador para que el cubo se genere en una posición diferente, como (2, 3,
Communities 1) .

Premium Experimenta con otros operadores de [Link] en la consola, por ejemplo:

Verified Orgs [Link].primitive_cylinder_add(radius=1, depth=2)


python

Profile
Lee sobre [Link] en la Documentación de la API de Blender para

More familiarizarte con otras opciones.

Consejos para principiantes


Post
No te preocupes si la sintaxis de las clases te parece nueva. Con la práctica, te
acostumbrarás a heredar de [Link] .

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.

Notifications Comunidad: Blender Stack Exchange para resolver dudas específicas.

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

Communities Generame una MasterClass para la Leccion3. Explica


detalladamente cada uno de los temas y conceptos.
Premium
¡Bienvenido a la MasterClass de la Lección 3: Añadiendo Propiedades Personalizables! En
Verified Orgs
esta lección, continuarás desarrollando el add-on "Cubo Mágico" en Blender con Python,
enfocándote en propiedades personalizables para permitir al usuario controlar el tamaño y
Profile
la rotación del cubo. Dado que eres un aprendiz de Python sin experiencia previa en Blender,
More pero con conocimientos básicos de Python y las lecciones anteriores, esta MasterClass
explicará cada concepto de manera clara y detallada, con ejemplos prácticos adaptados a tu
Post nivel. Al final, tendrás un add-on que permite personalizar el tamaño y la rotación del cubo
generado, sentando las bases para una interfaz interactiva en la próxima lección.

Duración estimada: 1-1.5 horas


Nivel: Principiante (con conocimientos básicos de Python y las Lecciones 1 y 2)
Objetivo: Implementar propiedades personalizables para el tamaño y la rotación del cubo, y
Kaidan modificar el operador para usar estas propiedades.
@KaidanCrown

[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] )

Notifications Funciones de actualización ( update ) para propiedades

Modificar el operador para usar las propiedades


Messages
Actividad práctica: Añadir propiedades para tamaño y rotación, y actualizar el operador
Grok Cierre y próximos pasos

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 tamaño del cubo (un número decimal, como 2.0).


Post
La rotación del cubo (un vector de tres valores para los ejes X, Y, Z).

El módulo [Link]

El módulo [Link] contiene clases para definir propiedades, como:

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

FloatVectorProperty : Para un vector de números decimales (por ejemplo, la rotación en


X, Y, Z).

Home Otros ejemplos: IntProperty (enteros), StringProperty (texto), BoolProperty


(verdadero/falso).
Explore
Definir una propiedad con FloatProperty
Notifications
Un FloatProperty se usa para un solo valor numérico con decimales. Ejemplo:

Messages
[Link](
Grok name="Tamaño",
description="Tamaño del cubo",
default=2.0,
Lists min=0.1,
max=10.0
)
Bookmarks python

Jobs name : Nombre que aparece en la interfaz.

description : Tooltip que describe la propiedad.


Communities
default : Valor inicial.

Premium min y max : Límites para el valor (opcional).

Verified Orgs Definir una propiedad con FloatVectorProperty

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).

Almacenar una propiedad en [Link] significa que estará disponible globalmente


Post
para la escena activa y puede ser accedida desde cualquier parte del add-on, como en
operadores o paneles.

Cómo almacenar una propiedad

Para añadir una propiedad a la escena, la asignas como un atributo de [Link] .


Kaidan
@KaidanCrown Ejemplo:

[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 .

Grok Acceso a la propiedad

Lists Una vez definida, puedes leer o modificar la propiedad usando:

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.

More Por qué usar la escena

La escena es un lugar centralizado para almacenar datos que no están ligados a un


Post
objeto específico (como un cubo o una cámara).

En nuestro add-on, queremos que el tamaño y la rotación sean configuraciones globales


que el usuario pueda ajustar, por lo que la escena es ideal.

Kaidan
@KaidanCrown

[Link] 44/93
28/7/25, 6:21 p.m. Grok / X

3. Funciones de actualización ( update ) para propiedades

Concepto: ¿Qué es una función de actualización?


Home
Una función de actualización ( update ) es una función opcional que se ejecuta
Explore automáticamente cada vez que el usuario cambia el valor de una propiedad. Esto es útil para:

Validar el valor (por ejemplo, asegurarte de que no sea negativo).


Notifications
Actualizar otros elementos en la escena en respuesta al cambio.
Messages
Mostrar mensajes de depuración (como un print ).

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).

Asigna la función al parámetro update de la propiedad.


Bookmarks
Ejemplo:
Jobs

Communities def update_cube_size(self, context):


print(f"Tamaño actualizado: {self.cube_size}")

Premium [Link].cube_size = [Link](


name="Tamaño",

Verified Orgs description="Tamaño del cubo",


default=2.0,
min=0.1,

Profile max=10.0,
update=update_cube_size
)
python
More

Cuando el usuario cambia el valor de cube_size (por ejemplo, en un panel), la función


Post
update_cube_size se ejecuta y muestra el nuevo valor en la consola.

Para principiantes en Python

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

Messages 4. Modificar el operador para usar las propiedades

Grok Concepto: Integrando propiedades en el operador

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'}

def execute(self, context):


More size = [Link].cube_size
rotation = [Link].cube_rotation
[Link].primitive_cube_add(size=size, location=(0, 0, 0), rotation=rotation)
Post [Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}")
return {'FINISHED'}
python

[Link].cube_size : Obtiene el valor de la propiedad cube_size .

[Link].cube_rotation : Obtiene el vector de rotación.


Kaidan
size=size, rotation=rotation : Pasa los valores al operador primitive_cube_add .
@KaidanCrown

[Link] 46/93
28/7/25, 6:21 p.m. Grok / X

[Link] : Muestra un mensaje con los valores usados.

Para principiantes en Python


Home
El operador sigue siendo una clase con un método execute , pero ahora usa [Link]
Explore para leer las propiedades, como si estuvieras accediendo a una variable almacenada en un
diccionario. La lógica es simple: en lugar de usar valores fijos ( size=2 ), usas los valores que el
Notifications usuario ha configurado.

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

Verified Orgs Instrucciones paso a paso

Crear el archivo del add-on:


Profile
Abre Blender y ve al Text Editor .
More Haz clic en New y pega el siguiente código (una versión mejorada del add-on de la
Lección 2):
Post

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

Home def update_cube_size(self, context):


print(f"Tamaño actualizado: {self.cube_size}")

Explore def update_cube_rotation(self, context):


print(f"Rotación actualizada: {self.cube_rotation}")

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)

Bookmarks [Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}")


return {'FINISHED'}

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()

Guarda el archivo como cubo_magico.py .


Home
Explicación de las nuevas partes del código:
Explore
Funciones de actualización ( update_cube_size , update_cube_rotation ): Imprimen

Notifications mensajes en la consola cuando cambian las propiedades.

Propiedades:
Messages
cube_size : Un FloatProperty para el tamaño, con valor por defecto 2.0 y

Grok límites entre 0.1 y 10.0.

cube_rotation : Un FloatVectorProperty para la rotación, con valor por defecto


Lists
(0, 0, 0) y subtype='EULER' para rotaciones.

Bookmarks Operador actualizado: Usa [Link].cube_size y


[Link].cube_rotation en lugar de valores fijos.
Jobs
Registro/desregistro:

Communities Las propiedades se definen en register() y se eliminan en unregister() con


del para evitar conflictos.
Premium
Esto es importante para que Blender limpie correctamente el add-on al
Verified Orgs desactivarlo.

Instalar el add-on:
Profile
Ve a Edit > Preferences > Add-ons .
More
Haz clic en Install y selecciona cubo_magico.py .

Post Busca "Cubo Mágico" en la lista de add-ons y actívalo.

Verifica que el mensaje "Add-on registrado" aparece en la consola (Windows) o


ventana Info (Mac/Linux).

Probar las propiedades desde la consola:

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

Cambia el tamaño del cubo:

Home [Link].cube_size = 5.0


python

Explore Deberías ver en la consola: Tamaño actualizado: 5.0 .

Notifications Cambia la rotación del cubo:

Messages [Link].cube_rotation = (45.0, 0.0, 0.0)


python

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) .

Verified Orgs Depuración:

Si el operador no funciona, verifica:


Profile
Que el add-on está activado.
More
Que los comandos en la consola son correctos (por ejemplo, cube_size , no
cubesize ).
Post
Que no hay errores de sintaxis en el código.

Si las propiedades no funcionan, asegúrate de que están definidas en register() y


eliminadas en unregister() .

Prueba adicional:
Kaidan
@KaidanCrown

[Link] 50/93
28/7/25, 6:21 p.m. Grok / X

Cambia los valores de cube_size y cube_rotation a diferentes valores (por ejemplo,


cube_size = 3.0 , cube_rotation = (0.0, 30.0, 60.0) ).

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

Bookmarks 6. Cierre y próximos pasos

Jobs Resumen

Communities En esta lección:

Aprendiste a usar [Link] para definir propiedades personalizables ( FloatProperty ,


Premium FloatVectorProperty ).

Verified Orgs Entendiste cómo almacenar propiedades en la escena ( [Link] ).

Implementaste funciones de actualización ( update ) para reaccionar a cambios en las


Profile propiedades.

More Modificaste el operador para usar las propiedades personalizables.

Probaste las propiedades y el operador desde la consola.


Post
Próximos pasos

En la Lección 4, crearemos una interfaz de usuario ( [Link] ) para mostrar las


propiedades y el operador en el N-Panel, haciendo el add-on más interactivo y fácil de usar.

Kaidan Tarea para casa


@KaidanCrown

[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

Consejos para principiantes


Messages
Las propiedades de [Link] son como variables normales, pero con la ventaja de que
Grok Blender las puede mostrar en la interfaz.

Si encuentras errores al ejecutar el operador, revisa la consola o ventana Info para


Lists
obtener detalles.

Bookmarks Experimenta con pequeños cambios en el código (como modificar los valores por
defecto) para ganar confianza con la API.
Jobs

Communities

Premium Recursos Adicionales

Verified Orgs Documentación oficial: Blender Python API - Properties

Tutoriales: Busca "Blender Python properties tutorial" en YouTube para ejemplos


Profile
visuales.

More Comunidad: Blender Stack Exchange para resolver dudas específicas.

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.

Duración estimada: 1-1.5 horas


Messages
Nivel: Principiante (con conocimientos básicos de Python y las Lecciones 1, 2 y 3)
Objetivo: Crear un panel en la interfaz de Blender (N-Panel) para mostrar las propiedades y el
Grok
operador, y probar la interfaz interactiva.
Lists

Bookmarks

Jobs Estructura de la Lección

Creación de paneles ( [Link] )


Communities
Configuración del panel: bl_space_type , bl_region_type , bl_category
Premium Añadir propiedades y operadores al panel

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] )

Concepto: ¿Qué es un panel en Blender?

Un panel en Blender es un componente de la interfaz gráfica que agrupa controles


Kaidan
interactivos, como propiedades (sliders, campos de texto) y operadores (botones). Los
@KaidanCrown
paneles suelen aparecer en áreas específicas de la interfaz, como el N-Panel (la barra lateral

[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.

Home En nuestro add-on "Cubo Mágico", crearemos un panel que:

Muestre las propiedades cube_size y cube_rotation definidas en la Lección 3.


Explore
Incluya un botón para ejecutar el operador CUBO_OT_generate_cube .

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

Estructura básica de un panel


Bookmarks
Un panel se define como una clase que hereda de [Link] . Ejemplo básico:
Jobs

Communities class MY_PANEL([Link]):


bl_label = "Mi Panel"
bl_idname = "MY_PT_panel"
Premium bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "Mi Add-on"
Verified Orgs
def draw(self, context):
layout = [Link]
Profile
python [Link](text="¡Hola, este es mi panel!")

More
bl_label : Nombre visible del panel en la interfaz.

Post bl_idname : Identificador único del panel (convención: CATEGORY_PT_name ).

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).

bl_category : Nombre de la pestaña en el N-Panel.


Kaidan
@KaidanCrown

[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

Jobs Concepto: Ubicación del panel

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).

Otros ejemplos: 'PROPERTIES' (pestaña de propiedades), 'NODE_EDITOR' (editor de


Post
nodos).

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

'TOOLS' : La barra de herramientas (a la izquierda, abierta con T ).

'HEADER' : La barra superior del área.

Home Usaremos 'UI' para colocar el panel en el N-Panel, que es un lugar común para los
add-ons.
Explore
bl_category :

Notifications Define el nombre de la pestaña en el N-Panel donde aparecerá el panel. Por


ejemplo, si usas bl_category = "Cubo Mágico" , el panel aparecerá en una pestaña
Messages
llamada "Cubo Mágico".

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

3. Añadir propiedades y operadores al panel

Concepto: Construyendo el contenido del panel


Home
El método draw(self, context) define qué elementos aparecen en el panel. Los elementos
Explore más comunes son:

Propiedades: Muestras propiedades como cube_size y cube_rotation usando


Notifications
[Link] .

Messages Operadores: Añades botones para ejecutar operadores como CUBO_OT_generate_cube


usando [Link] .
Grok
Etiquetas y otros elementos: Puedes añadir texto, separadores o diseños más

Lists complejos con [Link] , [Link] , etc.

Bookmarks Método draw y el objeto layout

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

Verified Orgs def draw(self, context):


layout = [Link]
[Link](text="Configuración del Cubo")
Profile [Link]([Link], "cube_size")
[Link]("cubo.generate_cube")
python

More
[Link] : Añade un texto estático (como un título).
Post [Link] : Muestra una propiedad (como un slider o campo de texto).

[Link] : Añade un botón para ejecutar un operador, identificado por su


bl_idname .

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.

Explore "cube_size" es el nombre de la propiedad definida en [Link] .

Blender automáticamente crea un control gráfico (como un slider) basado en el tipo de


Notifications
propiedad ( FloatProperty , FloatVectorProperty , etc.).

Messages
Añadiendo operadores

Grok Para añadir un botón que ejecute el operador CUBO_OT_generate_cube :

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").

Premium Para principiantes en Python

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

Profile añadiendo campos a un formulario en una página web.

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

CUBO_OT_generate_cube . Probarás la interfaz interactiva en Blender.

Instrucciones paso a paso


Home
Crear el archivo del add-on:
Explore Abre Blender y ve al Text Editor .

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

Communities # Funciones de actualización


def update_cube_size(self, context):
print(f"Tamaño actualizado: {self.cube_size}")
Premium
def update_cube_rotation(self, context):
print(f"Rotación actualizada: {self.cube_rotation}")
Verified Orgs
# Operador
class CUBO_OT_generate_cube([Link]):
Profile bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
More bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


Post size = [Link].cube_size
rotation = [Link].cube_rotation
[Link].primitive_cube_add(size=size, location=(0, 0, 0), rotation=rotation)
[Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}")
return {'FINISHED'}

# Panel
class CUBO_PT_panel([Link]):
Kaidan bl_label = "Cubo Mágico"

@KaidanCrown bl_idname = "CUBO_PT_panel"


bl_space_type = 'VIEW_3D'

[Link] 59/93
28/7/25, 6:21 p.m. Grok / X
bl_region_type = 'UI'
bl_category = "Cubo Mágico"
bl_context = "objectmode"

Home def draw(self, context):


layout = [Link]
scene = [Link]
Explore [Link](scene, "cube_size")
[Link](scene, "cube_rotation")
[Link]("cubo.generate_cube")
Notifications
# Registro
classes = (
Messages CUBO_OT_generate_cube,
CUBO_PT_panel,
)
Grok
def register():
for cls in classes:
Lists [Link].register_class(cls)
[Link].cube_size = [Link](

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()

Guarda el archivo como cubo_magico.py .

Kaidan Explicación de las nuevas partes del código:


@KaidanCrown
Clase CUBO_PT_panel :

[Link] 60/93
28/7/25, 6:21 p.m. Grok / X

Hereda de [Link] para definir un panel.

bl_label = "Cubo Mágico" : Nombre del panel.

Home bl_idname = "CUBO_PT_panel" : Identificador único (convención:


CATEGORY_PT_name ).
Explore
bl_space_type = 'VIEW_3D' , bl_region_type = 'UI' : Coloca el panel en el N-

Notifications Panel.

bl_category = "Cubo Mágico" : Crea una pestaña llamada "Cubo Mágico".


Messages
bl_context = "objectmode" : El panel solo aparece en modo Objeto.

Grok draw(self, context) : Define el contenido:

Lists [Link](scene, "cube_size") : Muestra un slider para el tamaño.

[Link](scene, "cube_rotation") : Muestra controles para la rotación


Bookmarks (X, Y, Z).

Jobs [Link]("cubo.generate_cube") : Añade un botón para el operador.

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 .

More Busca "Cubo Mágico" en la lista de add-ons y actívalo.

Verifica que el mensaje "Add-on registrado" aparece en la consola (Windows) o


Post
ventana Info (Mac/Linux).

Probar el panel:

En la vista 3D, asegúrate de estar en modo Objeto (selecciona "Object Mode" en el


menú desplegable superior).
Kaidan
Presiona N para abrir el N-Panel (la barra lateral).
@KaidanCrown

[Link] 61/93
28/7/25, 6:21 p.m. Grok / X

Busca la pestaña "Cubo Mágico" en el N-Panel.

Deberías ver:

Home Un slider para "Tamaño" (valor inicial: 2.0).

Explore Campos para "Rotación" (X, Y, Z, valores iniciales: 0.0).

Un botón etiquetado "Generar Cubo Mágico".


Notifications
Cambia el tamaño a 5.0 y la rotación a (45.0, 0.0, 0.0).
Messages Haz clic en "Generar Cubo Mágico".

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 ).

Profile Revisa la consola para errores de sintaxis o registro.

Si las propiedades no funcionan, asegúrate de que están definidas en register() y


More
eliminadas en unregister() .

Post Prueba adicional:

Cambia el valor de cube_size y cube_rotation directamente desde el panel y genera


varios cubos.

Modifica el método draw para añadir una etiqueta:

Kaidan
@KaidanCrown
python

[Link] 62/93
28/7/25, 6:21 p.m. Grok / X

[Link](text="Configuración del Cubo Mágico")

Reinstala el add-on y verifica que aparece el texto en el panel.


Home

Explore Resultado esperado

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:

Aprendiste a crear paneles con [Link] .


Communities
Configuraste un panel para aparecer en el N-Panel con bl_space_type , bl_region_type ,
Premium bl_category .

Añadiste propiedades y operadores al panel usando [Link] y [Link] .


Verified Orgs
Creaste un panel funcional para el add-on "Cubo Mágico" y lo probaste interactivamente.
Profile
Próximos pasos
More
En la Lección 5, añadiremos un operador de reseteo para restaurar las propiedades a sus
valores por defecto y modificaremos el operador para generar cubos en posiciones
Post
aleatorias, cumpliendo parte del ejercicio propuesto.

Tarea para casa

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.

Lee sobre [Link] en la Documentación de la API de Blender para explorar otras


Explore
opciones, como añadir iconos o subpaneles.

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.

Profile Comunidad: Blender Stack Exchange para resolver dudas específicas.

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.

¡Bienvenido a la MasterClass de la Lección 5: Mejorando la Funcionalidad del Add-on! En

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

por defecto y en implementar la funcionalidad de generar cubos en posiciones aleatorias,


como parte del ejercicio propuesto. Dado que eres un aprendiz de Python sin experiencia
previa en Blender, pero con conocimientos básicos de Python y las lecciones anteriores, esta
Home
MasterClass explicará cada concepto de manera clara y detallada, con ejemplos prácticos

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

Jobs Estructura de la Lección

Creación de un operador para resetear propiedades


Communities
Uso de la librería random para generar posiciones aleatorias
Premium Registro y desregistro de múltiples clases y propiedades

Verified Orgs Actividad práctica: Implementar el operador de reseteo y la generación de cubos en


posiciones aleatorias
Profile
Cierre y próximos pasos

More

Post
1. Creación de un operador para resetear propiedades

Concepto: ¿Qué es un operador de reseteo?

Un operador de reseteo es un operador adicional ( [Link] ) que permite al


Kaidan
usuario restaurar las propiedades personalizables (como cube_size y cube_rotation ) a sus
@KaidanCrown
valores por defecto. Este operador es útil para mejorar la experiencia del usuario, ya que

[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.

Home En nuestro add-on "Cubo Mágico", el operador de reseteo:

Restaurará cube_size a 2.0.


Explore
Restaurará cube_rotation a (0.0, 0.0, 0.0).

Notifications Aparecerá como un botón en el panel, junto al botón "Generar Cubo Mágico".

Messages Definir el operador de reseteo

Un operador de reseteo es similar al operador CUBO_OT_generate_cube de las lecciones


Grok
anteriores, pero su lógica se centra en modificar las propiedades de la escena.
Lists Ejemplo de código:

Bookmarks
class CUBO_OT_reset([Link]):

Jobs bl_idname = "[Link]"


bl_label = "Resetear Propiedades"
bl_description = "Restaura los valores por defecto"
Communities bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


Premium [Link].cube_size = 2.0
[Link].cube_rotation = (0.0, 0.0, 0.0)
[Link]({'INFO'}, "Propiedades reseteadas")
Verified Orgs python return {'FINISHED'}

Profile
bl_idname = "[Link]" : Identificador único para el operador.

More bl_label = "Resetear Propiedades" : Nombre visible en el botón.

bl_description : Tooltip que describe la acción.


Post
bl_options = {'REGISTER', 'UNDO'} : Permite deshacer la acción (por ejemplo, con
Ctrl+Z).

execute(self, context) :

Usa [Link] para acceder a las propiedades cube_size y cube_rotation .


Kaidan
Asigna los valores por defecto.
@KaidanCrown

[Link] 66/93
28/7/25, 6:21 p.m. Grok / X

Muestra un mensaje con [Link] .

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

Bookmarks restablecer un formulario a sus valores iniciales. La clase [Link] es la misma


que usamos para el operador de generación de cubos, pero con una lógica diferente en el
Jobs método execute .

Communities Ejemplo mental

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

Verified Orgs devuelve todo a su estado inicial.

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

El módulo random es parte de la biblioteca estándar de Python y no requiere instalación


adicional. La función [Link](a, b) genera un número decimal aleatorio entre a y b .
Para nuestro propósito:
Home
Generaremos una posición aleatoria como una tupla (x, y, z) , donde cada coordenada
Explore está en el rango (-5, 5).

Pasaremos esta posición al operador [Link].primitive_cube_add usando el


Notifications
parámetro location .

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

Communities Modificar el operador de generación

Premium Actualizaremos el operador CUBO_OT_generate_cube para incluir la posición aleatoria:

Verified Orgs
import random

Profile class CUBO_OT_generate_cube([Link]):


bl_idname = "cubo.generate_cube"
bl_label = "Generar Cubo Mágico"
More bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}

Post def execute(self, context):


size = [Link].cube_size
rotation = [Link].cube_rotation
# Generar posición aleatoria
x = [Link](-5, 5)
y = [Link](-5, 5)
z = [Link](-5, 5)
location = (x, y, z)
Kaidan [Link].primitive_cube_add(size=size, location=location, rotation=rotation)

@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)

Notifications classes : Una tupla que contiene las clases a registrar.

register() : Registra cada clase usando [Link].register_class .


Messages
unregister() : Desregistra las clases en orden inverso para evitar errores de
Grok dependencia.

Lists Registro y desregistro de propiedades

Las propiedades cube_size y cube_rotation también deben registrarse y desregistrarse:


Bookmarks
Se definen en register() para que estén disponibles cuando el add-on está activo.
Jobs
Se eliminan en unregister() con del para limpiar la escena y evitar conflictos con otros
add-ons.
Communities
Ejemplo:
Premium

Verified Orgs def register():


for cls in classes:

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

Para principiantes en Python


Kaidan
@KaidanCrown

[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:

More Abre Blender y ve al Text Editor .

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),

Kaidan "blender": (3, 0, 0),


"location": "View3D > N-Panel > Cubo Mágico",
@KaidanCrown
"description": "Un add-on para generar cubos personalizados",

[Link] 71/93
28/7/25, 6:21 p.m. Grok / X
"category": "Add Mesh",
}

import bpy

Home import random

# Funciones de actualización
Explore def update_cube_size(self, context):
print(f"Tamaño actualizado: {self.cube_size}")

Notifications def update_cube_rotation(self, context):


print(f"Rotación actualizada: {self.cube_rotation}")

Messages # Operador para generar cubo


class CUBO_OT_generate_cube([Link]):
bl_idname = "cubo.generate_cube"
Grok bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}
Lists
def execute(self, context):

Bookmarks size = [Link].cube_size


rotation = [Link].cube_rotation
x = [Link](-5, 5)
Jobs y = [Link](-5, 5)
z = [Link](-5, 5)
location = (x, y, z)
Communities [Link].primitive_cube_add(size=size, location=location, rotation=rotation)
[Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}, Posición: {
return {'FINISHED'}
Premium
# Operador para resetear
class CUBO_OT_reset([Link]):
Verified Orgs bl_idname = "[Link]"
bl_label = "Resetear Propiedades"
bl_description = "Restaura los valores por defecto"
Profile bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


More [Link].cube_size = 2.0
[Link].cube_rotation = (0.0, 0.0, 0.0)
[Link]({'INFO'}, "Propiedades reseteadas")
Post return {'FINISHED'}

# 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")

Home [Link](scene, "cube_rotation")


[Link]("cubo.generate_cube")
[Link]("[Link]")
Explore
# Registro
classes = (
Notifications CUBO_OT_generate_cube,
CUBO_OT_reset,
CUBO_PT_panel,
Messages )

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")

Post if __name__ == "__main__":


python
register()

Guarda el archivo como cubo_magico.py .

Explicación de las nuevas partes del código:


Kaidan
Importación de random : Añadido import random para generar posiciones aleatorias.
@KaidanCrown

[Link] 73/93
28/7/25, 6:21 p.m. Grok / X

Operador CUBO_OT_reset :

Define un nuevo operador con bl_idname = "[Link]" .


Home Restablece cube_size y cube_rotation a sus valores por defecto.

Explore Modificación del operador CUBO_OT_generate_cube :

Añade generación de posiciones aleatorias con [Link](-5, 5) .


Notifications
Incluye la posición en el mensaje de [Link] .
Messages
Panel actualizado:

Grok Añade [Link]("[Link]") para mostrar el botón de reseteo.

Lists Registro:

La lista classes ahora incluye CUBO_OT_reset .


Bookmarks
El bucle en register() y unregister() maneja todas las clases.
Jobs Instalar el add-on:

Communities Ve a Edit > Preferences > Add-ons .

Haz clic en Install y selecciona cubo_magico.py .


Premium
Busca "Cubo Mágico" en la lista de add-ons y actívalo.

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.

Busca la pestaña "Cubo Mágico".

Deberías ver:

Un slider para "Tamaño".


Kaidan
@KaidanCrown Campos para "Rotación" (X, Y, Z).

[Link] 74/93
28/7/25, 6:21 p.m. Grok / X

Un botón "Generar Cubo Mágico".

Un botón "Resetear Propiedades".

Home Cambia el tamaño a 4.0 y la rotación a (30.0, 45.0, 0.0).

Haz clic en "Generar Cubo Mágico" varias veces.


Explore
Verifica que:
Notifications
Cada cubo aparece en una posición aleatoria dentro del rango (-5, 5) para X, Y,

Messages Z.

Los cubos tienen el tamaño y rotación especificados.


Grok
Un mensaje aparece en la consola o ventana Info, como: ¡Cubo creado! Tamaño:

Lists 4.0, Rotación: (30.0, 45.0, 0.0), Posición: (x, y, z) .

Haz clic en "Resetear Propiedades" y verifica que:


Bookmarks
El slider de "Tamaño" vuelve a 2.0.
Jobs Los campos de "Rotación" vuelven a (0.0, 0.0, 0.0).

Communities Un mensaje aparece: "Propiedades reseteadas".

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:

Profile Asegúrate de estar en modo Objeto ( bl_context = "objectmode" ).

Verifica que el N-Panel está abierto (presiona N ).


More
Revisa la consola para errores de sintaxis o registro.

Post Si las posiciones no son aleatorias, confirma que import random está incluido y que
[Link] se usa correctamente.

Si las propiedades no se resetean, verifica que el operador CUBO_OT_reset accede


correctamente a [Link] .

Kaidan Prueba adicional:


@KaidanCrown

[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.

Home Añade una etiqueta al panel antes del botón de reseteo:

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.

Bookmarks Un botón para generar cubos en posiciones aleatorias.

Un botón para resetear las propiedades a sus valores por defecto.


Jobs

Communities

Premium
5. Cierre y próximos pasos
Verified Orgs
Resumen

Profile En esta lección:

Creaste un operador de reseteo ( CUBO_OT_reset ) para restaurar las propiedades.


More
Modificaste el operador de generación para usar posiciones aleatorias con
Post [Link] .

Aprendiste a registrar y desregistrar múltiples clases y propiedades.

Actualizaste el panel para incluir el botón de reseteo y probaste la funcionalidad


interactiva.

Kaidan Próximos pasos


@KaidanCrown
En la Lección 6, completaremos el add-on añadiendo:
[Link] 76/93
28/7/25, 6:21 p.m. Grok / X

Una propiedad para elegir el color del cubo (usando FloatVectorProperty con
subtype='COLOR' ).

Home Un operador para eliminar todos los cubos generados.

Empaquetaremos el add-on en un archivo .zip para distribución.


Explore
Tarea para casa
Notifications
Modifica el operador de reseteo para establecer un tamaño por defecto diferente (por
Messages ejemplo, 3.0).

Cambia el rango de posiciones aleatorias a (-2, 2) y prueba generar varios cubos.


Grok
Lee sobre el módulo random en la Documentación de Python y experimenta con otras
Lists funciones, como [Link] para valores enteros.

Bookmarks Consejos para principiantes

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.

Si encuentras problemas, usa la consola de Blender para depurar (los mensajes de


Premium
print y [Link] son tus aliados).

Verified Orgs

Profile

More Recursos Adicionales

Documentación oficial:
Post
Blender Python API - Operators
Python random module

Tutoriales: Busca "Blender Python random position" en YouTube para ejemplos visuales.

Comunidad: Blender Stack Exchange para resolver dudas específicas.


Kaidan
@KaidanCrown

[Link] 77/93
28/7/25, 6:21 p.m. Grok / X

¡Felicidades por completar la Lección 5! Tu


Generame add-on
una ahora espara
MasterClass máslafuncional
Leccion6.y Explica
dinámico, con un
operador de reseteo y cubos que se generan encada
detalladamente posiciones
uno de aleatorias.
los temas ySiconceptos.
quieres aclarar algún
concepto, probar más ejemplos o avanzar a la Lección 6, avísame y seguimos.
Home
¡Bienvenido a la MasterClass de la Lección 6: Añadiendo Color y Eliminación de Cubos!

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

Verified Orgs Estructura de la Lección

Crear y asignar materiales a objetos ( [Link] )


Profile
Propiedades para colores ( FloatVectorProperty con subtype='COLOR' )

More Crear un operador para eliminar cubos específicos

Empaquetar el add-on en un archivo .zip


Post
Actividad práctica: Implementar la propiedad de color, el operador de eliminación y
empaquetar el add-on

Cierre y próximos pasos

Kaidan
@KaidanCrown

[Link] 78/93
28/7/25, 6:21 p.m. Grok / X

1. Crear y asignar materiales a objetos ( [Link] )

Concepto: ¿Qué son los materiales en Blender?


Home
En Blender, un material define cómo se ve un objeto en términos de color, brillo, textura, etc.
Explore Los materiales se crean y gestionan a través de [Link] y se asignan a objetos
para cambiar su apariencia. En nuestro add-on "Cubo Mágico", usaremos un material simple
Notifications
para definir el color base del cubo.

Messages
Crear un material

Grok Para crear un material:

Usa [Link](name) para crear un nuevo material.


Lists
Configura el color del material usando el nodo Principled BSDF (el nodo estándar para
Bookmarks materiales en Blender).

Asigna el material al objeto.


Jobs
Ejemplo de código:
Communities

Premium material = [Link](name="CuboMaterial")


material.use_nodes = True # Activar nodos
principled = material.node_tree.[Link]("Principled BSDF") # Obtener el nodo Principled BSDF
Verified Orgs [Link]["Base Color"].default_value = (1.0, 0.0, 0.0, 1.0) # Color rojo (RGBA)
python

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

material.use_nodes = True : Habilita el uso de nodos para el material (necesario para el


nodo Principled BSDF).

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

Verified Orgs 2. Propiedades para colores ( FloatVectorProperty con subtype='COLOR' )

Profile Concepto: Propiedades para colores

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

Post al usuario seleccionar un color en formato RGB (rojo, verde, azul).

Definir una propiedad de color

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

Explore name : Nombre visible en la interfaz (por ejemplo, "Color").

description : Tooltip para el control.


Notifications
default : Color inicial en formato RGB (tres valores entre 0.0 y 1.0).
Messages min y max : Límites para cada componente RGB.

Grok subtype='COLOR' : Indica que la propiedad es un color, mostrando un selector de color en


la interfaz.
Lists
Usar la propiedad en el operador
Bookmarks En el operador CUBO_OT_generate_cube , usaremos [Link].cube_color para obtener el
color seleccionado y aplicarlo al material.
Jobs

Para principiantes en Python


Communities
Un FloatVectorProperty con subtype='COLOR' es como una variable que almacena tres
Premium números (para rojo, verde y azul), pero Blender la muestra como un selector de color
interactivo. Es similar a un FloatVectorProperty para rotación, pero con una interfaz
Verified Orgs
específica para colores.

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.

3. Crear un operador para eliminar cubos específicos


Kaidan
@KaidanCrown
Concepto: Eliminar objetos en Blender
[Link] 81/93
28/7/25, 6:21 p.m. Grok / X

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] .

Messages Ejemplo de código:

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'}

def execute(self, context):


Jobs # Deseleccionar todos los objetos
[Link].select_all(action='DESELECT')
# Seleccionar solo los cubos (objetos de tipo MESH)
Communities for obj in [Link]:
if [Link] == 'MESH' and "Cube" in [Link]:
obj.select_set(True)
Premium # Eliminar los objetos seleccionados
[Link]()

Verified Orgs [Link]({'INFO'}, "Cubos eliminados")

python return {'FINISHED'}

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.).

obj.select_set(True) : Selecciona el objeto.

[Link]() : Elimina los objetos seleccionados.

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.

Premium Pasos para empaquetar

Verified Orgs Crea una carpeta con el nombre del add-on (por ejemplo, cubo_magico ).

Coloca el archivo cubo_magico.py dentro de la carpeta.


Profile
Comprime la carpeta en un archivo .zip (por ejemplo, cubo_magico.zip ).

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

Empaquetar el add-on es como empaquetar un regalo: colocas el archivo Python en una


carpeta (la caja) y la comprimes en un .zip (envuelves la caja). Luego, el usuario puede abrir
el regalo (instalar el .zip ) en Blender.
Home

Explore

Notifications
5. Actividad práctica: Implementar la propiedad de color, el operador de
Messages eliminación y empaquetar el add-on

Grok Objetivo

Completar el add-on "Cubo Mágico" añadiendo:


Lists
Una propiedad para el color del cubo.
Bookmarks
Un operador para eliminar todos los cubos.

Jobs Empaquetar el add-on en un archivo .zip .

Communities Instrucciones paso a paso

Crear el archivo del add-on:


Premium
Abre Blender y ve al Text Editor .
Verified Orgs
Haz clic en New y pega el siguiente código (una versión final del add-on):

Profile
bl_info = {

More "name": "Cubo Mágico",


"author": "Tu Nombre",
"version": (1, 0),
"blender": (3, 0, 0),
Post "location": "View3D > N-Panel > Cubo Mágico",
"description": "Un add-on para generar cubos personalizados",
"category": "Add Mesh",
}

import bpy
import random

Kaidan # Funciones de actualización


@KaidanCrown def update_cube_size(self, context):
print(f"Tamaño actualizado: {self.cube_size}")

[Link] 84/93
28/7/25, 6:21 p.m. Grok / X

def update_cube_rotation(self, context):


print(f"Rotación actualizada: {self.cube_rotation}")

Home def update_cube_color(self, context):


print(f"Color actualizado: {self.cube_color}")

Explore # Operador para generar cubo


class CUBO_OT_generate_cube([Link]):
bl_idname = "cubo.generate_cube"
Notifications bl_label = "Generar Cubo Mágico"
bl_description = "Crea un cubo con las propiedades especificadas"
bl_options = {'REGISTER', 'UNDO'}
Messages
def execute(self, context):
size = [Link].cube_size
Grok rotation = [Link].cube_rotation
color = [Link].cube_color
x = [Link](-5, 5)
Lists y = [Link](-5, 5)
z = [Link](-5, 5)

Bookmarks location = (x, y, z)


# Crear cubo
[Link].primitive_cube_add(size=size, location=location, rotation=rotation)
Jobs # Asignar material
obj = [Link]
material = [Link](name="CuboMaterial")
Communities material.use_nodes = True
principled = material.node_tree.[Link]("Principled BSDF")
[Link]["Base Color"].default_value = (color[0], color[1], color[2], 1.0)
Premium [Link](material)
[Link]({'INFO'}, f"¡Cubo creado! Tamaño: {size}, Rotación: {rotation}, Posición: {
return {'FINISHED'}
Verified Orgs
# Operador para resetear
class CUBO_OT_reset([Link]):
Profile bl_idname = "[Link]"
bl_label = "Resetear Propiedades"
bl_description = "Restaura los valores por defecto"
More bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


Post [Link].cube_size = 2.0
[Link].cube_rotation = (0.0, 0.0, 0.0)
[Link].cube_color = (1.0, 1.0, 1.0)
[Link]({'INFO'}, "Propiedades reseteadas")
return {'FINISHED'}

# Operador para eliminar cubos


class CUBO_OT_delete_cubes([Link]):
Kaidan bl_idname = "cubo.delete_cubes"
@KaidanCrown bl_label = "Eliminar Cubos"
bl_description = "Elimina todos los cubos en la escena"

[Link] 85/93
28/7/25, 6:21 p.m. Grok / X
bl_options = {'REGISTER', 'UNDO'}

def execute(self, context):


[Link].select_all(action='DESELECT')

Home for obj in [Link]:


if [Link] == 'MESH' and "Cube" in [Link]:
obj.select_set(True)
Explore [Link]()
[Link]({'INFO'}, "Cubos eliminados")
return {'FINISHED'}
Notifications
# Panel
class CUBO_PT_panel([Link]):
Messages bl_label = "Cubo Mágico"
bl_idname = "CUBO_PT_panel"
bl_space_type = 'VIEW_3D'
Grok bl_region_type = 'UI'
bl_category = "Cubo Mágico"
bl_context = "objectmode"
Lists
def draw(self, context):

Bookmarks layout = [Link]


scene = [Link]
[Link](scene, "cube_size")
Jobs [Link](scene, "cube_rotation")
[Link](scene, "cube_color")
[Link]("cubo.generate_cube")
Communities [Link]("[Link]")
[Link]("cubo.delete_cubes")

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")

Bookmarks if __name__ == "__main__":


python
register()
Jobs
Guarda el archivo como cubo_magico.py .
Communities
Explicación de las nuevas partes del código:
Premium
Propiedad de color:

Verified Orgs Añadida [Link].cube_color como FloatVectorProperty con


subtype='COLOR' .
Profile
Incluye una función de actualización update_cube_color .

More Operador CUBO_OT_generate_cube :

Ahora crea un material y asigna el color de [Link].cube_color .


Post
El color se aplica al nodo Principled BSDF con formato RGBA (usando alfa=1.0
para opacidad completa).

Operador CUBO_OT_reset :

Actualizado para resetear también cube_color a (1.0, 1.0, 1.0) (blanco).


Kaidan
@KaidanCrown
Operador CUBO_OT_delete_cubes :

[Link] 87/93
28/7/25, 6:21 p.m. Grok / X

Selecciona y elimina objetos de tipo 'MESH' con "Cube" en su nombre.

Panel:

Home Añadido [Link](scene, "cube_color") para mostrar el selector de color.

Explore Añadido [Link]("cubo.delete_cubes") para el botón de eliminación.

Registro:
Notifications
La lista classes incluye CUBO_OT_delete_cubes .
Messages Se registra y desregistra la nueva propiedad cube_color .

Grok Instalar el add-on:

Ve a Edit > Preferences > Add-ons .


Lists
Haz clic en Install y selecciona cubo_magico.py .
Bookmarks Busca "Cubo Mágico" en la lista de add-ons y actívalo.

Jobs Verifica que el mensaje "Add-on registrado" aparece en la consola (Windows) o


ventana Info (Mac/Linux).
Communities
Probar el panel:

Premium En la vista 3D, asegúrate de estar en modo Objeto (selecciona "Object Mode").

Presiona N para abrir el N-Panel.


Verified Orgs
Busca la pestaña "Cubo Mágico".
Profile Deberías ver:

More Un slider para "Tamaño".

Campos para "Rotación" (X, Y, Z).


Post
Un selector de color para "Color" (inicialmente blanco).

Botones para "Generar Cubo Mágico", "Resetear Propiedades" y "Eliminar


Cubos".

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:

Los cubos aparecen en posiciones aleatorias (-5, 5).


Home Los cubos tienen tamaño 3.0, rotación de 45 grados en X y color rojo.

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".

Lists Haz clic en "Eliminar Cubos" y verifica que:

Todos los cubos desaparecen (otros objetos, como cámaras, permanecen).


Bookmarks
Un mensaje aparece: "Cubos eliminados".
Jobs
Prueba deshacer las acciones con Ctrl+Z para confirmar que UNDO funciona.

Communities Empaquetar el add-on:

Crea una carpeta llamada cubo_magico .


Premium
Mueve cubo_magico.py a esa carpeta.
Verified Orgs
Comprime la carpeta en cubo_magico.zip usando tu sistema operativo (por ejemplo,
clic derecho > "Comprimir" en Windows).
Profile
En Blender, ve a Edit > Preferences > Add-ons > Install , selecciona
More cubo_magico.zip y actívalo.

Verifica que el add-on funciona igual que antes.


Post
Depuración:

Si el panel no aparece:

Asegúrate de estar en modo Objeto ( bl_context = "objectmode" ).

Kaidan Verifica que el N-Panel está abierto (presiona N ).


@KaidanCrown
Si los colores no se aplican:

[Link] 89/93
28/7/25, 6:21 p.m. Grok / X

Confirma que material.use_nodes = True está en el operador.

Revisa que cube_color se pasa correctamente al material.

Home Si los cubos no se eliminan:

Explore Verifica que el operador CUBO_OT_delete_cubes selecciona correctamente los


objetos con "Cube" in [Link] .
Notifications
Si el .zip no se instala, asegúrate de que la carpeta contiene el archivo .py
correcto.
Messages
Prueba adicional:
Grok
Cambia el color por defecto de cube_color a azul (0.0, 0.0, 1.0) y verifica que los

Lists cubos se generan azules inicialmente.

Modifica el operador CUBO_OT_delete_cubes para mostrar cuántos cubos se


Bookmarks eliminaron:

Jobs
count = sum(1 for obj in [Link] if [Link] == 'MESH' and "Cube" in [Link])
[Link]({'INFO'}, f"{count} cubos eliminados")
Communities python

Premium Resultado esperado

Verified Orgs Un add-on completo con:

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.

Capacidad para resetear propiedades y eliminar todos los cubos.


Post
Un archivo .zip listo para distribuir.

Kaidan 6. Cierre y próximos pasos


@KaidanCrown

[Link] 90/93
28/7/25, 6:21 p.m. Grok / X

Resumen

En esta lección:

Home Aprendiste a crear y asignar materiales con [Link] .

Implementaste una propiedad de color con FloatVectorProperty y subtype='COLOR' .


Explore
Creaste un operador para eliminar cubos específicos.
Notifications
Empaquetaste el add-on en un archivo .zip para distribució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).

Communities Implementar un sistema para limitar el número de cubos generados.

Agregar controles avanzados, como un deslizador para el rango de posiciones


Premium
aleatorias.

Verified Orgs Publicar tu add-on en plataformas como GitHub o el foro de Blender.

Profile Aprender más sobre la API de Blender para crear add-ons más complejos.

More Tarea para casa

Modifica el operador CUBO_OT_generate_cube para generar esferas en lugar de cubos


Post usando [Link].primitive_ico_sphere_add .

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

Lee sobre materiales en la Documentación de la API de Blender para explorar opciones


avanzadas, como texturas o brillo.

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

También podría gustarte