#VRML V2.0 utf8					
# Axes view-controller prototype a component in a 3D data plotting application 
# Kurt A. Fisher fisherka@csolutions.net  beginner level VRML coder
# 12/2003

#     The limits of this graph box are set dynamically in the prototype.  
#     The axes, the axes labels and the viewpoints are scaled to a 1 unit size. 
#     A transformation resizes the axes to fit the needed size for the world.  
#
#     VRML normally plots with "z" pointing up out of the screen 
#       and the x-y axis plotting on the flat screen. 
#       The positive x-axis is to the right.
#       The positive y-axis is to the top. 
#
#     For display in normal galactic plane (z at top with positive x 
#       pointing out of the screen and towards the galactic center), 
#       A two-fold rotation is used to rotate the axis and world to the 
#       desired normal orientation. 

#       This rotation into normal galactic display is accomplished with 
#       two fold 90 degree rotations - once around the z axis and once around 
#       the x-axis.  Once these rotations are applied, x, y, z in a standard 
#       VRML rotation, if reference from outside the rotated object, are: 
#		Before		x	y	z
#		After		y	z	x

#       Tickmarks are at scaled 0.10 * scaleAxis[0] / scaleData[0] objects
#       E.g. - 0.10 & 6x axis scale up / 2x object scale up = .3 scale 

#  This application was developed for use in triaxial position modeling 
#   of astronomical objects.  Occassional coding references may reflect this bias. 

#  Objects used: 
#	None -  Axes_Ctrl is a root object 

#   Objects outline
#	Controller 		->Control_Panel -> Views 	
#			-> Axes_Ctrl view (this file)	
#			-> Data views (Data_Sets) ->
#				Model ->
#				DataSet (external file) -> Plotting object types (lib directory) 

