home products news downloads documentation support gallery online maps resellers search
TNTmips Downloads Menu

HOME

CONTACT US

CURRENT RELEASE
  TNT 2013

DEVELOPMENT VERSION
  TNT 2014

TNTmips Pro
PRIOR RELEASES
  TNT 2012

FREE SOFTWARE
  TNTmips Free
  TNTatlas
  TNTsdk

MORE DOWNLOADS
  HASP Key Driver
  Screen Recorder
  TNT Language Kits
  Sample Geodata
  TNT Scripts

DOCUMENTATION
  TNTmips Tutorials
  Tutorial Datasets
  Technical Guides
  Scripts
  Quick Guides

MORE INFO
  Download FAQs
  FTP
  Download Managers
  Find Reseller

SITE MAP


AspectTip2.sml

  

See other examples and scripts with DataTips and GraphTips ...


### AspectTip2.sml

### sample Display Control Script

### Creates a DataTip graphic within normal DataTip frame and background.
### DataTip information from other layers is suppressed.

### Assumptions: Display layout includes a group named "Group 1" 
### containing a raster object named "ASPECT".


################ Global Variables ###########################
class RVC_RASTER ASPECT;				# the aspect raster object
class GRE_LAYER aspectLayer;		# the layer containing the aspect raster
class GRDEVICE_MEM_RGBA dev;		# RGB Alpha (opacity) graphics rendering device in memory for drawing in DataTip
class COLOR transparent(0, 0, 0, 0);		# transparent color to clear device

numeric height, width;			# height and width of graphics rendering device

#################################################################
### procedure called when group or layout is initialized
proc OnInitialize () {
	width = 110;				# set width of rendering device in pixels
	height = width * 1.45;	# set height of rendering device in pixels
	dev.Create(height, width);		# create graphics rendering device
	}


##################################################################
### procedure called when view is created for layout
### Modify target group name and raster name to fit your data.
proc OnLayoutCreateView (
   class GRE_LAYOUT layout,
   class GRE_VIEW view
   ) {

	local class GRE_GROUP group;
	local class RVC_RASTER rast;
	local class GRE_LAYER layer;
	local string name$;				# name of the target raster object

	# locate the Group in the layout
	group = layout.FirstGroup;		# start with first group in layout

	while (group.Name != "Group 1")	# iterate through groups until find named group
		group = group.NextGroup;

	# find the aspect raster by its object name "ASPECT"
	layer = group.FirstLayer;

	while (name$ != "ASPECT")
		{
		# check if layer with single raster; if so, get object name
		if (layer.TypeID == "Raster"  && layer.GetNumObjects() == 1)
			{
			DispGetRasterFromLayer(rast, layer);	# get raster object from layer
			name$ = rast.$Info.Name;	# check name of raster object

			if (name$ == "ASPECT")
				{
				aspectLayer = layer;
				DispGetRasterFromLayer(ASPECT, layer);	# assign object to global raster instance
				} # end if
			} # end if

		layer = layer.NextLayer;	# move to next layer in group

		} # end while
	} # end of proc OnLayoutCreateView

