Batch savePict

//saves one or more graphs as enhanced metafiles, or other image file types as specified by the optional type parameter.

#pragma TextEncoding = "Windows-1252"
#pragma rtGlobals=3     // Use modern global access method and strict wave access.
function SavePICT_batch(matchStr,numGraphs, pathName, [h, w, res, nStr,cmdStr,type])
    String matchStr //optional matchStr for window names -- pass "" or "*" for top-most graphs
    Variable numGraphs
    String pathName  //specify a symbolic path to the directory for saving the files. User is prompted to select a directory if the symbolic path does not exist
    Variable h, w       //optionally set height. Uses inches by multiplying input value by 72
    Variable res        //see otions in switch statement below. 0 or 8 is 8x screen resolution, 1 is 1x, so on
    String nStr //when passed, this is used as start of output name. If more than one graph being saved, naming is [nStr]0, [nStr]1, ...
    string cmdStr   //when passed, disp_general(cmdStr) is run on each graph before saving, e.g. "modifygraph fsize=16"
    Variable type   //-2 for enhanced metafile, -5 for png, -7 for tiff. See the savePICT /E flag for more details
   
    Variable usedType
    if (ParamIsDefault(type))   //no type speficiation, use default
        usedType = -2           //-2 for high res enhanced metafile (good for illustrator), -5 for png, -7 for tiff
    else
        usedType = type
    endif
   
    Variable spbt = 1           //Save PNG Background as Transparent (only affects PNGs)
   
    PathInfo $pathName
    if (!V_flag)
        Newpath/O $pathName
       
        if (V_flag)
            Print "SavePICT_batch(): path set canceled; aborting."     
        endif
    endif
   
    if (ParamIsDefault(res))
        res = 8
    endif
   
    Variable resVal = res*72        //1 to 8 are options for res
   
    if (strlen(matchStr) < 1)       //default to all windows
        matchStr="*"
    endif
   
    String graphWindows = WinList(matchStr, ";", "WIN:1" )
   
    if (!ParamIsDefault(cmdStr))
        disp_general(cmdStr, "*", numGraphs)
    endif
   
    Variable i, count; String sname
    Variable num=min(numGraphs,itemsinlist(graphWindows))
    for (i=0; i<num   ; i+=1)
        //check for height, width changes
        if (!ParamIsDefault(h))
            ModifyGraph/W=$StringFromList(i, graphWindows) height = h*72; doupdate
            ModifyGraph/W=$StringFromList(i, graphWindows) height = 0       //makes height adjustable again
        endif
        if (!ParamIsDefault(w))
            ModifyGraph/W=$StringFromList(i, graphWindows) width = w*72; doupdate
            ModifyGraph/W=$StringFromList(i, graphWindows) width = 0        //makes height adjustable again
        endif
       
        //check for a custom name
        if (ParamIsDefault(nStr))   //no custom name
            SavePICT/Z/O/P=$pathName/EF=2/Q=1/B=(resVal)/E=(usedType)/TRAN=(spbt)/WIN=$StringFromList(i, graphWindows)
            Print "Saved: " + StringFromList(i, graphWindows)
       
        else
            if (numGraphs < 2)      //just one input, don't append a number to give it a unique name
                sname = nStr
            else                    //multiple windows to save, append a number to make sure output name is unique for each one
                sname = nStr + num2str(count)
            endif
            switch (usedType)
                case -2:        //emf
                    sname += ".emf"
                    break
                case -5:    //png
                    sname += ".png"
                    break
                case -7:
                    sname += ".tif"
                    break
            endswitch  
           
            SavePICT/Z/O/P=$pathName/EF=2/E=(usedType)/Q=1/B=(resVal)/TRAN=(spbt)/WIN=$StringFromList(i, graphWindows) as sname
            Print "Saved: " + StringFromList(i, graphWindows),"save name =", sname
        endif      
       
        if (V_flag == 0)
            count+=1
        else
            Print "Error in SavePICT_batch() from SavePICT. Error code = " + num2str(V_flag)
        endif
    endfor
    Print "total num saved = " + num2str(count) + " of target num = " + num2str(numGraphs)
end

function disp_general(cmdStr, matchStr, numGraphs)
    String cmdStr, matchStr; Variable numGraphs
   
    if (strlen(matchStr) < 1)
        matchStr = "*"      //defaul to all graphs
    endif  
   
    String list = winlist(matchStr,";","WIN:1")
   
    Variable i,numWins=min(numGraphs,itemsinlist(list)); String winN;
    for (i=0;i<numWins;i+=1)
        winN = StringFromList(i, list)
        Dowindow/F $winN    //bring to front
        Execute cmdStr
    endfor
    dowindow/H/F //send the command window back to the top of the desktop.
end

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More