【问题标题】:How could I open more than one image with a single dialog in Digital Micrograph script?如何在 Digital Micrograph 脚本中使用单个对话框打开多个图像?
【发布时间】:2015-01-04 09:35:09
【问题描述】:

我正在编写 DigialMicrograph 脚本。我想要一个脚本在一个对话框中打开多个图像,一个多选图像对话框,类似于当您转到任何 Windows 打开对话框时,选择多个图像并按确定。

我认为这是可能的,但我还没有找到方法。我想在我的脚本中引入这个特定的代码,以避免在运行脚本之前打开图像。

我知道OpenDialog 函数,但这只允许打开单个图像。谁能给我看一些可以进一步帮助我的脚本或函数?

谢谢。

【问题讨论】:

    标签: dm-script


    【解决方案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()
    }
    

    【讨论】:

    • 非常感谢!!很有用!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多