##########################################################
### function called when DataTip request is made
func OnViewDataTipShowRequest (
   class GRE_VIEW view,
   class POINT2D point,
   class TOOLTIP datatip
   ) {

	local class TRANSPARM trans;	# coordinate transformation parameters
	local numeric lin, col;			# current line and column position
	local numeric aspect;			# value from the ASPECT raster for cell under cursor
	local string aspect$;			# aspect value string

	local class GC gc;					# graphics context for the graphics rendering device
	local class COLOR color;			# reusable color for drawing
	local class POINT2D center;		# position of center of rotation of aspect arrow
	local class POINT2D arrowEnd;		# position used to draw arrow head for aspect pointer
	local numeric radius;				# radius of aspect circle
	local numeric aspectDrawAngle;	# angle used for drawing aspect arrow
	local numeric arrowLength;			# half-length of aspect pointer in pixels
	local numeric boxtop;				# y position of top of label rectangle
	local numeric start;					# computed start position for centered text


	# get transform from screen to layer coordinates and convert cursor position to layer coordinates
   trans = view.GetTransLayerToScreen(aspectLayer, 1);	# 1 for second parameter gets the inverse transform
	point = trans.ConvertPoint2DFwd(point);

	lin = floor(point.y);				## line and column position of cell under cursor
	col = floor(point.x);

	aspect = ASPECT[lin, col];

	if (aspect <> ASPECT.$Info.NullValue)	# if cursor is not over a null cell
		{
		### clear the graphics rendering device
		dev.Clear(transparent);

		### Draw static GraphTip elements
		gc = dev.CreateGC();		# create graphics context

		# draw background circle for aspect indicator and rectangle for aspect text
		center.x = width * 0.5;
		center.y = center.x;
		radius = width * 0.45;
		boxtop = center.x * 2;
		gc.SetColorRGB(230, 255, 230);
		gc.FillCircle(center.x, center.y, radius);
		gc.FillRect(15, boxtop, width-30, 35);

		# draw black circle outline and black rectangle outline
		gc.SetColorName("black");
		gc.DrawCircle(center.x, center.y, radius);	# circle outline
		gc.DrawRect(15, boxtop, width-30, 35);			# rectangle outline

		# set parameters for drawing Aspect text label in rectangle
		gc.DrawTextSetFont("ARIALBD.TTF");
		gc.DrawTextSetHeightPixels(12);
		color.Name = "black";
		gc.DrawTextSetColors(color);

		# draw centered Aspect label in rectangle
		start = center.x - ( gc.TextGetWidth("Aspect:") * 0.5 );
		gc.DrawTextSimple("Aspect", start, boxtop + 15);

		# set aspect text and pointer parameters
		gc.DrawTextSetFont("ARIAL.TTF");		# font for aspect value string

		if (aspect == -1) { 		# flat area with aspect undefined; only write string
			aspect$ = "Undefined";
			start = center.x - ( gc.TextGetWidth(aspect$) * 0.5 );
			gc.DrawTextSimple(aspect$, start, boxtop + 30);
			}

		else {				# draw aspect value and pointer
			aspect$ = sprintf("%.1f deg", aspect);		# create and draw aspect label string
			start = center.x - ( gc.TextGetWidth(aspect$) * 0.5 );
			gc.DrawTextSimple(aspect$, start, boxtop + 30);

			aspectDrawAngle = (aspect - 90);				# drawing angle for aspect pointer
			arrowLength = 40;
			gc.SetLineWidth(3);	# set line width to 3 pixels for pointer

			### find and store coordinates of end of pointer line
			arrowEnd.x = center.x + arrowLength * cosd(aspectDrawAngle);
			arrowEnd.y = center.y + arrowLength * sind(aspectDrawAngle);

			### move to start of pointer line and draw to end
			gc.MoveTo( center.x - arrowLength * cosd(aspectDrawAngle), center.y - arrowLength * sind(aspectDrawAngle) );
			gc.SetColorName("red");
			gc.DrawTo(arrowEnd.x, arrowEnd.y);

			### draw arrowhead and small black circle at center of rotation of pointer
			gc.DrawArrow(arrowEnd.x, arrowEnd.y, aspectDrawAngle, 9, 30, "Open");
			gc.SetColorName("black");
			gc.FillCircle(center.x, center.y, 3);

			datatip.AppendImage(dev);		# add the graphics device to the DataTip
			datatip.AppendText("\n");

			return 1;		# suppress other DataTip components
			}

		} # end if not over null cell

	else return -1;	# if outside ASPECT raster or on null cell, don't show any DataTip

	} # end OnViewDataTipShowRequest









Back Home ©MicroImages, Inc. 2013 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

25 March 2009

page update: 26 May 11