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)