Asignar maxscript a un botón dentro del atributer holder

nedned7 - 24/01/2013 19:07
Como puedo asignar Maxscript a un botón dentro del atributer holder? Quería que un botón creado en un atributo holder tuviera una instrucción ara que todos los objetos fueran a cero. Eso era todo a ver si alguien puede ayudarme. Gracias.

La instrucción es la siguiente:
Macros, run animation tools transformtozero.

Now my cuestión is how can i create an custom parameter like button under my controller parameters or in attribute holder that run a simple code/script for me like transform todo zero script: macros, run animation tools transformtozero.


🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #177731



-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #177731

LaUrA-28 - 04/01/2026 11:00
Para asignar un script de MaxScript a un botón dentro de un Attribute Holder, debes crear un control de tipo botón en tu definición de atributos y asignarle un manejador (handler) que ejecute el código. La forma más directa y actual sigue siendo usando el Attribute Holder y el Rollout de script.

Primero, crea un nuevo script en el Editor de Scripts de 3ds Max. Define un Rollout que contenga el botón. Luego, convierte ese Rollout en una definición de atributo que puedas asignar a cualquier objeto.

Aquí tienes el código de ejemplo. Este script crea un atributo personalizado con un botón que, al presionarlo, ejecuta el macro para llevar las transformaciones de todos los objetos seleccionados a cero. Si quieres que afecte a todos los objetos de la escena, puedes modificar el código.

Copia y pega este bloque en el Editor de MaxScript:

utility atributoBoton "Herramienta Cero"
(
button btnCero "Transformar a Cero" width:140 height:30

on btnCero pressed do
(
macros.run "Animation Tools" "TransformToZero"
)
)

Para usarlo de manera permanente y asignarlo a un objeto como Attribute Holder, necesitas crear una definición de atributos. Usa el siguiente código:

(
-- Definición de los atributos
atributo_def = attributes transformACero
(
parameters main rollout:params
(
)

rollout params "Transformar a Cero"
(
button btnCero "Transformar Selección a Cero" width:160 height:30

on btnCero pressed do
(
-- Ejecuta el macro. Asegúrate de que el macro 'TransformToZero' existe.
-- Esta versión afecta a los objetos seleccionados.
if selection.count > 0 then
(
macros.run "Animation Tools" "TransformToZero"
)
else
(
messageBox "Selecciona al menos un objeto." title:"Sin selección"
)
)
)
)

-- Añade este atributo al objeto seleccionado
if selection.count == 1 then
(
custAttributes.add $ atributo_def
)
else
(
messageBox "Selecciona un solo objeto para añadir el atributo." title:"Selección requerida"
)
)

Para ejecutarlo, selecciona el objeto que quieras que actúe como controlador (por ejemplo, un Point Helper), ejecuta el script y el atributo aparecerá en su panel de modificación. Al presionar el botón, ejecutará el macro.

Si el macro "TransformToZero" no está disponible en tu sistema, puedes reemplazar la acción del botón por el código directo que ponga a cero las transformaciones. Sustituye la línea dentro de 'on btnCero pressed do' por este código:

for obj in selection do
(
obj.pos = [0,0,0]
obj.rotation = (quat 0 0 0 1)
obj.scale = [1,1,1]
)

Para hacerlo más robusto, puedes guardar este script como un archivo (.ms) y cargarlo cuando lo necesites, o instalarlo como una herramienta personalizada en tu interfaz de 3ds Max. La metodología sigue siendo válida para versiones actuales de 3ds Max.