Gracias Gracias:  0
Página 5 de 5 PrimerPrimer 12345
Resultados 61 al 68 de 68

Tema: script en max

  1. #61
    Burninating albion Avatar de bealobo
    Fecha de ingreso
    Dec 2004
    Ubicación
    Teatown
    Mensajes
    1,868

    Re: script en max

    Yo lo estaba haciendo mucho más complicado...

    basandome en esto:

    bleedingObjs = bleedingObj.items
    bleedingList = (bleedingObj.selection as array)
    indexBleed = bleedingList[1]
    print bleedingObjs[indexBleed]

    y ahora me disponía a sustituir las dos últimas líneas por expresiones para recorrer las listas auténticas...

    lo que es saber...

    me postro ante tí de nuevo HalfVector; no me queda otra
    E moet roeien met de riemen die je hebt.

  2. #62
    El cabreador
    Fecha de ingreso
    Oct 2002
    Ubicación
    S.Compostela.
    Mensajes
    8,790

    Re: script en max

    A mi siempre me pasa, hago una tonteria, 10 líneas de codigo, viene un programador del studio yy hace lo mismo con una sola línea y en menos de 30 seg.. vamos sin sentarse..

    Saludos.

  3. #63
    Burninating albion Avatar de bealobo
    Fecha de ingreso
    Dec 2004
    Ubicación
    Teatown
    Mensajes
    1,868

    Re: script en max

    Hola de nuevo!

    Bueno, el curso ya terminó con mi script a mitad (no me extraña, para un primer script me he metido en una buena).

    Estoy muy liada con mil cosas pero lo voy a terminar. No se cuando pero bueno.
    He estado pensando un poco y una de las cosas nuevas que no había pensado es que el sistema de partículas debe estar linkado al objeto que sangra, por el tema de que se pueda mover. Imagino que tendré que linkarlo al polígono más cercano, manteniendo la normal como dirección de sangrado.
    Los hachas del maxscript, ¿se podría conseguir o hay alguna limitación del lenguaje?

    Otro de los problemas más gordos que tengo ahora mismo es que no se cómo hacer para leer un input "escrito por el usuario" (¿eso se llama parsing?) y sobre todo hacer control de errores.
    Cualquier tutorial o referencia me vendría bien, yo voy a ir mirando código de aquí y alla por si encuentro alguna pista de cómo se hace (de nuevo la ayuda de max... es que flipo).
    E moet roeien met de riemen die je hebt.

  4. #64
    H = E + L
    Fecha de ingreso
    Mar 2004
    Ubicación
    Entre dos vectores
    Mensajes
    870

    Re: script en max

    Cita Iniciado por bealobo
    He estado pensando un poco y una de las cosas nuevas que no había pensado es que el sistema de partículas debe estar linkado al objeto que sangra, por el tema de que se pueda mover. Imagino que tendré que linkarlo al polígono más cercano, manteniendo la normal como dirección de sangrado.
    Si el objeto no sufre deformaciones (modificador skin, bend, etc) debería bastar con emparentar el sistema de partículas con el objeto con el que colisionó):

    Código:
    pflowObject.parent = targetObject
    Si hay deformaciones, la cosa sería más complicada.

    Cita Iniciado por bealobo
    Otro de los problemas más gordos que tengo ahora mismo es que no se cómo hacer para leer un input "escrito por el usuario" (¿eso se llama parsing?)
    Me imagino que te refieres a presentar al usuario un cuadro de diálogo donde introduzca información.

    En ese caso, hace un tiempo cree un diálogo de ese tipo y lo encapsulé en una estructura:
    Código:
    struct InputDialog (
    	text = undefined,
    	dlgValue = undefined,
    	dlgTitle = "Input",
    	dlgMessage = "Enter value:",
    	
    	fn show message title:"Input" =
    	(
    		if title != undefined do dlgTitle = title
    		if message != undefined do dlgMessage = message
    
    		rollout roInputDlg dlgTitle width:264 height:83
    		(
    			local okPressed = false
    
    			label lblMessage "Enter Value:" pos:[8,8] width:252 height:16
    			edittext txtInput "" pos:[4,24] width:255 height:17
    			button btnOk "OK" pos:[104,51] width:70 height:20
    			button btnCancel "Cancel" pos:[184,51] width:70 height:20
    	
    			on roInputDlg open do (
    				lblMessage.text = dlgMessage
    			)
    			on roInputDlg close do (
    				if not okPressed do dlgValue = #cancel
    			)
    			on btnOk pressed do (
    				if txtInput.text != "" do (
    					dlgValue = #ok
    					okPressed = true
    					text = txtInput.text
    					destroyDialog roInputDlg
    				)
    			)
    			on btnCancel pressed do (
    				dlgValue = #cancel
    				okPressed = false
    				destroyDialog roInputDlg
    			)
    		)
    
    		createDialog roInputDlg modal:true
    			
    		return dlgValue
    	)
    )
    Y luego para usarlo sería:

    Código:
    input = InputDialog()
    if (input.show "Your name:") == #OK do
    	messageBox ("Your name is = " + input.text)
    Por otra parte, si además quieres permitir al usuario que introduzca expresiones, lo que tendrás que hacer es utilizar la función execute:
    Código:
    input = InputDialog()
    if (input.show "Enter value:") == #OK do
    	messageBox ("value = " + (execute input.text))
    Así, si el usuario introduce la expresión 3*2, execute devolvera 6.

    Cita Iniciado por bealobo
    y sobre todo hacer control de errores.
    Pues aparte de los if/then/else, también suelo utilizar try/catch (es como en C++) para bloques de código que pueden petar a mitad de ejecución (errores en tiempo de ejecución) y no habría forma de saberlo de otra forma. Por ejemplo:

    Código:
    try ( delete $Point01 ) catch ( print "Ese objeto no existe\n" )
    Aunque este caso en concreto se podría solucionar con un "if":

    Código:
    if $Point01 == undefined do print "Ese objeto no existe\n"
    Busca en la referencia de MAXScript por "try expression". Ahí también encontraras la función "throw" que te permite generar tus propios errores en tiempo de ejecución.

    Saludos.
    Última edición por HalfVector; 15-08-2006 a las 22:54

  5. #65
    H = E + L
    Fecha de ingreso
    Mar 2004
    Ubicación
    Entre dos vectores
    Mensajes
    870

    Re: script en max

    Me he dado cuenta de que no retornaba #Cancel al cerrar el diálogo con el botón estándar (el de la esquina superior derecha) de Windows. Lo he corregido en el mensaje de arriba.

    Saludos.

    PD: Bueno, pues parece que hay algún que otro problema más con el código que he puesto. No sé cómo en su día lo dí por bueno. Cuando pueda lo arreglo.
    PD2: ok, creo que ya está arreglado.
    Última edición por HalfVector; 15-08-2006 a las 22:52

  6. #66
    Burninating albion Avatar de bealobo
    Fecha de ingreso
    Dec 2004
    Ubicación
    Teatown
    Mensajes
    1,868

    Re: script en max

    Muchas gracias Half!

    esta tarde haré unas pruebecitas. El input del usuario es más complejo porque tiene que meter rangos de frames y frames sueltos (como el el script de slime). Probaré un poco y leeré tu código a ver cómo lo hago.

    :D
    E moet roeien met de riemen die je hebt.

  7. #67
    H = E + L
    Fecha de ingreso
    Mar 2004
    Ubicación
    Entre dos vectores
    Mensajes
    870

    Re: script en max

    Cita Iniciado por bealobo
    El input del usuario es más complejo porque tiene que meter rangos de frames y frames sueltos (como el el script de slime).
    Ah, entonces sí, es lo que decías, hay que crear un pequeño parser. Acabo de crear uno. No esta muy probado pero aparentemente funciona.

    Código:
    fn parseFrames strFrames = (
    	-- Array donde se almacenaran los frames como enteros
    	local frames = #()
    	-- Extraemos los frames que están separados por comas
    	local tokens = filterString strFrames ","
    
    	-- Si no hay frames, salimos	
    	if tokens.count == 0 do (
    		return undefined
    	)
    
    	-- Recorremos todos los tokens (frames, ya sean sueltos o en forma de intervalos)
    	for token in tokens do (
    		-- Si no encontramos el carácter '-' significa que es un frame suelto
    		if (findString token "-") == undefined then (
    			-- Nos aseguramos que el frame no exista ya en el array de frames
    			if (findItem frames (token as Integer)) == 0 do (
    				-- REPLACEamos el frame en el array de frames
    				append frames (token as Integer)
    			)
    		)
    		-- Estamos en el caso de un intervalo de frames
    		else (
    			-- Troceamos la cadena, de forma que tendremos dos frames
    			local interval = filterString token "-"
    
    			-- Si no tenemos frames o tenemos más de dos frames, salimos
    			if interval.count == 0 or interval.count > 2 do (
    				return undefined
    			)
    			
    			-- Para simplificar, almacenamos el frame inicial y final
    			local startFrame = interval[1] as Integer
    			local endFrame = interval[2] as Integer
    
    			-- No permitimos que el frame final sea menor que el inicial
    			if startFrame > endFrame then (
    				return undefined
    			)
    			-- Si el frame inicial y final son iguales, replaceamos uno de ellos
    			else if startFrame == endFrame then (
    				-- Nos aseguramos que el frame no exista ya en el array de frames
    				if (findItem frames startFrame) == 0 do (
    					-- REPLACEamos el frame en el array de frames
    					append frames startFrame
    				)
    			)
    			-- Si llegamos aquí es que tenemos un intervalo valido
    			else (
    				-- Ahora vamos a recorrer el rango y a generar los frames intermedios
    				for frame = startFrame to endFrame do (
    					-- Nos aseguramos que el frame no exista ya en el array de frames
    					if (findItem frames frame) == 0 do (
    						-- REPLACEamos el frame en el array de frames
    						append frames frame
    					)
    				)
    			)
    		)
    	)
    
    	-- Ordenamos el array de frames	
    	sort frames
    	
    	-- Retornamos el array de frames
    	return frames
    )
    Su funcionamiento:

    Código:
    parseFrames "2,4,7-10,12-16"
    En ese caso la función te devolvera (de forma ordenada) un array de enteros con todos los frames:

    Código:
    #(2, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16)
    Me imagino que más o menos es eso a lo que te referías...

    Saludos.
    Última edición por HalfVector; 16-08-2006 a las 11:36

  8. #68
    Burninating albion Avatar de bealobo
    Fecha de ingreso
    Dec 2004
    Ubicación
    Teatown
    Mensajes
    1,868

    Re: script en max

    Hola,

    no,no he vuelto. No estoy programando esto por ahora, lo retomaré en un tiempito que estoy liada. Lo que pasa es que a raíz del hilo de cgtalk del que hablaba Miguel he puesto una captura de pantalla allí y qué menos que ponerla aquí también.
    Como veis esta bastante a medías jajjajaj
    Pero tengamos en cuenta mi experiencia nula con el maxscript y que me he puesto a programar este año.
    Piedad!

    :D
    Miniaturas adjuntadas Miniaturas adjuntadas script en max-ui_03.jpg  
    E moet roeien met de riemen die je hebt.

Página 5 de 5 PrimerPrimer 12345

Temas similares

  1. Respuestas: 2
    Último mensaje: 07-05-2015, 23:08
  2. Blender Uso del script BMG
    Por 3dpoder en el foro Blender Art Magazine nº 1
    Respuestas: 7
    Último mensaje: 30-07-2013, 12:38
  3. script
    Por minato en el foro Programación y Scripts
    Respuestas: 9
    Último mensaje: 20-07-2010, 23:17
  4. script
    Por altair_117 en el foro Modelado
    Respuestas: 2
    Último mensaje: 18-04-2009, 03:53
  5. max script
    Por Thule en el foro Modelado
    Respuestas: 5
    Último mensaje: 13-02-2005, 18:00

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