Gatan | AMETEKSkip to Main Content
No options found

Copy LinePlot display style from front image to all other LinePlots

DigitalMicrograph Script

Automation script to quickly apply specific display styles (e.g., line thickness, color) to all open LinePlots based on the frontmost displayed LinePlot.

Preview

number IsValidLinePlot( image test )
{
	// Check if the given image reference refers to a valid  image in LinePlot display
	//////////////////////////////////////////////////////////////////////////////////
	if ( !test.ImageIsValid() ) return 0					// not an image, maybe not existent
	ImageDisplay disp = test.ImageGetImageDisplay(0)			
	if ( !disp.ImageDisplayIsValid() ) return 0				// not a display, maybe not existent
	if ( 3 != disp.ImageDisplayGetDisplayType() ) return 0	// not a LinePlot display
	return 1
}

number CopyLinePlotSliceStyle( image source, number sliceIndex_s, image goal,  number sliceIndex_g )
{
	// Perform checks and return FALSE if input not appropriate
	///////////////////////////////////////////////////////////
	if ( !IsValidLinePlot( source ) ) return 0
	if ( !IsValidLinePlot( goal ) ) return 0						
	
	ImageDisplay sdisp = source.ImageGetImageDisplay(0)			
	ImageDisplay gdisp = goal.ImageGetImageDisplay(0)			
	number nSlices_s = sdisp.ImageDisplayCountSlices()
	number nSlices_g = gdisp.ImageDisplayCountSlices()
	if ( sliceIndex_s >= nSlices_s ) return 0			// slice index does not exist in source
	if ( sliceIndex_g >= nSlices_g ) return 0			// slice index does not exist in goal
	if ( sliceIndex_s < 0 ) return 0					// slice index does not exist in source
	if ( sliceIndex_g < 0 ) return 0					// slice index does not exist in goal
	
	// Read all slice parameters from source
	////////////////////////////////////////////////////////////
	number lcR, lcG, lcB
	number fcR, fcG, fcB
	number lTransActive, lTransLevel
	sdisp.LinePlotImageDisplayGetSliceComponentColor( sliceIndex_s, 0, lcR, lcG, lcB )			// Get slice line color (RGB) 
	sdisp.LinePlotImageDisplayGetSliceComponentColor( sliceIndex_s, 1, fcR, fcG, fcB )			// Get slice fill color (RGB)
	sdisp.LinePlotImageDisplayGetSliceTransparency( sliceIndex_s, lTransActive, lTransLevel )	// Get slice transparency
	number lThickness =	sdisp.LinePlotImageDisplayGetSliceLineThickness( sliceIndex_s ) 		// Get slice line thickness
	number lStyle = sdisp.LinePlotImageDisplayGetSliceLineStyle( sliceIndex_s ) 				// Get slice line style (solid, dashed...)
	number lDrawingStyle = sdisp.LinePlotImageDisplayGetSliceDrawingStyle( sliceIndex_s )		// Get slice drawing style (line, filled...)
	
	// Set all slice parameters to goal
	////////////////////////////////////////////////////////////
	gdisp.LinePlotImageDisplaySetSliceComponentColor( sliceIndex_g, 0, lcR, lcG, lcB )			// Set slice line color (RGB) 
	gdisp.LinePlotImageDisplaySetSliceComponentColor( sliceIndex_g, 1, fcR, fcG, fcB )			// Set slice fill color (RGB)
	gdisp.LinePlotImageDisplaySetSliceTransparency( sliceIndex_g, lTransActive, lTransLevel )	// Set slice transparency
	gdisp.LinePlotImageDisplaySetSliceLineThickness( sliceIndex_g, lThickness ) 				// Set slice line thickness
	gdisp.LinePlotImageDisplaySetSliceLineStyle( sliceIndex_g, lStyle ) 					// Set slice line style (solid, dashed...)
	gdisp.LinePlotImageDisplaySetSliceDrawingStyle( sliceIndex_g, lDrawingStyle )			// Set slice drawing style (line, filled...)
		
	return 1
}

