Buenas, tengo una duda (blender 2.5.4), si alguien pueda ayudarme. Quiero hacer que al seleccionar un objeto se imprima un texto en la consola.
import Bpy.
Def cubo ():
If Bpy, context, active_object, name == Cube:
Print (ayuda).
Cubo ().
Lo que ocurre que esto solo funciona cuando presiono el botón run script, lo que yo querría es que.
Funcionara siempre que yo seleccionara el cubo. Muchas gracias.
Para detectar la selección de un objeto en tiempo real en Blender, debes usar un manejador de eventos (handler). Tu script actual solo se ejecuta una vez. La solución moderna en Blender 3.x o superior (recomiendo actualizar de la versión 2.5) implica crear un manejador que se ejecute en cada actualización de la interfaz.
Primero, debes definir una función que compruebe la selección. Luego, debes registrar esa función para que Blender la llame periódicamente. Es importante evitar que se registre múltiples veces. Aquí tienes un ejemplo actualizado para Blender 3.x.
Necesitas crear un script de tipo addon o ejecutar este código en el editor de texto. La función se suscribirá al manejador persistent para que sobreviva entre cambios de modo.
Este código define una variable global para rastrear el objeto previamente seleccionado y así imprimir el mensaje solo cuando cambia la selección al cubo.
import bpy
selected_object_name = None
def check_selection():
global selected_object_name
context = bpy.context
if context.active_object and context.active_object.select_get():
current_name = context.active_object.name
if current_name != selected_object_name:
selected_object_name = current_name
if "Cube" in current_name:
print("ayuda")
elif selected_object_name:
selected_object_name = None
def register_handler():
unregister_handler()
bpy.app.handlers.depsgraph_update_post.append(check_selection)
def unregister_handler():
if check_selection in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.depsgraph_update_post.remove(check_selection)
Para ejecutarlo, primero llama a register_handler(). Esto hará que la función check_selection se ejecute tras cada actualización de la escena. Para detenerlo, llama a unregister_handler().
Ten en cuenta que usar depsgraph_update_post puede ser intensivo. Una alternativa más eficiente es usar operadores modal o handlers de la ventana gráfica, pero son más complejos. Este método es el más directo para tu propósito.
Recuerda que en Blender 2.5.4 la API era muy diferente y este código no funcionará. Debes actualizar a una versión estable actual como Blender 3.6 o 4.0 para usar técnicas de scripting modernas y seguras.