Modificar custattributes

Lannuko - 05/01/2009 10:11
Hola. Estoy modificando un script de 3ds Max (maxscript). Dicho script generaba un conjunto de atributos a ciertos objetos de la escena.

Mi problema es el siguiente:
[list=3].
  • he añadido un nuevo atributo a ese conjunto de atributos definidos en el script.
  • dispongo de una antigua escena con objetos con el conjunto de atributos antiguos.
  • quiero mantener la información de esos objetos y añadirles el nuevo atributo dentro de ese conjunto de atributos.[/list]
    ¿Es posible modificar/añadir nuevos atributos a un cust attributes concreto cuando ya disponen de ellos? Gracias y feliz año.
  • Cesar Saez - 05/01/2009 19:09
    Hola, claro que es posible redefinir un ca, te muestro un ejemplo. Supongamos que agregas un ca en el primer modificador del objeto seleccionado.
    [code]ca = attributes myca.

    Parameters mycaparams ut:mycarollout.

    Myspinner type:#float ui:myspinner_sp).

    Rollout mycarollout ejemplo.

    Spinner myspinner_sp spinner).
    ).

    Custattributes. Add $. Modifiers[1] ca[/code]

    Para redefinirlo y agregar un nuevo spinner tendrías que ejecutar algo como esto:
    [code]ca = custattributes, getdef $.modifiers[1].myca.

    Attributes myca.

    Redefine:ca.

    Parameters mycaparams ut:mycarollout.

    Myspinner type:#float ui:myspinner_sp.

    Mynewspinner type:#float ui:mynewspinner_sp).

    Rollout mycarollout ejemplo.

    Spinner myspinner_sp spinner.

    Spinner mynewspinner_sp nuevo spinner).
    )[/code]

    No es tan complicado como parece, si te fijas en el código para modificarlo es casi igual salvo 2 o 3 líneas. También existen scripts que ayudan mucho cuando tienes que redefinir ca con frecuencia, el custom attribute editor que encuentras aquí es muy útil. Saludos.
    Lannuko - 07/01/2009 11:37
    Gracias por responder. Os explico un poco mejo mi problema, en la medida que se me permita. En una escena dispongo de cientos de líneas (line), y cada línea dispone del siguiente conjunto de atributos que en su día se especificaron:
    [code]Global atributoslinea = attributes atribslinea.
    (.

    Parameters main ut:paramslinea.
    (.

    Linea_id type:#string ui:edit_linea_id default:-1.

    Lineaparam1 type:#string ui:edit_linea_p1 default:-1.

    Lineaparam2 type:#string ui:edit_linea_p2 default:-1.
    ) t.

    Rollout paramslinea linea width:168 height:350.
    ().

    Eventos).
    [/code]

    Ahora quiero modificar como os comenté este custattributes y quiero añadirle nuevos atributos, tal que así:
    [code]Global atributoslinea = attributes atribslinea.
    (.

    Parameters main ut:paramslinea.
    (.

    Linea_id type:#string ui:edit_linea_id default:-1.

    Lineaparam1 type:#string ui:edit_linea_p1 default:-1.

    Lineaparam2 type:#string ui:edit_linea_p2 default:-1.
    lineaparamx type:#string ui:edit_linea_px default:-1.

    Lineaparamy type:#string ui:edit_linea_py default:-1.
    ) t.

    Rollout paramslinea linea width:168 height:350.
    ().

    Eventos).
    [/code]

    Al modificar el script como ha comentado César:
    [code]atributoslinea = custattributes, getdef $.atribslinea.

    Attributes atribslinea.

    Redefine:atributoslinea.
    (.

    Parameters main ut:paramslinea.
    (.

    Linea_id type:#string ui:edit_linea_id default:-1.

    Lineaparam1 type:#string ui:edit_linea_p1 default:-1.

    Lineaparam2 type:#string ui:edit_linea_p2 default:-1.
    lineaparamx type:#string ui:edit_linea_px default:-1.

    Lineaparamy type:#string ui:edit_linea_py default:-1.
    ) t.

    Rollout paramslinea linea width:168 height:350.
    ().

    Eventos).
    [/code]

    Selecciono una línea de una escena vieja y evalúo el script. Como consecuencia de esta acción, la gran mayoría de líneas modifican el conjunto de atributos y aparecen los nuevos parámetros. Pero hay algunas líneas que no se modifican. Es muy extraño la verdad.
    ¿Hay alguna forma de seleccionar que líneas van a modificar el conjunto de atributos y cuáles ¿no? Gracias.