number CopyLinePlotStyle( image source, image goal )
{
	// Perform checks and return FALSE if input not appropriate
	///////////////////////////////////////////////////////////
	if ( !IsValidLinePlot( source ) ) return 0
	if ( !IsValidLinePlot( goal ) ) return 0	

	ImageDisplay sdisp = source.ImageGetImageDisplay(0)			
	ImageDisplay gdisp = goal.ImageGetImageDisplay(0)			
	
	// Read all general LinePlot parameters from source
	////////////////////////////////////////////////////////////
	number frame = sdisp.LinePlotImageDisplayIsFrameOn()				// Get if the display frame is shown or not
	number background = sdisp.LinePlotImageDisplayIsBackgroundOn()		// Get if the display background is shown or not
	number grid = sdisp.LinePlotImageDisplayIsGridOn()				// Get if the display grid is shown or not
	number legend = sdisp.LinePlotImageDisplayIsLegendShown()			// Get if the display legend is shown or not
	number logmode = sdisp.LinePlotImageDisplayGetLogMode()			// Get if the display is displayed with log-intensity
	number baseIntensity = sdisp.LinePlotImageDisplayGetBaseIntensity()	// Get display base-line (fill limit, default: y=0 )
	number gcR, gcG, gcB
	number bgcR, bgcG, bgcB
	sdisp.LinePlotImageDisplayGetGridColor( gcR, gcG, gcB )			// Get grid color
	sdisp.LinePlotImageDisplayGetBackgroundColor( bgcR, bgcG, bgcB )		// Get background color
	number fcR, fcG, fcB
	number fontbold , fontstyle 
	number fontsize = sdisp.LinePlotImageDisplayGetFontSize( )			// Get caption font size
	string fontName = sdisp.LinePlotImageDisplayGetFontFamily() 		// Get caption font name
	sdisp.LinePlotImageDisplayGetFontAttributes( fontbold, fontstyle ) 	// Get caption font attributes (bold, underlines, italic...)
	sdisp.LinePlotImageDisplayGetFontColor( fcR, fcB, fcB )			// Get caption color
			
	// Set all general LinePlot parameters to goal
	////////////////////////////////////////////////////////////
	gdisp.LinePlotImageDisplaySetFrameOn( frame )					// Set display frame shown or not
	gdisp.LinePlotImageDisplaySetBackgroundOn( background )			// Set display background shown or not
	gdisp.LinePlotImageDisplaySetGridOn( grid )					// Set display grid shown or not
	gdisp.LinePlotImageDisplaySetLegendShown( legend )				// Set display legend shown or not
	gdisp.LinePlotImageDisplaySetLogMode( logmode )				// Set display displayed with log-intensity or not
	gdisp.LinePlotImageDisplaySetGridColor( gcR, gcG, gcB )			// Set grid color
	gdisp.LinePlotImageDisplaySetBackgroundColor( bgcR, bgcG, bgcB )		// Set background color
	gdisp.LinePlotImageDisplaySetFontSize( fontSize )				// Set caption font size
	gdisp.LinePlotimageDisplaySetFontFamily( fontName )				// Set caption font name
	gdisp.LinePlotImageDisplaySetFontAttributes( fontbold , fontstyle )	// Set caption font attributes (bold, underlines, italic...)
	gdisp.LinePlotImageDisplaySetFontColor( fcR, fcB, fcB )			// Set caption color
	gdisp.LinePlotImageDisplaySetBaseIntensity( baseIntensity )		// Set display base-line (fill limit)
		
	return 1
}

number CopyLinePlotWindow( image source, image goal )
{
	// Perform checks and return FALSE if input not appropriate
	///////////////////////////////////////////////////////////
	if ( !IsValidLinePlot( source ) ) return 0
	if ( !IsValidLinePlot( goal ) ) return 0	
	
	DocumentWindow swin = source.ImageGetOrCreateImageDocument().ImageDocumentGetWindow();
	DocumentWindow gwin = goal.ImageGetOrCreateImageDocument().ImageDocumentGetWindow();
	
	// Get source window display size
	/////////////////////////////////////////////////////////
	number wWidth, wHeight
	swin.WindowGetFrameSize( wWidth, wHeight )		// Get window frame size
	
	// Set source window display size
	/////////////////////////////////////////////////////////
	gwin.WindowSetFrameSize( wWidth, wHeight )		// Set window frame size
	
	return 1
}

number CopyLinePlotLimits( image source, image goal )
{
	// Perform checks and return FALSE if input not appropriate
	///////////////////////////////////////////////////////////
	if ( !IsValidLinePlot( source ) ) return 0
	if ( !IsValidLinePlot( goal ) ) return 0
	
	ImageDisplay sdisp = source.ImageGetImageDisplay(0)			
	ImageDisplay gdisp = goal.ImageGetImageDisplay(0)	
	
	// Get source area display limits 
	/////////////////////////////////////////////////////////
	number lowSurvey, highSurvey
	number lowLimit, highLimit
	number leftChannel, rightChannel
	sdisp.LinePlotImageDisplayGetDoAutoSurvey( lowSurvey, highSurvey )		// Get if autosurvey limits is on
	sdisp.LinePlotImageDisplayGetContrastLimits( lowLimit, highLimit )		// Get lowest and highest displayed intensity
	sdisp.LinePlotImageDisplayGetDisplayedChannels( leftChannel, rightChannel )	// Get leftmost and rightmost displayed channel
	
	// Set goal area display limits 
	/////////////////////////////////////////////////////////
	gdisp.LinePlotImageDisplaySetDoAutoSurvey( lowSurvey, highSurvey )		// Set if autosurvey limits is on
	gdisp.LinePlotImageDisplaySetContrastLimits( lowLimit, highLimit )		// Set lowest and highest displayed intensity
	gdisp.LinePlotImageDisplaySetDisplayedChannels( leftChannel, rightChannel )	// Set leftmost and rightmost displayed channel
	return 1
}

void MAIN()
{
	// Main script copying ALL properties from the front most image to ALL other open LinePlots.
	image source
	number nDoc = CountImageDocuments();
	if ( nDoc < 2 ) 
		throw( "Not enough images open." )
		
	source := GetImageDocument(0).ImageDocumentGetImage(0)
	if ( !IsValidLinePlot(source) )
		throw("Front-most image is not a LinePlot!")
	else
		result( "Copying all properties from <" + source.GetLabel() + ":" + source.GetName() + ">\n" )
		
	number nSlices_s = source.ImageGetImageDisplay(0).ImageDisplayCountSlices()
	
	for( number docID = 1; docID < nDoc; docID++ )
	{
		image goal := GetImageDocument(docID).ImageDocumentGetImage(0)
		if ( IsValidLinePlot( goal ) )
		{
			result( "<"+ goal.getLabel()+":" + goal.GetName() + "> - copied properties \n" )
			CopyLinePlotStyle( source, goal )
			CopyLinePlotWindow( source, goal )
			CopyLinePlotLimits( source, goal )	
			for ( number sliceID = 0 ; sliceID < nSlices_s; sliceID++ )
				CopyLinePlotSliceStyle( source, sliceID, goal, sliceID )
		}
		else
		{
			result( "<"+ goal.getLabel() + ":" + goal.GetName() + "> - skipped \n" )
		}
	}
}

MAIN()