Gatan | AMETEKSkip to Main Content
No options found

Timebar on image

DigitalMicrograph Script

Display a digital clock on the frontmost image (demonstrate periodic tasks).

Preview

/////////////////////////////////////////////////////////////////////
// (c) Gatan Inc.
/////////////////////////////////////////////////////////////////////
// This script creates and updates a text-annotation on the front 
// most image, showing the current time.
//
// The update ends if SHIFT + CTRL + ALT are pressed simultaneously
//////////////////////////////////////////////////////////////////////
//	last modified 08-July-2014 BS

Class ImageTimeStamp
{
	image  target
	number interval 
	number selfTaskID
	component timebar
	number tBshowSec 
	number tBSize
	number tBRelPosX, tBRelPosY
	number tBDM
	string tBFont 
	number tBFG_r, tBFG_g, tBFG_b
	number tBBG_r, tBBG_g, tBBG_b

	void StartTimer( object self )	selfTaskID = AddMainThreadPeriodicTask( self, "UpdateBar", interval )
	void StopTimer( object self )	RemoveMainThreadtask(selfTaskID)
	
	void SetTimeBarDefaults( object self )
	{
		tBFont =  "Arial"
		tBshowSec = 1
		tBSize = 14
		tBRelPosX = 0.1;		tBRelPosY = 0.9;
		tBDM = 2;
		tBFG_r = 0;		tBFG_g = 1;		tBFG_b = 0;
		tBBG_r = 0;		tBBG_g = 0;		tBBG_b = 0;
	}
		
	component CreateTimeBar( object self )
	{
		number sx,sy
		target.ImageGetorCreateImageDocument().ImageDocumentGetWindow().WindowGetContentSize(sx,sy)
		component bar = NewTextAnnotation( target.ImageGetImageDisplay(0), sx*tBRelPosX, sy*tBRelPosY, GetTime(tBShowSec), tBSize )
		bar.ComponentSetForegroundColor( tBFG_r, tBFG_g, tBFG_b )
		bar.ComponentSetBackgroundColor( tBBG_r, tBBG_g, tBBG_b )
		bar.ComponentSetDrawingMode( tBDM )
		bar.ComponentSetFontFaceName( tBFont )
		return bar
	}
	

	object Init( object self, image img, number sec )
	{
		target   := img
		interval = sec	
		
		self.SetTimeBarDefaults()
		timebar = self.CreateTimeBar()
		img.ImageGetImageDisplay(0).ComponentAddChildAtEnd( timebar )
		
		self.StartTimer()
		return self
	}
	
	
	void UpdateBar( object self )
	{
		if ( 0 == target.ImageCountImageDisplays() )
			self.StopTimer()
			
		if ( ShiftDown() && OptionDown() && ControlDown() )
			self.StopTimer()
			
		timebar.TextAnnotationSetText( GetTime(tBShowSec) )
	}

}

// Main Call
Image img 
number updateIntervalSec = 1
if ( GetFrontImage(img) )
	Alloc(ImageTimeStamp).Init(img,updateIntervalSec)