timezone.sml

  Download

More scripts: Enhanced Data Tip

Syntax Highlighing:

comments, key words, predefined symbols, class members & methods, functions & classes
            
# 2 Aug 2004 written by Merri Skrdla and Cindy Robbins
# This control script displays a GraphTip showing current local time at the cursor position
#Data: timezonesINTL.rvc timezones20 vector object, group also uses polbnda from bnd.rvc in the World Data Set
# use mask to make the square area around the clock face transparent
class GRDEVICE_MEM_BINARY maskdev;
class GRDEVICE_MEM_RGB24 imagedev;
class GC gc;
class POINT2D offset;
class GRE_LAYER_VECTOR  timezone_layer;
class VECTOR Vect;
class GRE_GROUP group;
class TRANSPARM trans;
class POINT2D cursorPt;
class GEOREF georef;
class COLOR color;
proc OnInitialize () {
	imagedev.Create(100,100);
	maskdev.Create(100,100);
	gc = maskdev.CreateGC();
	gc.SetColorPixel(1);
	gc.FillCircle(50,50,40);
#	gc.SetColorPixel(0);
#	gc.FillCircle(50,50,3);
	offset.x = -50;
	offset.y = -50;
}
proc OnGroupCreateView (class GRE_GROUP group) {
   timezone_layer = group.FirstLayer;
   DispGetVectorFromLayer (Vect, timezone_layer);
   georef = GetLastUsedGeorefObject(Vect);
}
func OnViewDataTipShowRequest (
	class GRE_VIEW view,
	class POINT2D point,
	class TOOLTIP datatip
	) {
   trans = view.GetTransLayerToScreen(timezone_layer, 1);
   cursorPt = trans.ConvertPoint2DFwd (point);
	numeric closestPoly = FindClosestPoly(Vect,cursorPt.x, cursorPt.y, georef);
	local class DATETIME now;
	now.SetCurrent();
	numeric currentHour = now.GetHour();
	numeric currentMin = now.GetMin();
	numeric x=Vect.poly[closestPoly].timeznp020[1].Central_OffsetH; #number of hours offset  from Central Standard time (my time zone)
	numeric minOffset = (x % 1) * 60;
	numeric hourOffset= int (x);
	if ((currentMin + minOffset) >= 60)
		hourOffset = hourOffset + 1;
	numeric modifiedMin = (currentMin + minOffset) % 60;
	numeric modifiedHour = (hourOffset + currentHour) ;
	gc = imagedev.CreateGC();
	if (((modifiedHour%24) >=22) or ((modifiedHour%24) < 8)) #clock face color
		gc.SetColorName("misty rose"); #10p.m. to 7:59 a.m.
	else gc.SetColorName("sea foam"); #8 a.m. to 9:59 p.m.
	gc.FillCircle(50,50, 40);
	gc.SetColorName("black");
	gc.DrawCircle(50,50,40);
	gc.MoveTo(50,50);
	local numeric h = ((modifiedHour% 12) +modifiedMin/60)* 30 - 90;	# hrs to deg
	local numeric m = modifiedMin * 6 - 90;	# min to deg
	gc.DrawTo(20*cosd(h) + 50 , 20*sind(h) + 50); #draw hour hand; length is 20; add 50 so all are positive numbers
	gc.MoveTo(50,50);
	gc.DrawTo(30*cosd(m) + 50, 30*sind(m) + 50); # draw minute hand; length is 30
#add numbers to clock face
gc.DrawTextSetFont("ARIAL.TTF");
gc.DrawTextSetHeightPixels(9); 
color.Name="black"; 
gc.SetColor(color);
gc.DrawTextSetColors(color);
gc.DrawTextSimple("12",47,20);
gc.DrawTextSimple("6",49,88);
gc.DrawTextSimple("3",82,52);
gc.DrawTextSimple("9",13,52);
#add tick marks to clock face
numeric tick1, tick2, tick4, tick5, tick7, tick8, tick10, tick11;
tick1=1 * 30 - 90;
tick2=2 * 30 - 90;
tick4=4* 30 -90;
tick5=5* 30 -90;
tick7=7* 30 -90;
tick8=8* 30 -90;
tick10=10* 30 -90;
tick11=11* 30 -90;
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick1) + 50, 35*sind(tick1) + 50);
gc.DrawTo(50 *cosd(tick1) + 50, 50*sind(tick1) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick2) + 50, 35*sind(tick2) + 50);
gc.DrawTo(50 *cosd(tick2) + 50, 50*sind(tick2) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick4) + 50, 35*sind(tick4) + 50);
gc.DrawTo(50 *cosd(tick4) + 50, 50*sind(tick4) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick5) + 50, 35*sind(tick5) + 50);
gc.DrawTo(50 *cosd(tick5) + 50, 50*sind(tick5) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick7) + 50, 35*sind(tick7) + 50);
gc.DrawTo(50 *cosd(tick7) + 50, 50*sind(tick7) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick8) + 50, 35*sind(tick8) + 50);
gc.DrawTo(50 *cosd(tick8) + 50, 50*sind(tick8) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick10) + 50, 35*sind(tick10) + 50);
gc.DrawTo(50 *cosd(tick10) + 50, 50*sind(tick10) + 50);
gc.MoveTo(50,50);
gc.MoveTo(35 *cosd(tick11) + 50, 35*sind(tick11) + 50);
gc.DrawTo(50 *cosd(tick11) + 50, 50*sind(tick11) + 50);
#draw the GraphTip
datatip.SetImageTip(imagedev, maskdev, offset);
return (true);
	}