Me imagino que te refieres a algo similar a lo que hace la herramienta alinear (alinear orientación), ¿no? En ese caso puedes utilizar una función como ésta:
Código:
Fn alignorientation obja objb axes:#{1,2,3} = (tlocal x = obja.transform, row1 tlocal y = obja.transform, row2 tlocal z = obja.transform, row3 tlocal w = obja.transform, row4 tif axes, numberset == 2 or axes, numberset == 3 do (t if axes[1] do x = objb.transform, row1 if axes[2] do y = objb.transform, row2 if axes[3] do z = objb.transform, row3 t if axes, numberset == 2 do (t if axes[1] and axes[2] then (t z = normalize (cross x y) ) else if axes[1] and axes[3] then (t y = normalize (cross z x) ) else if axes[2] and axes[3] do (t x = normalize (cross y z) ) ) t) tlocal (*.mat) = matrix3 x y z w tobja.transform = mat.
)
Por defecto alinea los 3 ejes del objeto a con el objeto b:
Código:
alignorientation $boxa $boxb
Pero puedes alinear con dos ejes sólo (aunque se podría ampliar y hacerlo para 1 sólo eje):
Código:
alignorientation $boxa $boxb axes:#{1,3}
En este caso alinea los ejes x (1) y z (3).
Lo que pasa es que no sé que diferencia hay exactamente entre alinear con 2 o 3 ejes porque al fin y al cabo, los 3 ejes acaban siendo los mismos.
De todas formas, la función tiene un inconveniente y es que, si el objeto b tiene escala, el objeto a también la heredara. Para evitar esto habría que utilizar algún otro método. Incluso se podría utilizar éste mismo, pero descomponiendo la matriz para de esta forma aislar la rotación de la escala. Lo que pasa es que descomponer una matriz no es algo trivial (y no parece que Maxscript tenga esa función).
Para más información sobre matrices de transformación, puedes echarle un vistazo al tutorial que escribí hace un tiempo. Saludos.