2016-03-21 16 views
0

Bir Özel Attribute içinde FileIn() ile ilgili bir sorunum var. Komutumu ilk defa çalıştırdığımda tanımsız bir sınıf veya işlev alıyorum. Ayrıca 3ds max'i kapattığımda ve özel niteliklerimi kullanarak bir kutuyu yeniden açtığımda da her zaman hata alıyorum.Maxscript FileIn Özel Öznitelik İçinde

Umarım birisi kodumda yanlış yaptığımı anlamama yardımcı olabilir. Ben gerçekten bir çözüm olduğunu umuyorum çünkü FileIn() benim kodumu yeniden kullanıp düzenlemem için çok kullanışlıdır. yardım :) İşte

için şimdiden teşekkür ederiz kodum şudur: MAXScript dosyasında

Global newAttrib = attributes posAttribs 
(
fn addFunction FolderName vArray= 
(
/* 
1) Get the root position of the installed position of 3ds max 
2) Get in the script file and then in the FolderName of the function 
3) Add all the function inside the vArray in a FileIn Loop 
*/ 
for i = 1 to vArray.count do 
(
FolderPosition = ((GetDir #maxroot)+"\scripts\\" +FolderName + "\\") 
FileIn(FolderPosition + vArray[i]) 
) 
) 
parameters Param0 rollout:General 
(
pPreset0 type:#String ui:ddl_Preset0 default:"..." 
pTableHeight type:#Float ui:spn_Height default:100 
)--end Param1 
parameters Param1 rollout:TopPart 
(
pPreset1 type:#String ui:ddl_Preset1 default:"..." 
defaultArray1 type:#stringTab tabSize:1 tabSizeVariable:true 
defaultExist1 type:#boolean default:False 
)--end Param1 
parameters Param2 rollout:BottomPart 
(
pPreset2 type:#String ui:ddl_Preset2 default:"..." 
pLegEndShape type:#String ui:ddl_LegEnd default:"..." 
defaultArray2 type:#stringTab tabSize:1 tabSizeVariable:true 
defaultExist2 type:#boolean default:False 
)--end Param2 
parameters Param3 rollout:Supports 
(
pPreset3 type:#String ui:ddl_Preset3 default:"..." 
defaultArray3 type:#stringTab tabSize:1 tabSizeVariable:true 
defaultExist3 type:#boolean default:False 
)--end Param3 

Local externalFn = #("UI_CaptionChange.ms", "UI_ControlVisible.ms", "UI_MoveVisible.ms") 
Local externalMod = #("MOD_Extrude.ms", "MOD_Taper.ms", "MOD_QuadChamfer.ms", "MOD_SweepModifier.ms") 
Local TableTypes = sort(#("...", "Dining", "Workbench", "Coffee", "Round")) 
Local TopTypes = sort(#("...", "Square", "Rectangle", "Round","Oval","Triangle", "NGon", "Semi Circle", "Quarter Circle")) 
Local LegTypes = sort(#("...", "Straight", "Taper", "Cross","U","MultiEnd", "X", "Curve", "T")) 
Local LegEndTypes = sort(#("...", "Square", "Rectangular", "Circle","NGon")) 
Local SupportTypes = sort(#("...", "CopyTop", "PTP")) 
Rollout General "General" 
(
dropdownlist ddl_Preset0 "Presets:" items:TableTypes 
spinner spn_Height "Height" range:[0,1000,100] type:#float 
button btn_Random "Random All" border:True 
on General open do 
(
addFunction "Mal_Functions" externalFn --Adding all the external function 
addFunction "Mal_Modifiers" externalMod --Adding all the external modifiers 
ddl_Preset0.selection = findItem ddl_Preset0.items pPreset0 
UICaptionChange General 2 "Test" 
) 
on ddl_Preset0 selected val do 
(
pPreset0 = ddl_Preset0.selected 
) 
)--end TopPart Rollout 

Rollout TopPart "Top Part" 
(
dropdownlist ddl_Preset1 "Presets:" items:TopTypes 
spinner spn_Thickness "Height" range:[0,1000,2] type:#float 
spinner spn_Length "Length" range:[0,1000,2] type:#float 
spinner spn_Width "Width" range:[0,1000,2] type:#float 
on TopPart open do 
(
ddl_Preset1.selection = findItem ddl_Preset1.items pPreset1 
if defaultExist == False then 
(
--defaultArray = UIDefault Testing 
--defaultExist = True 
) 
) 
on ddl_Preset1 selected val do 
(
pPreset1 = ddl_Preset1.selected 
) 
)--end TopPart Rollout 
Rollout BottomPart "Bottom Part" 
(
dropdownlist ddl_Preset2 "Presets:" items:LegTypes 
dropdownlist ddl_LegEnd "Leg End Shape:" items:LegEndTypes 
on BottomPart open do 
(
ddl_Preset2.selection = findItem ddl_Preset2.items pPreset2 
ddl_LegEnd.selection = findItem ddl_LegEnd.items pLegEndShape 
) 
on ddl_Preset2 selected val do 
(
pPreset2 = ddl_Preset2.selected 
) 

on ddl_LegEnd selected val do 
(
pLegEndShape = ddl_LegEnd.selected 
) 
)--end BottomPart Rollout 
Rollout Supports "Supports" 
(
dropdownlist ddl_Preset3 "Presets:" items:SupportTypes 
on Supports open do 
(
ddl_Preset3.selection = findItem ddl_Preset3.items pPreset3 
) 
on ddl_Preset3 selected val do 
(
pPreset3 = ddl_Preset3.selected 
) 
)--end Supports Rollout 
)--end posAttribs 
modPanel.addModToSelection (EmptyModifier()) ui:on 
custAttributes.add $.modifiers[1] newAttrib --add the attribute in the first modifier 
+0

Gerçek hata mesajı nedir? Hangi satırın/öğenin tanımsız olduğunu söylüyor mu? Yaptığınız şeyle teknik olarak yanlış bir şey yok, FileIn'i böyle bir döngüde çalıştırmak olağandışı ama imkansız değil. – FrozenKiwi

+0

Sorunlar şu satırdan geliyor: UICaptionChange Genel 2 "Test" İlk değerlendirdiğimde, undefiend işlev/sınıfını aldım ancak ikinci kez betiğimi değerlendiriyorum. – teckcloud

+0

Bu, Maxscript Listener'daki tam iletidir: - General.open() içinde hata oluştu; dosya adı: ; pozisyon: 2354; satır: 58 - Çerçeve: - UICaptionChange: undefined >> MAXScript Rollout Handler Özel Durum: - Tür hatası: Arama işlevi veya sınıfı, şunu aldınız: undefined << – teckcloud

cevap

0

fonksiyon UICaptionChange tanımlı değil, bu yüzden sizin başvurulan dosyaların çıkmasıdır tahmin ediyorum?

Bundan% 100 emin değilim, ama benim tahminim şu ki, maxscript bunu yürütmeden önce "açık" işlevi ayrıştırmış olduğundan, yeni işlevleri tanımlayan FileIn komutunu çalıştırmadan önce functino'yu ayrıştırmış olacak . Diğer bir deyişle, işlevlerini bulunabilmeniz için çok geç kaldınız.

Genel işlevler için addFunction çağrılarınızı genel kapsamda taşımanızı öneririm. Kendisini yürütmenin ortasında yazan kodu bulmaya çok kafa karıştırıcı. Ayrıca, her eklediğinizde/açtığınızda her zaman yeniden derleme maliyetini ödeyerek, bu dahil edilen dosyaları yeniden ayrıştıracaksınız.

Sadece, bu komut değerlendirilir sadece yürütülecek (küresel kapsam içinde) dosyası başlığına dosyaları eklemek için kodu taşımak ve ben değildim rahmetli yanıt için ince

+0

Global kapsam hakkında konuştuğunuzda. Global newAttrib = attribAttribs özniteliklerinden önce addFunction işlevini koymak mı istiyorsunuz? Bu ne demek istiyorsan, o zaman özniteliği, özel özniteliğin kullanıldığı 3ds max sahnesini açacağım sonraki türü nasıl işlevini hatırlayacak? – teckcloud

+0

Normalde tanımı komut dosyalarına/startups klasörüne yapıştırırdım – FrozenKiwi

0

Maalesef olmalıdır Birkaç günlüğüne evde. Sanırım söylediklerini yaptım.

Bir startup.ms dosyası oluşturdum 3ds max komut dizeleri klasöründe yer alıyor. Bu dosyanın içinde addFunction'ımı ekledim ve sonra çağrılan maxscript dosyası olan diğer işlevlerimi ekleyerek sonradan adlandırıyorum. Bir işlev kütüphanesi eklemek gibi. Şu anda gördüğüm şeyden, hile gibi görünüyor. Yardımın sayesinde againt. Ben gerçekten itiraz ediyorum :)

İlgili konular