PROTO AXES_CTRL [ 
	exposedField MFString	strTitle			[ "Title", "Scale is", "1 tick mark =", " " ]	#  display label for world and scale 
	exposedField SFVec3f 	scaleAxis			2.0 2.0 2.0 				# Tickmarks are at scaled 0.10 * scaleAxis[0] / scaleData[0] objects 
	exposedField SFColor	axisColor			0.0 0.0 0.0				#  color for the fonts and axes 
	exposedField SFVec3f	scaleViewPoints		4.0 4.0 4.0				#  scale viewpoints around world 
	exposedField SFVec3f	scaleTickMarkSize		0.005 0.005 0.005 			#  scale size of sphere tick marks on axes 
	exposedField MFString	lblaxisXplus		[ "+X l=0 b=0","Sgr Gal. core" ]		#  display label for world and scale 
	exposedField MFString	lblaxisXminus		[ "-X l=180", "b=0 Ori" ]		#  display label for world and scale 
	exposedField MFString	lblaxisYplus		[ "+Y l=90", "b=+0 Cyg" ]		#  display label for world and scale 
	exposedField MFString	lblaxisYminus		[ "-Y l=270", "b=+0 Vel" ]		#  display label for world and scale 
	exposedField MFString	lblaxisZplus		[ "+Z l=0 b=+90","NGP Com" ]		#  display label for world and scale 
	exposedField MFString	lblaxisZminus		[ "-Z l=0 b=-90","SGP Scl" ]		#  display label for world and scale 
	exposedField MFString	urlWorldInfo		[ "WorldInfo.htm" ]			#  anchor for world information 
	exposedField SFRotation	convertCoordinateSys	0.000 0.000 0.000 0.000		#  Rotate the entire axes object to a new coordinate system; usually leave as 0 0 0 0.00
#							#      E.g. convert frame between galactic, equatorial and horizon systems 
] # end PROTO Fields
# Begin PROTO OBJECT
{

Transform  { 		# rotate the entire object to new coordinate system 
#			x	y	z	rot
	rotation IS convertCoordinateSys
	children [


DEF firstAxesRotationX Transform { 
#	rotation 1.0 0.0 0.0 -1.571 # first rotation of world around x-axis - disabled - not needed 
	children [

DEF secondAxesRotationZ Transform { 
#	rotation 0.0 1.0 0.0 1.571 # second rotation of world around z-axis - disabled - not needed 
	scale IS scaleViewPoints
	children [

# ------------------------------------

# Slice viewpoints 

	# x-y slice polar x=0 deg, z=90 deg, rotate 90 deg around z
	Viewpoint { 
		description "x-y slice"
#				y          z         x
		position 		+0.000 +1.000 +0.000 
#				y       z        x        rot
		orientation 	-0.577 -0.577 -0.577 2.095
		jump	TRUE
	} # end of Viewpoint

	# x-z slice; same as polar x=270 deg, z=0 deg
	Viewpoint { 
		description "x-z slice"
#				y          z         x
		position		-1.000 +0.000 +0.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 4.712
		jump	TRUE
	} # end of Viewpoint

	# y-z slice; same as polar x=0 deg, z=0 deg
	Viewpoint { 
		description "y-z slice"
#				y          z         x
		position 		+0.000 +0.000 +1.000 
#				y       z        x        rot
		orientation 	0.000 1.000  0.000 0.000
		jump	TRUE
	} # end of Viewpoint

# Circumnavigate world from outside viewpoints 

# Viewpoints
	#Viewing slideshow
	# polar x=0 deg, z=5 deg
	Viewpoint { 
		description "polar x=0 deg, z=5 deg"
#				y          z         x
		position 		+0.000 +0.087 +1.000 
#				y       z        x        rot
		orientation 	0.000 1.000  0.000 0.000
		jump	TRUE
	} # end of Viewpoint

	# polar x=45 deg, z=10 deg
	Viewpoint { 
		description "polar x=45 deg, z=10 deg"
#				y          z         x
		position		+0.707 +0.175 +0.785
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 0.785
		jump	TRUE
	} # end of Viewpoint

	# polar x=90 deg, b=5 deg
	Viewpoint { 
		description "polar x=90 deg, z=5 deg"
#				y          z         x
		position		+1.000 +0.087 +0.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 1.571
		jump	TRUE
	} # end of Viewpoint

	# polar x=135 deg, z=10 deg
	Viewpoint { 
		description "polar x=135 deg, z=10 deg"
#				y          z         x
		position		+0.707 +0.175 -0.707
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 2.357
		jump	TRUE
	} # end of Viewpoint

	# polar x=180 deg, z=0 deg
	Viewpoint { 
		description "polar x=180 deg, z=0 deg"
#				y          z         x
		position		+0.000 +0.087 -1.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 3.142
		jump	TRUE
	} # end of Viewpoint

	# polar x=225 deg, y=10 deg 
	Viewpoint { 
		description "polar x=225 deg, y=10 deg"
#				y          z         x
		position		-0.707 +0.175 -0.785
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 3.928
		jump	TRUE
	} # end of Viewpoint

	# polar x=270 deg, z=5 deg
	Viewpoint { 
		description "polar x=270 deg, z=5 deg"
#				y          z         x
		position		-1.000 +0.087 +0.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 4.712
		jump	TRUE
	} # end of Viewpoint

	# polar x=315 deg, z=10 deg  
	Viewpoint { 
		description "polar x=315 deg, z=10 deg"
#				y          z         x
		position		-0.707 +0.175 +0.707
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 5.498
		jump	TRUE
	} # end of Viewpoint

	# polar x=0 deg, z=90 deg
	Viewpoint { 
		description "polar x=0 deg, z=90 deg"
#				y          z         x
		position 		+0.000 +1.000 -0.087 
#				y       z        x        rot
		orientation 	1.000 0.000  0.000 -1.571
		jump	TRUE
	} # end of Viewpoint

	# polar x=0 deg, y=-90 deg
	Viewpoint { 
		description "polar x=0 deg, y=-90 deg"
#				y          z         x
		position 		+0.000 -1.000 +0.087 
#				y       z        x        rot
		orientation 	1.000 0.000  0.000 +1.571
		jump	TRUE
	} # end of Viewpoint

# ------------------------------------
# Down axes viewpoints 

	# Origin - out  +x axis z=1 deg , above 0,0,0 to polar x=0 deg, z=0 deg
	Viewpoint { 
		description "origin down +x to polar x=0 deg"
#				y          z         x
		position		0.000 +0.017 -0.005
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 +3.142
		jump	TRUE
	} # end of Viewpoint

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg
	Viewpoint { 
		description "origin down +y to polar x=90 deg"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 -1.571
		jump	TRUE
	} # end of Viewpoint

	# Origin - out  -x axis z=180 deg  above 0,0,0 polar x=0 deg, z=0 deg 
	Viewpoint { 
		description "origin down -x to polar x=180 deg"
#				y          z         x
		position		0.000 +0.017 +0.005
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 -6.283
		jump	TRUE
	} # end of Viewpoint

	# Origin - out  -y axis z=1 deg.  above 0 0 0 polar x=270 deg, z=0 deg
	Viewpoint { 
		description "origin down -y to polar x=270 deg"
#				y          z         x
		position		0.000 +0.017 +0.000
#				y       z        x        rot
		orientation 	0.000 1.000 0.000 -4.712
		jump	TRUE
	} # end of Viewpoint

	# Origin - Look up +z axis z=1 deg. above 000 polar x=0 deg, z=90 deg
	Viewpoint { 
		description "origin up +z to polar z=90 deg"
#				y          z         x
		position		0.000 +0.017 +0.017
#				y       z        x        rot
		orientation 	1.000 .000 0.000 1.571
		jump	TRUE
	} # end of Viewpoint

	# Origin - Look down -z axis z=1 deg. above 000 polar x=0 deg, z=-90 deg
	Viewpoint { 
		description "origin down -z to polar z=-90 deg"
#				y          z         x
		position		0.000 +0.017 -0.017
#				y       z        x        rot
		orientation 	1.000 .000 0.000 -1.571
		jump	TRUE
	} # end of Viewpoint

# ------------------------------------
# Latitude viewpoints 

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to 60 deg latitude 
	Viewpoint { 
		description "origin down +y at +60 deg latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.251 -0.935 0.251 1.638
		jump	TRUE
	} # end of Viewpoint


	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to 40 deg latitude 
	Viewpoint { 
		description "origin down +y at +40 deg latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.324 -0.889 0.324 1.688
		jump	TRUE
	} # end of Viewpoint

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to 30 deg latitude 
	Viewpoint { 
		description "origin down +y at +30 deg latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.447 -0.775 0.447 1.824
		jump	TRUE
	} # end of Viewpoint

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to 20 deg latitude 
	Viewpoint { 
		description "origin down +y at +20 deg latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.498 -0.711 0.497 1.906
		jump	TRUE
	} # end of Viewpoint

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to 0 deg latitude 
	Viewpoint { 
		description "origin down +y at equator"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.577 -0.577 0.577 2.095
		jump	TRUE
	} # end of Viewpoint


	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to -30 deg latitude 
	Viewpoint { 
		description "origin down +y at -30 latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.655 -0.378 0.655 2.419   # Compromise orientation 
#		orientation 	-0.695 0.186 0.695 3.51      # Correct orientation by inverts display 
		jump	TRUE
	} # end of Viewpoint

	# Origin - out y axis z=1 deg  above 0,0,0 polar x=90 deg, z=0 deg rotated to -60 deg latitude 
	Viewpoint { 
		description "origin down +y at -60 latitude"
#				y          z         x
		position		0.000 +0.017 0.000
#				y       z        x        rot
		orientation 	-0.695 -0.186 0.695 2.773   # Compromise orientation 
#		orientation 	-0.654 0.378 0.655 3.864    # Correct orientation by inverts display 
		jump	TRUE
	} # end of Viewpoint




# ------------------------------------

	] # end children secondAxesRotationZ - around Z axis 
} # end Transform secondAxesRotationZ around Z axis 

	] # end children firstAxesRotationX - around X axis 
} # end Transform firstAxesRotationX around X axis 
# End of Viewpoints


# BEGIN AXES OBJECT 
# Two-fold rotation of world to normal galactic presentation - looking down postive x axis l=0 to Orion at l=180 
DEF firstWorldRotationX Transform { 
	rotation 1.0 0.0 0.0 -1.571 # first rotation of world around x-axis
	children [

DEF secondWorldRotationZ Transform { 
	rotation 0.0 0.0 1.0 -1.571 # second rotation of world around z-axis
	children [

# X-Y-Z AXIS LINES WITH AUTOMATIC SCALING 
DEF XYZaxis Transform {	
			center 0.0 0.0 0.0 
			translation 0.0 0.0 0.0
			scale IS scaleAxis
	children [
#  AXES LINES  
		DEF AxisLines Shape {						
			appearance Appearance {					
				material Material {				
# Syntax - lineSet objects are emissive, not diffuse color 
					emissiveColor IS axisColor
				} # end Material 				
			}					
			geometry IndexedLineSet {					
				coord Coordinate {				
					# X-axis scaled 
					point [	
						1.0 0.0 0.0,
						-1.0 0.0 0.0,
						0.0 1.0 0.0, 
						0.0 -1.0 0.0,  
						0.0 0.0 1.0, 
						0.0 0.0 -1.0
					] # end point 	
				} # end Coordinates 		
				coordIndex [ 0, 1, -1,
					     2, 3, -1,
					     4, 5 
					   ] # end of coordIndex 		
			} # end geometry IndexedLineSet			
		} # End of x-y-z axis lines  


#  TICK MARKS ON AXIS LINES 
#  Hard-coded scaling in 10ths using individual spheres
DEF TickMarks Group {
	children [ 

# Define the first tickmark 
DEF TickMark Transform {
	translation 	-0.900	0.000	0.000
	scale IS scaleTickMarkSize
	children [
		DEF TickMarkSphere Shape {	
					appearance Appearance {					
					material Material {				
#						diffuseColor IS axisColor
						emissiveColor IS axisColor
						} # end Material 				
					} # end Appearance 
					geometry Sphere { }
				} # end Shape TickMarkSphere 
		] # end of children Transform scale TickMark 
	} # end of Transform TickMark 

# Re-use the tickmark definition 
	#  X-Axis
Transform { translation -0.100 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.200 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.300 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.400 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.500 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.600 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.700 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.800 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -0.900 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation -1.000 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.100 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.200 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.300 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.400 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.500 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.600 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.700 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.800 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +0.900 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation +1.00 0.000 0.000  scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
	#  Y-Axis
Transform { translation 0.000 -0.100 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.200 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.300 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.400 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.500 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.600 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.700 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.800 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -0.900 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 -1.000 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.100 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.200 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.300 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.400 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.500 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.600 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.700 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.800 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +0.900 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 +1.000 0.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
	#  Z-Axis
Transform { translation 0.000 0.000 -0.100 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.200 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.300 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.400 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.500 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.600 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.700 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.800 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -0.900 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 -1.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.100 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.200 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.300 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.400 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.500 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.600 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.700 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.800 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +0.900 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }
Transform { translation 0.000 0.000 +1.000 scale IS scaleTickMarkSize children [ USE TickMarkSphere ] }

	] # end children Group TickMarks
} # end Group TickMarks

# WORLD OR CHART TITLE  (with world info help link )
		Transform {
			translation  0.50 1.00 0.94   	#  z axis placement is 1 minus font size
#							#  place title at back to promote better auto fitting
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
#  Anchor link to world info and help page in new browser instance
						DEF SO_Anchor_Sphere Anchor {
						url IS urlWorldInfo
						description "World information and help" 
#  Pop-up display disabled 				parameter [ "target='_blank'" ]
						children [
#  Label 
							Shape {
								appearance Appearance { 
									material Material { 
#									diffuseColor  IS axisColor
									emissiveColor  IS axisColor
									} # end of Material 
								} # end of Appearance
							    	geometry Text {
						        		string IS strTitle
									fontStyle FontStyle { 
#   fix - horizontal down panning 
										family "SANS"
										style "BOLD"
										justify "END"
										size 0.03
									} # end of Fontstyle 
								} # end of geometry Text 
							} # end of Shape 
						] # end children Anchor 
					} # end Anchor	
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform World or Chart Label 

# AXIS LABELS 
# +X-Axis Label 
		Transform {
			translation	+1.1 0.0 0.0
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor  IS axisColor
								emissiveColor  IS axisColor
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisXplus
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform +X-Axis Label 

# -X Axis Label 
		Transform {
			translation	-1.1 0.0 0.0
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor  IS axisColor
								emissiveColor  IS axisColor
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisXminus
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform End of -X-Axis Label 

# +Z-Axis Label 
		Transform {
			translation	0.0 0.0 +1.1 
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor  IS axisColor
								emissiveColor  IS axisColor
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisZplus 
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform End of +Z-Axis Label 

# -Z-Axis Label 
		Transform {
			translation	0.0 0.0 -1.1 
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor  IS axisColor
								emissiveColor  IS axisColor
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisZminus
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform End of -Z-Axis Label

# +Y-Axis 
		Transform {
			translation	0.0 1.1 0.0
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor IS axisColor 
								emissiveColor IS axisColor 
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisYplus
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform end of +Y-Axis Label 

# -Y-Axis Label 
		Transform {
			translation	0.0 -1.1 0.0 
			children [
# Begin billboarding text label
				Billboard {
					axisOfRotation 0 0 0
					children [ 
# Label 				
						Shape {
							appearance Appearance { 
								material Material { 
#								diffuseColor IS axisColor 
								emissiveColor IS axisColor 
								} # end of Material 
							} # end of Appearance
						    	geometry Text {
					        		string IS lblaxisYminus
								fontStyle FontStyle { 
									family "SANS"
									style "BOLD"
									justify "MIDDLE"
									size 0.03
								} # end of Fontstyle 
							} # end of geometry Text 
						} # end of Shape 
					] # of children Billboard 			
				} # end of Billboard 
			] # end of children Transform 
		} # end of Transform End of -Y-Axis Label 

	] # end children
} # end Transform Group Axes Group with scaling 

	] # end children secondWorldRotationZ - around Z axis 
} # end Transform secondWorldRotationZ around Z axis 

	] # end children firstWorldRotationX - around X axis 
} # end Transform firstWorldRotationX around X axis 
# END OF AXES AND LABELS OBJECT 

	] # children Transform Convert to new coordinate system
} # end Transform Convert to new coordinate system 

 } # end PROTO OBJECT

