Migliorando l'estrazione delle proprietà in 3ds Max

Pubblicato il 12 January 2026 | Tradotto dallo spagnolo
Código optimizado para mejorar la extracción de proprietà in 3ds Max mediante una versione migliorata di getUserProp in MaxScript.

La funzione getUserProp in MaxScript ha presentato errori fin dalle versioni antiche di 3ds Max, influenzando il recupero dei valori memorizzati nelle proprietà utente degli oggetti. Per risolvere questo problema, è stata sviluppata una versione migliorata che ottimizza l'estrazione dei dati e garantisce una gestione più precisa.

Soluzione a un errore di lunga data

Il problema con la funzione originale di MaxScript risiede nel fatto che non restituisce sempre i valori corretti quando si tratta di dati booleani, numerici o catene di testo. Questo difetto è presente fin da 3ds Max 9 e non è mai stato corretto ufficialmente. Per evitare questi errori, è stata progettata una nuova implementazione che migliora la stabilità nel recupero dei dati.

Caratteristiche principali di getUserProp migliorato

Applicazioni in script di automazione

Questo script è particolarmente utile per sviluppatori che lavorano con strumenti personalizzati in 3ds Max, poiché permette un accesso più preciso ai dati memorizzati nelle proprietà utente degli oggetti. La sua applicazione si estende a:

Ottimizzazione per flussi di lavoro avanzati

L'implementazione di questa nuova versione facilita l'ottenimento di dati affidabili all'interno dell'ambiente di 3ds Max. Il suo obiettivo è migliorare la consistenza e la stabilità nell'uso delle proprietà utente, evitando problemi comuni nell'estrazione delle informazioni.

Codice dello script migliorato


-- Verifica se 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 migliorata di 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(); 
 )

Spiegazione del codice

Questo script è una soluzione efficace per sviluppatori che lavorano con dati memorizzati in 3ds Max, eliminando errori e migliorando l'affidabilità nel recupero delle informazioni all'interno dei loro progetti.