Publicado el 18/2/2025, 16:42:13 | Autor: 3dpoder

Código optimizado para mejorar la extracción de propiedades en 3ds Max mediante una versión mejorada de getUserProp en MaxScript.

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

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:

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

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.

Enlaces Relacionados