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);
}