3ds Maxでのプロパティ抽出の改善

2026年02月02日 公開 | スペイン語から翻訳
Código optimizado para mejorar la extracción de propiedades en 3ds Max mediante una versión mejorada de getUserProp en MaxScript.

MaxScriptのgetUserProp関数は、3ds Maxの古いバージョンからエラーが発生しており、オブジェクトのユーザー プロパティに保存された値の取得に影響を与えています。この問題を解決するために、データ抽出を最適化し、より正確な処理を保証する改良版が開発されました。

長年のエラーの解決策

MaxScriptの元の関数の問題は、ブール値、数値、または文字列を扱う際に常に正しい値を返さない点にあります。この欠陥は3ds Max 9から存在し、公式に修正されたことはありません。これらのエラーを回避するために、データ取得の安定性を向上させる新しい実装が設計されました。

getUserProp改良版の主な特徴

自動化スクリプトへの応用

このスクリプトは、3ds Maxでカスタムツールを扱う開発者にとって特に有用で、オブジェクトのユーザー プロパティに保存されたデータへのより正確なアクセスを可能にします。その応用範囲は以下の通りです:

高度なワークフローの最適化

この新バージョンの実装は、3ds Max環境内で信頼性の高いデータ取得を容易にします。その目的は、ユーザー プロパティの使用における一貫性と安定性を向上させ、情報抽出の一般的な問題を回避することです。

改良されたスクリプトのコード


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

コードの説明

このスクリプトは、3ds Maxに保存されたデータを扱う開発者にとって効果的な解決策であり、エラーを排除し、プロジェクト内での情報取得の信頼性を向上させます。