
MaxScript의 getUserProp 함수는 3ds Max의 오래된 버전부터 오류를 발생시켜 객체의 사용자 속성에 저장된 값의 복구에 영향을 미쳤습니다. 이 문제를 해결하기 위해 데이터 추출을 최적화하고 더 정확한 처리를 보장하는 개선된 버전이 개발되었습니다.
오랜 기간 지속된 오류의 해결책
MaxScript의 원래 함수 문제는 불리언 데이터, 숫자 또는 텍스트 문자열을 다룰 때 항상 올바른 값을 반환하지 않는 데 있습니다. 이 결함은 3ds Max 9부터 존재했으며 공식적으로 수정되지 않았습니다. 이러한 오류를 피하기 위해 데이터 복구의 안정성을 개선하는 새로운 구현이 설계되었습니다.
getUserProp 개선 버전의 주요 특징
- 획득된 값에서 숫자 콘텐츠 확인.
- 변환 오류를 피하기 위한 텍스트 형식 수정.
- 3ds Max의 오래된 버전 호환성, 버전 9 포함.
- 불리언, 숫자 및 텍스트 문자열 값의 최적화된 처리.
자동화 스크립트에서의 응용
이 스크립트는 3ds Max에서 사용자 지정 도구를 작업하는 개발자에게 특히 유용하며, 객체의 사용자 속성에 저장된 데이터에 대한 더 정확한 액세스를 허용합니다. 그 응용 범위는 다음과 같습니다:
- 씬 내 3D 모델의 정보 복구.
- 프로젝트 조직 개선을 위한 메타데이터 자동화.
- 사용자 지정 스크립트에서의 효율적인 데이터 내보내기.
고급 워크플로우를 위한 최적화
이 새로운 버전의 구현은 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();
)
코드 설명
- isNumeral(txt): 문자열이 숫자만 포함하는지 확인합니다.
- getUserProp2(obj):
- 사용자 속성에 저장된 값을 복구합니다.
- 숫자, 불리언 또는 텍스트 문자열인지 확인합니다.
- 변환 오류를 수정하고 데이터를 올바르게 구조화합니다.
- 값 할당을 안전하게 실행합니다.
이 스크립트는 3ds Max에 저장된 데이터를 작업하는 개발자에게 효과적인 해결책으로, 오류를 제거하고 프로젝트 내 정보 복구의 신뢰성을 향상시킵니다.