
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
- Verificação de conteúdo numérico nos valores obtidos.
- Correção de formatos de texto para evitar erros de conversão.
- Compatibilidade com versões antigas do 3ds Max, incluindo a versão 9.
- Manuseio otimizado de valores booleanos, numéricos e cadeias de texto.
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:
- Recuperação de informações de modelos 3D dentro da cena.
- Automação de metadados para melhorar a organização do projeto.
- Exportação eficiente de dados em scripts personalizados.
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
- isNumeral(txt): Verifica se uma cadeia contém apenas números.
- getUserProp2(obj):
- Recupera os valores armazenados nas propriedades de usuário.
- Verifica se são números, booleanos ou cadeias de texto.
- Corrige erros de conversão e estrutura os dados corretamente.
- Executa a atribuição de valores de maneira segura.
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.