2015-01-04 9 views
1

Я пишу в скриптах DigialMicrograph. Я хочу, чтобы скрипт открывал более одного изображения в одном диалоговом окне, в диалоговом окне с несколькими избранными изображениями, аналогично тому, как вы переходите к любому диалоговому окну Windows, выберите несколько изображений и нажмите «ОК».Как я могу открыть несколько изображений с одним диалоговым окном в сценарии Digital Micrograph?

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

Я знаю функцию OpenDialog, но это позволяет открывать только одно изображение. Может ли кто-нибудь показать мне какой-то сценарий или функцию, которая может помочь мне дальше?

Спасибо.

ответ

1

То, о чем вы просите, может быть немного более привлекательным. Там нет нескольких открытых функции на языке сценариев, так что вы можете только создать его самостоятельно, с участием нескольких шагов:

  • входом для базовой папки (это можно запрашивать у пользователя с диалогом GetDirectoryDialog)
  • Использование команды GetFilesInDirectory для получения списка (TagList) файлов в этой папке
  • процесса, что список, чтобы отфильтровать то, что вы заинтересованы в
  • Создание пользовательского-диалога (производный от UIFrame), в котором перечислены файлы с установленными флажками, несколькими раскрывающимися меню или списком для выбора.
  • Закон от выбора, сделанного в вашем диалоге обычай, т.е. открыть все эти файлы

Следующий сценарий является примером делать.

class MyMultiSelect : UIframe 
{ 
    string root 
    TagGroup FileList 
    TagGroup DLGlist 

    TagGroup CreateDLG(object self) 
    { 
     TagGroup dlg,dlgitems 
     dlg = DLGCreateDialog("MultiOpen", dlgItems) 

     number nMax = fileList.TagGroupCountTags(); 
     TagGroup listitems 
     DLGlist = DLGCreateList(listitems, 90, nMax+1) 
     DLGlist.DLGMultipleSelect(1) 
     for (number i=0; i<nMax; i++) 
     { 
      string name 
      if (FileList.TagGroupGetIndexedTagAsString(i,name)) 
        listitems.DLGAddListItem(name, 0) 
     } 

     dlgitems.DLGAddElement(DLGlist) 
     return dlg 
    } 

    TagGroup CreateFilteredFileList(object self) 
    { 
     // Get all files 
     TagGroup list = GetFilesInDirectory(root, 1) 
     // Filter all DM3 files 
     TagGroup filtered = NewTagList() 
     for(number i = 0; i<list.TagGroupCountTags(); i++) 
     { 
      TagGroup entry 
      string file = "" 
      list.TagGroupGetIndexedTagAsTagGroup(i,entry) 
      entry.TagGroupGetTagAsString("Name", file) 
      if (-1 != find(file,".dm3")) 
       filtered.TagGroupInsertTagAsString(Infinity(),file) 
     } 
     return filtered 
    } 

    TagGroup GetSelectedList(object self) 
    { 
     TagGroup selList = NewTagList() 
     TagGroup itemList 
     DLGlist.TagGroupGetTagAsTagGroup("Items", itemList) 
     for (number i=0; i<itemList.TagGroupCountTags(); i++) 
     { 
      number isSelected = 0 
      TagGroup entry 
      itemList.TagGroupGetIndexedTagAsTagGroup(i,entry) 
      entry.TagGroupGetTagAsBoolean("Selected", isSelected) 
      if (isSelected) 
      { 
       string filename 
       entry.TagGroupGetTagAsString("Label", fileName) 
       selList.TagGroupInsertTagAsString(Infinity(),fileName) 
      } 
     } 
     return selList 
    } 

    void OpenSelectedFiles(object self) 
    { 
     TagGroup files = self.GetSelectedList() 
     number nFiles = files.TagGroupCountTags() 
     if (0 == nFiles) 
      Throw("No files selected") 

     Result("\n Opening "+nFiles+" files now..") 
     for (number i=0; i<nFiles; i++) 
     { 
      string filename 
      files.TagGroupGetIndexedTagAsString(i,fileName) 
      string path = root + "\\" + filename 
      Result("\n Opening: "+path) 
      OpenImage(path).ShowImage() 
     } 
    } 

    Object Init(object self, string rootInput) 
    { 
     root = rootInput 
     FileList = self.CreateFilteredFileList() 
     return self.super.Init(self.CreateDLG()) 
    } 
} 

// Main 
{ 
    string rootDir 
    GetDirectoryDialog(NULL, "Select Folder from which to multi-open", GetApplicationDirectory("current",0), rootDir) 
    object dlg = Alloc(MyMultiSelect).Init(rootDir) 
    dlg.pose() 
    dlg.OpenSelectedFiles() 
} 
+0

спасибо! Это очень полезно! –