
La fonction getUserProp en MaxScript présente des erreurs depuis les anciennes versions de 3ds Max, affectant la récupération des valeurs stockées dans les propriétés utilisateur des objets. Pour résoudre ce problème, une version améliorée a été développée qui optimise l'extraction des données et garantit une gestion plus précise.
Solution à une erreur de longue date
Le problème avec la fonction originale de MaxScript réside dans le fait qu'elle ne retourne pas toujours les valeurs correctes lorsqu'il s'agit de données booléennes, numériques ou chaînes de texte. Cette faille est présente depuis 3ds Max 9 et n'a jamais été corrigée officiellement. Pour éviter ces erreurs, une nouvelle implémentation a été conçue qui améliore la stabilité dans la récupération des données.
Caractéristiques principales de getUserProp amélioré
- Vérification du contenu numérique dans les valeurs obtenues.
- Correction des formats de texte pour éviter les erreurs de conversion.
- Compatibilité avec les anciennes versions de 3ds Max, y compris la version 9.
- Gestion optimisée des valeurs booléennes, numériques et chaînes de texte.
Applications dans les scripts d'automatisation
Ce script est particulièrement utile pour les développeurs travaillant avec des outils personnalisés dans 3ds Max, car il permet un accès plus précis aux données stockées dans les propriétés utilisateur des objets. Son application s'étend à :
- Récupération d'informations des modèles 3D dans la scène.
- Automatisation des métadonnées pour améliorer l'organisation du projet.
- Exportation efficace de données dans des scripts personnalisés.
Optimisation pour des flux de travail avancés
L'implémentation de cette nouvelle version facilite l'obtention de données fiables dans l'environnement de 3ds Max. Son objectif est d'améliorer la cohérence et la stabilité dans l'utilisation des propriétés utilisateur, en évitant les problèmes courants dans l'extraction d'informations.
Code du script amélioré
-- 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();
)
Explication du code
- isNumeral(txt): Vérifie si une chaîne contient uniquement des chiffres.
- getUserProp2(obj):
- Récupère les valeurs stockées dans les propriétés utilisateur.
- Vérifie si elles sont numériques, booléennes ou chaînes de texte.
- Corrige les erreurs de conversion et structure correctement les données.
- Exécute l'assignation des valeurs de manière sécurisée.
Ce script est une solution efficace pour les développeurs travaillant avec des données stockées dans 3ds Max, éliminant les erreurs et améliorant la fiabilité dans la récupération d'informations au sein de leurs projets.