Lineas entre puntos autoupdatada
Mirando la ayuda de Maxscript he rescrito el script.
[html] Fn líneas p1 p2 = (t ss = splineshape pos:p1 addnewspline ss addknot ss 1 #corner #line p1 addknot ss 1 #corner #line p2 updateshape s ss )[/html].
Lo que no me sale es conseguir que al mover los puntos, la líneas siga sus posiciones en el visor. He probado con el DependsOn, pero no me sale.
Lineas entre puntos autoupdatada
Lineas entre puntos autoupdatada
A mí se me ha ocurrido esto.
Cita:
Fn líneas p1 p2 =
(Ss = splineshape pos:p1.pos addnewspline ss addknot ss 1 #corner #line p1.pos addknot ss 1 #corner #line p2.pos updateshape s t add modifier ss (skin ()) myskin = ss, modifiers[#skin] max modify mode modpanel, setcurrentobject myskin skinaddbone myskin p1 1 skinaddbone myskin p2 1 t select p1 ss t).
P1 y p2 son ahora dos nodos cualquiera, dos objetos.
Lineas entre puntos autoupdatada
También puedes utilizar un controlador de tipo point3 script:
Código:
Fn attachshapetopoints p1 p2 = (tss = splineshape pos:p1.pos taddnewspline ss taddknot ss 1 #corner #line p1.pos taddknot ss 1 #corner #line p2.pos tupdateshape ss tlocal ctrlsource = target, pues * (inverse Owner, transform) tanimatevertex ss #all tlocal ctrlp1 = point3_script() tctrlp1.addnode target p1 tctrlp1.addnode Owner ss tctrlp1.script = ctrlsource tctrlp1.update () tss[4][8][2].controller = ctrlp1 tlocal ctrlp2 = point3_script() tctrlp2.addnode target p2 tctrlp2.addnode Owner ss tctrlp2.script = ctrlsource tctrlp2.update () tss[4][8][5].controller = ctrlp2 tok.
)
Ahora en lugar de pasar a la función dos posiciones, le pasas los dos helpers que sirven como puntos de referencia. La función ya se encarga de crear el script controller. Saludos.
Lineas entre puntos autoupdatada
Está muy bien Promineo, pero igual tener que skinear la línea es un poco engorroso, no¿lo skinear Splines lo he hecho, pero para otras situación. Molaría algo más limpio. Gracias por la idea.
Lineas entre puntos autoupdatada
Ok. Gracias half. Voy a probarlo dentro de un rato, que ando algo saturado a estas horas.
Lineas entre puntos autoupdatada
Le he hecho unas cuantas modificaciones para que soporte un número de puntos arbitrario.
Código:
Fn attachshapetopoints points = (ttheshape = splineshape () taddnewspline theshape tfor i = 1 todo points, count do (t addknot theshape 1 #corner #line points[i].pos t) tupdateshape theshape tlocal ctrlsource = target, pues * (inverse Owner, transform) tanimatevertex theshape #all tfor i = 0 todo (points, count - 1) do (t local Control = point3_script() Control, addnode target points[i + 1] Control, addnode Owner theshape Control, script = ctrlsource Control, update () theshape[4][8][i * 3 + 2].controller = Control t) t- Comentar estas dos líneas si no se quiere congelar la Spline ttheshape, showfrozeningray = false tfreze theshape tok.
)
Por ejemplo, puedes hacer que se cree una Spline con todos los helpers de tipo point que tengas en la escena:
Código:
attachshapetopoints $point*
Saludos.
Posdata: he hecho que la Spline se congele para que la manipulación de los puntos sea más sencilla.
Lineas entre puntos autoupdatada
Que chulo half no sabía sobre el point3_script con esto se pueden hacer un montón de cosas.
Lineas entre puntos autoupdatada
Cita:
Que chulo half no sabía sobre el point3_script con esto se pueden hacer un montón de cosas.
Sí, lo que pasa es que, al principio me he rayado un poco porque al script controller le ponía:
Y el vértice de la Spline no seguía de forma correcta al point helper. Entonces me he acordado que el controller espera la posición en object space, es decir, el espacio relativo al sistema de coordenadas definido por la matriz de transformación del shape. De ahí que al final haga:
Código:
target, pues * (inverse Owner, transform)
Lo que hace eso es pasar la posición del punto al sistema de coordenadas del shape.
En fin, una explicación por si os preguntabais por que transformaba el punto por la inversa de la matriz de transformación del shape.
Por cierto, he modificado el script del anterior mensaje para que congele la Spline. Así la manipulación de los puntos de control es más sencilla. Saludos.
Lineas entre puntos autoupdatada
Si es que, si es que, quieras que no, half como que tiene algo de idea de script.