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 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More