
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
- Überprüfung numerischen Inhalts in den abgerufenen Werten.
- Korrektur von Textformaten, um Konvertierungsfehler zu vermeiden.
- Kompatibilität mit alten Versionen von 3ds Max, einschließlich Version 9.
- Optimiertes Handling von booleschen, numerischen und Textwerten.
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:
- Erfassung von Informationen aus 3D-Modellen in der Szene.
- Automatisierung von Metadaten zur Verbesserung der Projektorganisation.
- Effiziente Exportierung von Daten in benutzerdefinierten Skripten.
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
- isNumeral(txt): Überprüft, ob eine Zeichenkette nur Zahlen enthält.
- getUserProp2(obj):
- Erfasst die in den Benutzereigenschaften gespeicherten Werte.
- Überprüft, ob es sich um Zahlen, Booleans oder Textzeichenketten handelt.
- Korrigiert Konvertierungsfehler und strukturiert die Daten korrekt.
- Führt die Wertezuweisung sicher aus.
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.