Amélioration de l'extraction des propriétés dans 3ds Max

Publié le 20 January 2026 | Traduit de l'espagnol
Código optimizado pour améliorer l'extraction des propriétés en 3ds Max grâce à une version améliorée de getUserProp en MaxScript.

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é

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 à :

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

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.