Melhorando a extração de propriedades no 3ds Max

Publicado em 27 de January de 2026 | Traduzido do espanhol
Código otimizado para melhorar a extração de propriedades no 3ds Max por meio de uma versão aprimorada de getUserProp em MaxScript.

A função getUserProp no MaxScript tem apresentado erros desde versões antigas do 3ds Max, afetando a recuperação de valores armazenados nas propriedades de usuário dos objetos. Para solucionar esse problema, foi desenvolvida uma versão aprimorada que otimiza a extração de dados e garante um manuseio mais preciso.

Solução para um erro de longa data

O problema com a função original do MaxScript reside no fato de que nem sempre retorna os valores corretos quando se trata de dados booleanos, numéricos ou cadeias de texto. Essa falha está presente desde o 3ds Max 9 e nunca foi corrigida oficialmente. Para evitar esses erros, foi projetada uma nova implementação que melhora a estabilidade na recuperação de dados.

Principais características do getUserProp aprimorado

Aplicações em scripts de automação

Este script é especialmente útil para desenvolvedores que trabalham com ferramentas personalizadas no 3ds Max, pois permite um acesso mais preciso aos dados armazenados nas propriedades de usuário dos objetos. Sua aplicação se estende a:

Otimização para fluxos de trabalho avançados

A implementação desta nova versão facilita a obtenção de dados confiáveis dentro do ambiente do 3ds Max. Seu objetivo é melhorar a consistência e a estabilidade no uso de propriedades de usuário, evitando problemas comuns na extração de informações.

Código do script aprimorado


-- Verifica se uma cadeia contém apenas 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
)

-- Função aprimorada 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(); 
 )

Explicação do código

Este script é uma solução eficaz para desenvolvedores que trabalham com dados armazenados no 3ds Max, eliminando erros e melhorando a confiabilidade na recuperação de informações dentro de seus projetos.