-
Custom properties
Hola buenas. ¿Alguien sabe si puedo usar un custom property para mover un cubo, por ejemplo, sin uso de drivers? Mediante script?
Sería algo como esto, pero en el panel properties:
import Bpy.
Class addgem(Bpy, types. Operator):
Bl_idname = Mesh, primitivegemadd.
Bl_label = addgem.
Bl_description = create an offset Faceted gem.
Bl_options = {register, undo}.
Segments = Bpy, props. Floatproperty(name=segments.
Description=longitudial segmentation.
Min=0.0.
Max=1.0.
Default=0.8).
Def execute (self, context):
Bpy, data, objects[Cube].location.x = self, segments.
Return {finished}.
Bpy, utils, register_class(addgem).
Run script- En 3dview, space - Addgem y en la parte izquierda del 3dview crea un slider que mueve el cubo.
Se podría hacer esto en el panel properties? Gracias.
-
Sí, puedes crear custom properties en el panel Properties para controlar objetos sin drivers, usando Python. La forma actual y recomendada es crear una propiedad personalizada en un objeto, escena o colección, y luego usar un panel (UI Panel) en el área de Properties para mostrar un control que la modifique. Para que el cambio en la propiedad actualice la ubicación del cubo en tiempo real, necesitas un manejador de actualización (update handler).
Aquí tienes un ejemplo completo que hace lo que describes. Este script registra una propiedad personalizada en los objetos de tipo malla y un panel en la pestaña Object del panel Properties. Al cambiar el valor con el deslizador, el cubo se moverá en el eje X.
Primero, define la propiedad personalizada. Esto se hace típicamente en el objeto bpy.types.Scene o bpy.types.Object para que sea accesible. Luego, crea un panel para mostrarla. Finalmente, escribe una función que se ejecute cada vez que la propiedad cambie (update) para aplicar el movimiento.
El código actualizado para versiones recientes de Blender sería similar a este:
import bpy
def update_location(self, context):
obj = context.object
if obj and obj.type == 'MESH' and obj.get("mi_desplazamiento_x") is not None:
obj.location.x = obj.mi_desplazamiento_x
bpy.types.Object.mi_desplazamiento_x = bpy.props.FloatProperty(
name="Desplazamiento X",
description="Mueve el objeto en el eje X",
default=0.0,
update=update_location
)
class MIPANEL_PT_panel_propiedades(bpy.types.Panel):
bl_label = "Mi Panel de Control"
bl_idname = "MIPANEL_PT_panel_propiedades"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object"
def draw(self, context):
layout = self.layout
obj = context.object
if obj and obj.type == 'MESH':
layout.prop(obj, "mi_desplazamiento_x")
else:
layout.label(text="Selecciona un objeto de malla")
def register():
bpy.utils.register_class(MIPANEL_PT_panel_propieda des)
def unregister():
bpy.utils.unregister_class(MIPANEL_PT_panel_propie dades)
if __name__ == "__main__":
register()
Para usar este script, ejecútalo en el Editor de Textos de Blender. Luego, selecciona tu cubo (que debe ser un objeto de malla). Ve a la ventana de Properties, a la pestaña Object (el icono de cubo). Allí verás un nuevo panel llamado Mi Panel de Control con un control deslizante Desplazamiento X. Al moverlo, el cubo cambiará su posición en X.
La clave está en el parámetro update de la propiedad FloatProperty. Allí se especifica la función update_location que se llama automáticamente cada vez que el valor de la propiedad cambia, moviendo el objeto. Esto evita por completo el uso de drivers.
Recuerda que si quieres que esta propiedad esté disponible siempre, deberías guardar el script como un addon e instalarlo. Si solo es para una sesión, ejecutarlo en el editor de textos es suficiente.