我正在用 DigialMicrograph 脚本编写。我想要一个脚本在一个对话框中打开多个图像,一个多选图像对话框,类似于当您转到任何 Windows 打开对话框时,选择多个图像并按确定。
我认为这是可能的,但我还没有找到办法。我想在我的脚本中引入这个特定的代码,以避免在运行脚本之前打开图像。
我知道该功能OpenDialog
,但这仅允许打开单个图像。有人可以给我看一些可以进一步帮助我的脚本或功能吗?
谢谢。
我正在用 DigialMicrograph 脚本编写。我想要一个脚本在一个对话框中打开多个图像,一个多选图像对话框,类似于当您转到任何 Windows 打开对话框时,选择多个图像并按确定。
我认为这是可能的,但我还没有找到办法。我想在我的脚本中引入这个特定的代码,以避免在运行脚本之前打开图像。
我知道该功能OpenDialog
,但这仅允许打开单个图像。有人可以给我看一些可以进一步帮助我的脚本或功能吗?
谢谢。
您所要求的可能涉及更多。脚本语言没有多重打开功能,只能自己创建,涉及多个步骤:
GetDirectoryDialog
对话框提示用户)GetFilesInDirectory
检索该文件夹中的文件列表 ( TagList )下面的脚本就是一个例子。
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()
}