2015-08-17 2 views
0

Я пытаюсь собрать некоторые данные из материалов по выборам в maxscript и сохранить их в XML-файле. Сначала я пытался с txt-файлом, и я, кажется, застрял.Создать файл в maxscript

Вот что у меня есть:

try(DestroyDialog Test)catch() 

Rollout Test "TestMt" width: 200 height: 120 
(
    button btn_name "Connection" height: 50 width:80 
    button btn_export "Export Mt Data" height:50 width:90 

    fn Createtxt = 
     for o in selection do 
       (
        out_name = ((GetDir #export)+"/testmesh3.txt") 
        out_file = createfile out_name 

       ) 


      on btn_export pressed do 
       (
        Createtxt() 
       ) 
) 

Createdialog Test 
+0

Что именно застряло? Можете быть более конкретными? – lenz

+0

Я получаю ошибку ввода-вывода при запуске скрипта, его ударе или пропуске при сохранении файла. Я могу запустить его один раз, и это экономит, но я запускаю его во второй раз, и он терпит неудачу. – Kriscabrera

+0

интересный ....... я пытаюсь это на чистой максимальной сцене и ее работе отлично, (пробуя это на работе, возможно, это труба), так что теперь мой вопрос заключается в том, что это правильная строка для записи в файл? для о в селекции делать ( out_name = ((GetDir #export) = "/ testmesh.txt) out_file = CreateFile out_name формат "%,% \ п" o.name o.material к: out_file ) ! спасибо за помощь – Kriscabrera

ответ

0

Я думаю, что проблема заключается в том, что у вас есть функция Createtxt() внутри функции Createtxt.

попробовать это:

try(DestroyDialog Test)catch() 

Rollout Test "TestMt" width: 200 height: 120 
(
    button btn_name "Connection" height: 50 width:80 
    button btn_export "Export Mt Data" height:50 width:90 


       on btn_export pressed do 
       (
        Createtxt() 
       ) 

    fn Createtxt = 
     for o in selection do 
       (
        out_name = ((GetDir #export)+"/testmesh3.txt") 
        out_file = createfile out_name 

       ) 



) 

Createdialog Test 
+0

я попробовал эту версию и получил «Вызов необходима функция или класс, есть не определены» не правда ли, что пример такие же только с помощью кнопки на верхней части функции могли бы вы объяснить немного?. Спасибо за помощь! – Kriscabrera

+0

Я попытаюсь написать фрагмент. Можете ли вы рассказать мне, какие материальные данные вы хотите от выбранного объекта? (При условии, что вы хотите сохранить эти данные в файл) –

+0

tha nks куча для справки, я тестировал, могу ли я просто получить имя объекта и имя шейдера и сохранить его в текстовом файле, после дальнейшего выяснения некоторых людей информации говорят, что лучше xml, так как он имеет инструкции и может быть использован позже для чтения. Как вы думаете? Еще раз, спасибо за помощь! – Kriscabrera

0

Проблема Nr 1 - Здесь ниже вы можете увидеть кусок кода, который я написал, что поможет вам назначить материалы к выбранным объектам. (даже на основе внешнего файла библиотеки .mat) он полностью работает.

rollout matTests "MatTester_v01" (


global renderwidth = renderWidth 
global renderHeight = renderHeight 

    local outputFolderURL = "" 
    local bestandsNaam = "" 
    local materiaalNaam = #() 
    local saveFolder = "testen" 


    label usage0 "Step 1 - Give your images a filename"  
    edittext filenaam "" fieldWidth:220 labelOnTop:false  
    label usage1 "Step 2 - Choose a save folder"  

    button save_folder "Save folder" width:250 
    label usage "Step 3" 
    pickbutton kiesGeo "Select your geometry" width:250 
    label usage2 "Step 4" 
    button btn_loadmat "Open a .mat library" width:250 

    on save_folder pressed do 
    (
     outputFolderURL = getSavepath() 
     saveFolder = outputFolderURL 
    ) 

    global obj 
    --camlist = #() 

    on kiesGeo picked obj do 
    (
    select obj 
    ) 

    on filenaam entered txt do 
    (

     bestandsNaam = txt 
    ) 


    on kies_camera selected i do 
     format "You selected '%'!\n" scale_dd.items[i] 

    on btn_loadmat pressed do 
    (
     local sel = getCurrentSelection() 

     if (sel.count == 0) then (messagebox "no objects are selected" title:"Error 001 - no objects selected") 
     else 
     (
      local libFile = getOpenFileName caption:"select a material library file" types:"Material Libraries (*.mat)|*.mat" 
      if (libFile != undefined) then 
      (
       local tempLib = loadTempMaterialLibrary libFile 
       if (tempLib == undefined) then (messagebox "loading a library file failed" title:"Error 002 - loading a library file failed") 
       else 
       (
        -- save materials in a array 

        for m in tempLib do (
         global materiaalNaam = #(m) 
         print materiaalNaam 
        ) 

        local aantalmaterials = templib.count 
        for iterations = 1 to aantalmaterials do -- begin iterations loop 
        (

         global welkeImage = iterations 
         function snapMats label size:[renderWidth,renderHeight] folder:"testMats" = 
         (
          for c in cameras do 
          (
          local fname = folder + label + "-" + c.name 

          materiaalNaamString = materiaalNaam as string 
          versie = welkeImage as string 

          render camera:c outputFile:(outputFolderURL + "\\" + bestandsNaam + "-" + versie + ".jpg") outputSize:[renderWidth,renderHeight]  

          ) 
         ) 

         snapMats "label" 

        local mat = tempLib[welkeImage] 

        sel.material = mat -- assign geindexerd material to my selected geometry 
        meditmaterials[activeMeditSlot] = mat 

        ) -- end for iterations loop 


       ) 
      ) 
     ) 
    ) 
) 
createDialog matTests width:250 

В общем - Для того, чтобы сохранить что-нибудь (например, данные материала) в текстовый файл, вы можете, например, предлагают возможность для пользователя, чтобы выбрать папку, в первую очередь.

Вы делаете это, вставляя в свой пользовательский интерфейс простую кнопку. А затем сделайте следующее:

on yourbuttonname_btn pressed do 
(
     inputFolderURL = getSavepath() 
-- this will store the folder URL into the inputFolderURL variable. 

) 

проблема NR 2 - на самом деле сохранить некоторые данные в файл .txt Сан - сделать что-то вроде: в следующем примере, вы можете увидеть, как хранить Vertes. данные в файл .txt (но это также может быть легко и материальными данными или что-то еще)

tmesh = snapshotAsMesh selection[1] 
out_name = ((GetDir #export)+"/testmesh.txt") 
out_file = createfile out_name 
num_verts = tmesh.numverts 
num_faces = tmesh.numfaces 
format "%,%\n" num_verts num_faces to:out_file 
for v = 1 to num_verts do 
(
vert = getVert tmesh v 
format "%," vert to:out_file 
) 
format "\n" to:out_file 
for f = 1 to num_faces do 
(
face = getFace tmesh f 
format "%," face to:out_file 
) 
close out_file 
delete tmesh 
edit out_name 
+0

Спасибо большое, что я собираюсь проанализировать это и посмотреть, что я могу получить! Очень ценим! – Kriscabrera

+0

Нет, спасибо! вам нужно сделать немного выбора вишни, но если я прав, то все, что вам понадобится, - это все. Если это ваш ответ, пожалуйста, подумайте о том, чтобы пометить свой вопрос как ответ. –