Verbesserung der Extraktion von Eigenschaften in 3ds Max

Veröffentlicht am 23. January 2026 | Aus dem Spanischen übersetzt
Optimierten Code zur Verbesserung der Extraktion von Eigenschaften in 3ds Max durch eine verbesserte Version von getUserProp in MaxScript.

Die Funktion getUserProp in MaxScript weist seit alten Versionen von 3ds Max Fehler auf, die die Wiederherstellung von Werten in den Benutzereigenschaften der Objekte beeinträchtigen. Um dieses Problem zu lösen, wurde eine verbesserte Version entwickelt, die die Datenauslesung optimiert und ein präziseres Handling gewährleistet.

Lösung für einen langjährigen Fehler

Das Problem mit der ursprünglichen Funktion von MaxScript liegt darin, dass sie nicht immer die korrekten Werte für boolesche, numerische oder Textzeichenketten zurückgibt. Dieser Fehler besteht seit 3ds Max 9 und wurde nie offiziell behoben. Um diese Fehler zu vermeiden, wurde eine neue Implementierung entwickelt, die die Stabilität bei der Datenerfassung verbessert.

Hauptmerkmale der verbesserten getUserProp

Anwendungen in Automatisierungsskripten

Dieses Skript ist besonders nützlich für Entwickler, die mit benutzerdefinierten Tools in 3ds Max arbeiten, da es einen präziseren Zugriff auf die in den Benutzereigenschaften der Objekte gespeicherten Daten ermöglicht. Seine Anwendung erstreckt sich auf:

Optimierung für fortgeschrittene Workflows

Die Implementierung dieser neuen Version erleichtert die zuverlässige Datenerfassung im Umfeld von 3ds Max. Ziel ist es, die Konsistenz und Stabilität beim Einsatz von Benutzereigenschaften zu verbessern und gängige Probleme bei der Informationsauslesung zu vermeiden.

Code des verbesserten Skripts


-- 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(); 
 )

Erklärung des Codes

Dieses Skript ist eine effektive Lösung für Entwickler, die mit in 3ds Max gespeicherten Daten arbeiten, da es Fehler eliminiert und die Zuverlässigkeit bei der Informationserfassung in ihren Projekten verbessert.