Gracias Gracias:  0
Resultados 1 al 11 de 11

Tema: [MaxScript] Re-decalarar funcion dentro de botones de forma dinamica

  1. #1
    pythonized... Avatar de Cesar Saez
    Fecha de ingreso
    Mar 2004
    Ubicación
    Granada, España
    Mensajes
    3,765

    3dsmax [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Hola, estoy haciendo un script que hace una serie de acciones y como resultado final agrega ciertos controles a un Attribute Holder, entre esos controles hay varios botones que comparten funciones entre si, estas funciones están declaradas en el script generador pero para que luego funcionen con la UI necesito declararla en cada botón y ahí reside mi inquietud, se puede declarar esa función pero sin reescribirla/copiarla manualmente en cada botón?

    No es el caso pero quizás sirve para explicar lo que me gustaría lograr, en XSI se pasan las funciones para los botones como string (toda la declaración) y existen funciones como el toString (JScript) que justamente retorna la declaración de una función como string sin necesidad de reescribirla, en el fondo queda reescrita pero es dinamico. Busco algo como eso pero bajo el contexto de MaxScript, existe alguna forma?

    Pensé que una alternativa sería usar un macroscript para cada función compartida, en teoría debería funcionar, pero me gustaría que para usar el resultado final del script no fuera necesario tener instalado nada extra en max, son funciones simples y no tendría sentido.

    Gracias

  2. #2
    soy un emigrante Avatar de Pit [reloaded]
    Fecha de ingreso
    Jun 2005
    Ubicación
    viendo bob esponja
    Mensajes
    16,804

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    cesar, tienes todo mi respeto y admiración

    porque no he entendido nada

    y no es porque no te expliques bien


  3. #3
    reconvertido Avatar de ikerCLoN
    Fecha de ingreso
    Apr 2002
    Ubicación
    Los Angeles, USA
    Mensajes
    14,911

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Así a bote pronto, se me ocurre que tal vez puedas usar la función 'fileIn()' en cada botón, y que los comandos de cada botón apunten a ese archivo. Es decir, tener un archivo común con todas las funciones necesarias (en un 'struct', por ejemplo), y que cada botón, después de llamar a ese archivo, ejecute lo que tenga que ejecutar...

    ... pero esto ya implica que necesites dicho archivo en la máquina. ¿Qué te traes entre manos?
    character TD @ Walt Disney Animation Studios

    mi curso de rigging facial :: https://www.domestika.org/en/courses...je-3d/ikerclon
    blog :: www.somosposmodernos.com
    twitter :: www.twitter.com/soyposmoderno
    linkedIn :: www.linkedin.com/in/ikerj

  4. #4
    Senior Member Avatar de Ruramuq
    Fecha de ingreso
    Sep 2004
    Mensajes
    124

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    javascript 'toString' me parece que es como MXS 'as string', pero no sabia que se podía hacer eso con funciones en js

    y si quieres interpretar un string como codigo, seria excute()

    también podrías guardar funciones/structs en un mismo maxwrapper, y acceder a ellas usando weaque references o pathnames

    si es que entiendo correctamente

  5. #5
    pythonized... Avatar de Cesar Saez
    Fecha de ingreso
    Mar 2004
    Ubicación
    Granada, España
    Mensajes
    3,765

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Muchas gracias por las respuestas, esto se pone interesante

    Cita Iniciado por ikerCLoN Ver mensaje
    Así a bote pronto, se me ocurre que tal vez puedas usar la función 'fileIn()' en cada botón, y que los comandos de cada botón apunten a ese archivo. Es decir, tener un archivo común con todas las funciones necesarias (en un 'struct', por ejemplo), y que cada botón, después de llamar a ese archivo, ejecute lo que tenga que ejecutar...
    No es mala idea, no sabía de esa función y nunca me he puesto con el strut, lo voy a investigar! Si se pudiera llamar sólo ciertas funciones del archivo "importado" (tipo python) podría funcionar, gracias Iker

    Cita Iniciado por •Ruramuq• Ver mensaje
    javascript 'toString' me parece que es como MXS 'as string', pero no sabia que se podía hacer eso con funciones en js

    y si quieres interpretar un string como codigo, seria excute()

    también podrías guardar funciones/structs en un mismo maxwrapper, y acceder a ellas usando weaque references o pathnames

    si es que entiendo correctamente
    Hey, no es mala idea, a ver si entiendo bien:

    Creo un custom attribute y en uno de los parámetros asigno un float script donde guardo mi función, luego con un 'execute controller.script' podría cargar la función desde el botón, me gusta la idea

    Sólo me queda una duda, existe forma de pasar toda la declaración de la función como string sin reescribirla (por el tema de los caracteres especiales y tal)? porque el 'as String' hasta ahora sólo he logrado que me exprese el retorno de la función o bien el nombre de la misma.

    De todas formas, escribir la función 1 vez como string en lugar de copiarla por doquier me parece que se acerca mucho a lo que necesito, gracias!

    _____________________________

    EDITO: A ver si con un ejemplo nos entendemos mejor

    Supongamos tengo la función HolaMundo declarada de la siguiente forma en el script generador.
    Código:
    fn HolaMundo =
    (
     print "Hola Mundo!"
    )
    Existe alguna función que retorne la declaración de la función como un string para no tener que escribirla manualmente? algo así:
    Código:
    "fn HolaMundo = \n"+\
    "( \n"+\
    " print \"Hola Mundo!\" \n" +\
    ")"
    Última edición por Cesar Saez; 16-12-2008 a las 16:35

  6. #6
    Senior Member Avatar de Ruramuq
    Fecha de ingreso
    Sep 2004
    Mensajes
    124

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    según te entiendo, quieres que tus funciones estén dentro de max, pero no quieres copiarlas una y otra vez..
    Código:
    CAT = attributes test
    -- 	redefine:CAT
    (
    	fn moder x y=(
    		val = mod x y
    		return val
    	)
    )
    custAttributes.add $ CAT
    › Es decir escribes adentro todas tus funciones/structs
    › Luego accedes a ellas así :


    $Box02.moder 7. 5.2

    Código:
    CAT = attributes saveme
    -- 	redefine:CAT
    (
    	local doit
    	parameters main rollout:mad
    	(
    		b1 type:#boolean UI:ub1
    	)
    	rollout mad "mad"
    	(
    		button ub1 "press" type:#boolean
    		
    		on ub1 pressed do (
    			doit = ($Box02.moder 7. 5.2)
    			doit += doit
    			format "the val is: %\n" doit
    		)
    	)
    )
    custAttributes.add $ CAT
    EDIT: leyento tu ejemplo, pues no conozco de nada que retorne un string de esa manera.. lo único es escribir una función que recree el rollout dinamicamente así :

    (
    test = stringStream ""
    format "rollout test\n" to:test
    format "(\n\t\n)\n" to:test
    (test as string)
    )

    en cgtalk, es que vi eso de los stringstream para formatear el string, y luego ejecutarlo usando execute()
    Última edición por Ruramuq; 16-12-2008 a las 17:01

  7. #7
    pythonized... Avatar de Cesar Saez
    Fecha de ingreso
    Mar 2004
    Ubicación
    Granada, España
    Mensajes
    3,765

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Cita Iniciado por •Ruramuq• Ver mensaje
    según te entiendo, quieres que tus funciones estén dentro de max, pero no quieres copiarlas una y otra vez..
    Código:
    CAT = attributes test
    -- 	redefine:CAT
    (
    	fn moder x y=(
    		val = mod x y
    		return val
    	)
    )
    custAttributes.add $  CAT
    › Es decir escribes adentro todas tus funciones/structs
    › Luego accedes a ellas así :
    $Box02.moder 7. 5.2
    Que crack! no sabía que podía definir funciones directamente dentro de un custom attributes, muchas gracias!

  8. #8
    reconvertido Avatar de ikerCLoN
    Fecha de ingreso
    Apr 2002
    Ubicación
    Los Angeles, USA
    Mensajes
    14,911

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Sólo por añadir más información al tema, y complementando lo que cuenta Ruramuque (por cierto, ¡gracias por la info!), puedes definir algo como esto:

    Código:
    fn test arg1 arg2 =
    (
     local str = ""
     
     str += "attributes 'attr" + arg2 + "'\n"
     str += "(\n"
     str += "parameters main rollout:main_rlt\n"
     str += "(\n"
     str += "elemento1 type:#integer ui:elemento1_spn \n"
     str += ")\n"
     str += "\n"
     str += "rollout main_rlt \"probando" + arg2 + "\"\n"
     str += "(\n"
     str += "spinner blend_spn \"valor\" type:#integer range:[0,100,50] \n"
     str += ")\n"
     str += ")\n"
     
     return (execute str)
    )
    ... y luego pasar ese código a un modificador/'baseObject' mediante:

    Código:
    custAttributes.add objeto.modificador (test arg1 arg2)
    character TD @ Walt Disney Animation Studios

    mi curso de rigging facial :: https://www.domestika.org/en/courses...je-3d/ikerclon
    blog :: www.somosposmodernos.com
    twitter :: www.twitter.com/soyposmoderno
    linkedIn :: www.linkedin.com/in/ikerj

  9. #9
    Senior Member Avatar de phoelix
    Fecha de ingreso
    May 2005
    Ubicación
    Bogotá, Colombia
    Mensajes
    321

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Cita Iniciado por Cesar Saez
    entre esos controles hay varios botones que comparten funciones entre si, estas funciones están declaradas en el script generador pero para que luego funcionen con la UI necesito declararla en cada botón y ahí reside mi inquietud
    no puedes declarar la función dentro del rollout pero afuera de los botones?
    Última edición por phoelix; 17-12-2008 a las 00:01
    Nuestro corto basado en Matrix - TRICKSTER - wip:
    thetricksterproject.blogspot.com

    website personal:
    www.joleanes.com

  10. #10
    pythonized... Avatar de Cesar Saez
    Fecha de ingreso
    Mar 2004
    Ubicación
    Granada, España
    Mensajes
    3,765

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    Cita Iniciado por phoelix Ver mensaje
    no puedes declarar la función dentro del rollout pero afuera de los botones?
    El script genera una configuración pero se ejecuta sólo una vez, luego ya queda todo montado y si la función no esta en memoria ningún botón funcionaría.

  11. #11
    Senior Member Avatar de phoelix
    Fecha de ingreso
    May 2005
    Ubicación
    Bogotá, Colombia
    Mensajes
    321

    Re: [MaxScript] Re-decalarar función dentro de botones de forma dinámica?

    si la función esta declarada dentro del rollout del custom attribute que vas a asignar, esta quedaría en memoria y disponible para todo script que se ejecute dentro de algún evento del rollout o de sus UI controls a partir del momento en el que el custom attribute sea asignado.

    de cualquier forma también puedes declararla por fuera del rollout mientras este dentro del custom attribute así como lo mostro ruramuque :D
    Última edición por phoelix; 17-12-2008 a las 03:22
    Nuestro corto basado en Matrix - TRICKSTER - wip:
    thetricksterproject.blogspot.com

    website personal:
    www.joleanes.com

Temas similares

  1. asignar Maxscript a un boton dentro del atributer Holder
    Por nedned7 en el foro Programación y Scripts
    Respuestas: 0
    Último mensaje: 24-01-2013, 20:07
  2. DUDaS: deformar un cubo y volver a su forma inicial dentro de recorrido
    Por Danicoart en el foro Animación y Rigging
    Respuestas: 4
    Último mensaje: 29-01-2012, 00:16
  3. Problemas con un maxscript dentro del plugin rayfire
    Por AIZZI en el foro Programación y Scripts
    Respuestas: 3
    Último mensaje: 21-02-2011, 17:25
  4. Comienza la diversion, botones y mas botones
    Por FRANK SOLO en el foro Todo menos Infografía
    Respuestas: 5
    Último mensaje: 17-04-2010, 17:07
  5. Musculos faciales: forma y funcion
    Por ikerCLoN en el foro Modelado
    Respuestas: 22
    Último mensaje: 21-07-2008, 13:05

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •