
La función getUserProp en MaxScript ha presentado errores desde versiones antiguas de 3ds Max, afectando la recuperación de valores almacenados en las propiedades de usuario de los objetos. Para solucionar este problema, se ha desarrollado una versión mejorada que optimiza la extracción de datos y garantiza un manejo más preciso.
Solución a un error de larga data
El problema con la función original de MaxScript radica en que no siempre devuelve los valores correctos cuando se trata de datos booleanos, numéricos o cadenas de texto. Esta falla ha estado presente desde 3ds Max 9 y nunca ha sido corregida oficialmente. Para evitar estos errores, se ha diseñado una nueva implementación que mejora la estabilidad en la recuperación de datos.
Características principales de getUserProp mejorado
- Verificación de contenido numérico en los valores obtenidos.
- Corrección de formatos de texto para evitar errores de conversión.
- Compatibilidad con versiones antiguas de 3ds Max, incluyendo la versión 9.
- Manejo optimizado de valores booleanos, numéricos y cadenas de texto.
Aplicaciones en scripts de automatización
Este script es especialmente útil para desarrolladores que trabajan con herramientas personalizadas en 3ds Max, ya que permite un acceso más preciso a los datos almacenados en las propiedades de usuario de los objetos. Su aplicación se extiende a:
- Recuperación de información de modelos 3D dentro de la escena.
- Automatización de metadatos para mejorar la organización del proyecto.
- Exportación eficiente de datos en scripts personalizados.
Optimización para flujos de trabajo avanzados
La implementación de esta nueva versión facilita la obtención de datos confiables dentro del entorno de 3ds Max. Su objetivo es mejorar la consistencia y estabilidad en el uso de propiedades de usuario, evitando problemas comunes en la extracción de información.
Código del script mejorado
-- Verifica si una cadena contiene solo números
fn isNumeral txt = (
s= txt as string
for i = 1 to s.count do(
if(findString "0123456789" s[i]) == undefined then(
return false
)
)
return true
)
-- Función mejorada de getUserProp
fn getUserProp2 obj =(
local ss = (getUserPropBuffer obj) as stringStream
if ss != undefined then(
while (eof ss) != true do(
local txt = readline ss
local arr = filterstring txt " = "
if arr[2] != undefined then(
if (arr[2] == "true") or (arr[2] == "false") or ((isNumeral arr[2]) == true ) then(
txt = arr[1] + "=" + arr[2]
execute txt
readline ss
)else(
arr[2] = "@\"" + arr[2]
append arr[2] "\""
txt = arr[1] + "=" + arr[2]
execute txt
readline ss
)
)else(
txt = arr[1] + "=" + "\"\""
execute txt
readline ss
)
)
)else(
return();
)
Explicación del código
- isNumeral(txt): Comprueba si una cadena contiene solo números.
- getUserProp2(obj):
- Recupera los valores almacenados en las propiedades de usuario.
- Verifica si son números, booleanos o cadenas de texto.
- Corrige errores de conversión y estructura los datos correctamente.
- Ejecuta la asignación de valores de manera segura.
Este script es una solución efectiva para desarrolladores que trabajan con datos almacenados en 3ds Max, eliminando errores y mejorando la confiabilidad en la recuperación de información dentro de sus proyectos.