Batch savePict

Average rating
(0 votes)

//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

Back to top