Vega  FAQ's

151   What Sensor Products are available for Vega

MultiGen-Paradigm has an excellent set of optional Sensor suites modules for MultiGen-Paradigm Vega, Vega provides 3 primary Sensor Modules:

• Sensor Vision which is a software toolkit that computes and displays quantitative infrared sensor images of any environment containing natural backgrounds, cultural features, and dynamic objects
• Sensor Works  increases the functionality of SensorVision by applying realistic sensor effects to the rendered SensorVision image. SensorWorks effects can be visually specified via graphics parameters or analytically specified via actual sensor parameters to match the characteristics of a wide range of specific sensors.
• Radar Works creates real-time, physics based simulations of imaging radar operating against synthetic environments comprised of natural backgrounds and cultural features.
RadarWorks operates on the same synthetic environments as Vega and SensorVision, to produce correlated out the window, infrared, and radar views

152   Why is the no Sensor information in these FAQ's

Due to the nature of MultiGen-Paradigm's Senor Suite products they fall under export restrictions imposed by the US State department and thus the dissemination of information and code on these products is also restricted and I fully respect those restrictions, thus I'm unable to provide code and FAQ's on the Sensor products

For further information and Help and the Sensor product you need to contact the MultiGen-Paradigm support department directly and they will be able to discuss you question and concerns directly, but note that are also bound by the restrictions imposed by the US state department.

153   I can see my Creator Terrain file in Vega

One reason might be because when MultiGen Creator builds a terrain file it will apply it's real world coordinate positions which is then picked up by Vega when the files is loaded

And what you usually find is that the user is initialising their observer at the default coordinate origin of 0,0,0 but the terrain is being read in and positioned thousands on miles/kilometres away

What you can do correct this situation is to use MultiGen Creator to find the coordinates of the terrain and enter them as an the start position for the Observer in Lynx, alternatively you can use the Object Viewer in Vega to find the location

Also you might be at the centre of your terrain but just  under there terrain and as by default Vega does not render back faces you will not see the terrain. You can again correct his in the same manner as above.

Another problem might be that the scale of the terrain is wrong check the units you modeled are not say millimetres, as the default units for Vega is Meters.

Also check that the file is actually being loaded, look in the console to see if there were any warning about not being able to load the file

154  How can I find the Z at a given point on my terrain

If you now the X and Y position that you want to find the Z then you can simple use a vgIsector such as Z or Hat Isector.

You would then simply position the vgIsector at the given X and Y coordinates, do the intersection test and retrieve the Z from the returned Hit results

See the examples provide with Vega

• ...\Sample\Vega\pguide\ch08\Z
• ...\Sample\Vega\pguide\ch08\hat
• ...\Sample\Vega\pguide\ch08\xyzpr

155 How can I reverse the Direction of my vgNavigator

Unfortunately the vgNavigator does not provide any built-in of automated way of reversing along it path

See vgSplineNavigator further details on the vgNavigator Class

156  What are vgNavigator Control Point Event Markers

A control point "Event Marker" is a data structure in a vgNavigator which is associated with a control point in a path file.

The vgNavigator class  process the event marker data and perform the actions it specifies during path traversal. A vgNavigator must contain at least one event marker per control point. The  vgNavigator interprets these markers and uses their data to determine how to traverse between two control points or what specific actions to take when a certain control point is reached.

So basically the Control Point Event Marker define how the vgNavigator traverse its path. The Event Marker can be created and set either through API or through the Vega Lynx Path Tool. A Control point can have multiple Event Makers

See vgSplineNavigator further details on the vgNavigator Class

157  What types of Control Point Event Markers are there

vgNavigator's support the following 14 Control Point Event Markers:

 VGNAV_EMPTY no action, the default event marker for each control point as each control point must have an event marker VGSPLINENAV_DURATION The time in seconds, that the navigator will  traverse the path segment VGSPLINENAV_VELOCITY The speed in database units per second, that the Navigator will traverse the along segment at a constant velocity VGSPLINENAV_VELOCITIES The speed in database units per second ,that the Navigator will traverse the segment with velocity, starting Speed at control point index and the End Speed at control point index + 1 VGSPLINENAV_LINEAR Traverse the segment in a linear interpolation method, this is an event marker must be the first marker for the control point. VGSPLINENAV_HERMITE Traverse the segment in using hermite spline interpolation method, this is an event marker must be the first marker for the control point VGSPLINENAV_TANGENTS Set tangent vectors at each control point of a hermite spline segment if tangents are not specified, the spline will default to a cardinal spline VGSPLINENAV_LOOP This closes the path by constructing a segment from the last control point to the first control point; The marker can occur at any control point index VGSPLINENAV_RESTART This tells the path not close the last and first segments, but to restart abd traverse the path again once the  end of the path has been reached, this marker can occur at any control point index VGSPLINENAV_START_INDEX Set the control point index to for were to begin traversing along the path, the default is control point index 0 VGSPLINENAV_START_DELAY Always a delay on the path starting such that the traversing of the path is delayed for a specified number of seconds VGSPLINENAV_ABSOLUTE_HPR This event marker tells the navigator to interpet the HPR as additive to the curve or absolute (i.e. whether or not a control points HPR is relative to the curve or in world coordinates) VG_TRUE or VG_FALSE.  VG_FALSE is the default behavior. VGSPLINENAV_LOOK_AT This event tells the navigator to turn and to look towards the given  point in space for the duration of a segment VGSPLINENAV_TENSION_FACTOR This event controls how loosely or tightly that the cardinal spline fits through the control points

158   Can  I attach a vgPart to a vgNavigator

No you cannot directly attach a vgPart to a vgNavigator in the same wasy you cannot attach a vgObject directly to a vgNavigator,you can only attach a vgPlayer to a vgnavigator and only attach a vgObject or another vgPlayer to a vgPlayer

If you wanted to do this you would have to:

• Detach your vgPart from its Parent vgObject
• Create a new vgObject using the vgPart
• Attach the vgObject to a vgPlayer
• Attach the vgPlayer to a vgnavigator

159   What is a Spline

Spline curves are relatively easy to calculate but very powerful to use and extremely useful. They are used to smoothly interpolate data between key-points, here's some useful links that explain spline in all their detail

• http://www.cubic.org/~submissive/sourcerer/hermite.htm
• http://www.math.auckland.ac.nz/~waldron/Hermite/hermite.html
• http://hejl.com/faq/Hermite.htm
• http://www.francischang.com/morph/#A_Brief_On_Splines
• http://designer.mech.yzu.edu.tw/article/articles/course/(2000-10-02)%20Curve%20representation.htm

160  How can I create a vgPath and vgNavigator

There are 2 ways to create a vgPath and vgNavigator.( Note that multiple vgNavigators can share one vgPath)

• The first way is to use the Vega Path Tool, which you launch from Vega LynX.
• The second way is through API, see this Code example for the basics

See vgSplineNavigator further details on the vgNavigator Class

161  How  Can I set the Start Index of a vgNavigator

This is quite straight forward using the VGSPLINENAV_START_INDEX property for the vgNavigator, for examples

 Code : -- int startIndex = 2; vgProp( myNavigator, VGSPLINENAV_START_INDEX, startIndex );

Note that the default start index is the first control point which is index 0;

See vgSplineNavigator further details on the vgNavigator Class

162  How can I tell the vgNavigator to Stop at the End of the Path

To make a vgNavigator stop at the end you would do:

 Code : -- vgProp( myNavigator, VGSPLINENAV_STOP_AT_END, VG_ON );

See vgSplineNavigator further details on the vgNavigator Class

163  How can I tell the vgNavigator to Restart a the End of the Path

To make a vgNavigator continue at the end you would do:

 Code : -- vgProp( myNavigator, VGSPLINENAV_STOP_AT_END, VG_OFF );

See vgSplineNavigator further details on the vgNavigator Class

164  What is the max number of control points for a vgPath and vgNavigator

The vgPaths use an INT  for the number of controls points which means on Windows you could have as many as INT_MAX = 2147483647 depending on your memory etc.

See vgSplineNavigator further details on the vgNavigator Class

165  Why are my Texures do Dark on NT but ok on Irix

If your using textures that were created on an SGI Irix Machine then this is a known issue in the differnces between Irix and Windows

SGI Monitors and graphics hardware uses a differnt setting for the Gamma output to that of a PC

So normally a the PC textures will look very bright on SGI machines while a SGI texture will look very dark

If we say that the SGI machines have a Gamma value of 1.0 then we can say the Windows PC's machines have a gamma value of around 1.7, this is typically the differnce in gamma

So the solution is to adjust your textures gamma/brightness either up or down depending on where they are being used

166  How can I create an AVI or Movie of My Application

There are several ways to create a Movie of a Vega Application

1. Use a Video card that has a S-Video output and connected up to a Video camera that accepts
2. Higher an Audio Visual company to capture the output and any audio with professional AV equipment ( or use your own professional equipment)
3. While running your application use the glReadPixels to capture the screen and use that to create and AVI/MPEG file using the appropriate API.
4. Vega ships with a simple examples that shows you some of the basics on creating an AVI, the samples is typically found  in ( Vega install location) Sample\Vega\pguide\ch03\MFCVega ).

The down side of he sample is that it needs use interaction and using glReadPixels is expensive and you will find it hard to control your application.

Another way which I have used in several cases, is to basically script your run-time such that you can replay it back with out user interaction. Typically you can use things like vpNavigators for dynamic objects,. If you have say update data coming in from a host simulator etc then you will need a method to record and play these back as well etc.

So you then control the speed of the application using frame time stamps

What's this means is that you can then take as long as needed to render  each frame, in fact you this usually means that you can use higher resolution than can in real-time. another benefit is you can also pause the process

Pseudo code is along these lines:

1) Get the reference time

2) Set number of frames a second

3) Work out the frame delta times

4) Work out the total number of frame required

5) for each frame

6) Set the Vega frame time stamp

7) Update Vega

8) Vega Draws the Frame

9) Capture the Frame

10) Process the captured frame with the AVI api

11) workout the next frame time stamp

12) inc frame number

13) goto 5, until no frame left

167  Can I get the Position of the Sun or Moon

Unfortunately with Vega you cannot actually retrieve the celestial positions of the Sun or Moon, neither can you retrieve the local application positions of the Sun and Moon

168 Can I use OpenGl with Vega

Yes you can intergrate OpenGL functions calls with in a Vega based program. OpenGL needs a valid draw context inorder to work, win Vega prime the draw context is created in the DRAW process.

Because the DRAW process is were the draw context is created and own to use Opengl you will have to either create Pre/Post draw callback functions on either a vgChannel or pfNode.

See the Vega forums on the MultiGen-Paradigm web site, a quick search using key words such as draw call backs  or Opengl will show you past discussions and possible examples

(at some point in the near future, I should have some simple examples on for this site)

169 Why do things look wrong after I use OpenGL

Note that Vega, Vega Prime,Performer and OpenGL use  lazy state evaluation for reasons of performance, as state chaning can be expensive in the graphics pipe line.

So basically any state change you make with you Opengl Code you typically will need to restore to it previous value, also you have to set the OpenGL state to that which you require to achieve you goals

You would do something along the lines of:

 Code : -- Enter your draw function ............     // // Save the current state //   pfPushState();   pfPushMatrix();   // // Set up a basic state //   pfBasicState();     Do you OpenGL stuff .................   Set you Opengl state ................   Draw you stuff.......................   // // Restore to entry state //   pfPopMatrix();   pfPopState();     Exit your draw function .............

170 How do I find a Switch Node in a vgObject

To find a a Switch node in a vgObject you need to use Performer functions to find the node

First you have to get the root pfNode from a vgObject and then use pfFindNode e.g.

171  How do I set a Switch Value

172 What is a Switch Node Mask

A Switch node mask is a powerful extension from Multigen-Paradigms to the pfSwitches node. Basic Switch nodes all the use to the API to draw either ALL the nodes children, None of the children or One of the Children.

For example:

if we have a switch node that has 4 nodes A B C D, we can draw [] or [ABCD] or [A]or [B] or [C] or [D], we can not have [AB] or [BC] with a basic switch node

Switch masks add a Powerful features to switch nodes that all Mask to be used to decide with children to draw, so that as  cobinations such as [AB] or [BC] or [ACD] can be used as well as None or All children.

With Switch mask when we set an index to enable a chile such as 'pfSwitchVal( switchNode, childNumber )' we are selecting the Mask to draw and not the child.

In Performer and Vega switch maskes cannot be created they have to be created in a modeling package such as Multigen-Paradigm's Creator., on basic switches can be created via code.

173 How do I remove the Switch Mask

It is possible to remove the Switch mask nodes so that the Switch will be have as basic switch. The Openflight loader for Vega and Performer creates a special node when a switch node is load from a file. This node allows for the use of Switch masks

The How to Restructure a Switch Node code sample shows how to remove the special switch mask controller node

174 How can I find the number of pfGeoSet's in an vgObject

175 How can I find the number of pfGeoSet's in an vgPart

176 How Do I load a 3d Model in Vega

In order to load a 3d model in Vega you can either

177  How can I create or use Opengl with an Object

Yes you can use Opengl with a vgObject, similar to the manner of using Opengl with a vgChannel Pre/Post draw callbacks.

Basically you have to create a dummy vgObject with a pfGroup node to use as the hooks for the Pre-draw callback to place the Opengl call in.

Remember that to use Opengl in Vega you need a draw context which has a valid OpenGl context

See Opengl with a Vega Object code sample for full details on how to achieve this

178 Can I use Vega in side my own application

Well it depends on what you mean by you own application.

If you mean inside a Win32, MFC, QT, X11 Motif based application then yes of course.

But if you mean inside of a container such as ActiveX or COM object, DLL etc then in most cases NO simply because Vega and SGI Performer are not designed to be re-enterant they are designed to close and fully exit which normally will kill your container application as well or result in large memory leaks, I say in most case becuase I know of some people that have had limited success with ActiveX

I would recommend moving across to Vega Prime if you need to use a container such as ActiveX

179 Were are the Vega Man Pages for Window

As Microsoft Windows does not directly support the MAN page format, The Man pages are distributed as HTML files with Vega NT, although slightly out of date.

The most up to date HTML Vega Man Pages can be found here on line, aso the can be download in a zip file from MPI

180 What version of Open flight is supported by Vega

Vega for NT 3.71 supports Openflight  15.7

To check simple load a flight file and in you console window when you load an Open Flight you should see something akin to the following

========================================================================

MultiGen Inc. OpenFlight (r) loader R15.7a

for Vega $Date: 2002/05/13 16:42:11$

========================================================================

181 Can I use a USB devices with Vega

Well Yes and No.

Vega will work with standard USB devices Keyboards, Mice, Ball Mice etc. Other devices may or may not works, as the Input library used by Vega is quite old and looking for Serial Port or IP port devices. It might by worth contacting MPI support directly to see if they can offer any advice on getting certain USB devices to works

182 Where are the vgPicker man pages

The Man Pages shipped with Vega are unfortunatley a little out of date and synch, The most up to date HTML
Vega Man Pages can be found here on line, aso the can be download in a zip file from MPI

The vgPicker man Page can be found in the above HTML pages (vgPicker.html)

183 How can I use the full path when loading a DataSet

To use the full path name simply use the full file path and name with the vgRemSceneObj call when setting the vgDataSet Name e.g

 Code : -- vgName( dataset, "c:\\work\\project1\\models\\urban\\house05.flt" );

Remember the setting the Name of a vgDataSet actaully also sets the path and file name to load in to the vgDataSet ( go figure whos bright idea this was)

184 How can I use the full path Name in Lynx & ADF's

In the Vega Lynx ADF application, If you use the file dialog to browse to a file , then Lynx  ill only use the file name and extension and strip the full path off.

Note that the full path is not lost  but will added to the vgPath which Vega use to find textures, models and other resources

To use the full file name and path the simpy enter the full path and name in the text box's with out using the file browsers

185  How can I hide a vgObject

There is at least a couple of ways to hide an vgObject.

Firstly you could simply remove the object from the vgScene with a call to vgRemSceneObj( m_scene, m_object );

If for some reason you want to get the vgobject i the scene but hide it then you have to do a little extra work and set the Draw Mask on the vgObject's Performer root node, along the following lines

 Code : -- pfNode *objNode = ( pfNode* )vgGetObjPfNode( m_myObject ); pfNodeTravMask( objNode, PFTRAV_DRAW, 0x0, PFTRAV_SELF, PF_SET );

This works by setting the mask to 0x0, which when logically anded with the vgChannels pfChannels draw mask stops the node and its children being drawn.

186  How can I hide a vgPart which is part of a vgObject

This can be achieved in the same way an vgObject can be hidden using the vgParts pfNode to set its Draw Mask:

 Code : -- pfNode *partNode = ( pfNode* )vgGetObjPfNode( m_myPart ); pfNodeTravMask( partNode, PFTRAV_DRAW, 0x0, PFTRAV_SELF, PF_SET );

187   How can I display a vgObject again after it was hidden

This is quite simple:

If the Object was hidden by removing it from the vgScene the simple call vgAddSceneObj( m_scene, m_object ); to add the oject back in to the Scene.

On the other hand if the vgObject was hidden youusing the draw mask then do something along the lines of:

 Code : -- pfNode *objNode = ( pfNode* )vgGetObjPfNode( m_myObject ); pfNodeTravMask( objNode, PFTRAV_DRAW, 0xFFFFFFFF, PFTRAV_SELF, PF_SET );

188    How can I display a vgObject again after it was hidden

This can be achieved in the same way an vgObject can be displayed using the vgParts pfNode to set its Draw Mask:

 Code : -- pfNode *partNode = ( pfNode* )vgGetObjPfNode( m_myPart ); pfNodeTravMask( partNode, PFTRAV_DRAW, 0xFFFFFFFF, PFTRAV_SELF, PF_SET );

189   Can I draw an Object in One Channel and not in Another

Yes you can draw a vgObject in one channel and not another, this can be a achieved using use Draw masks on the pfChannels and vgObjects

We do this by setting 2 different draw masks on the vgChannels, the default Draw masks for every things is 0xFFFFFFFF so that all every thing will be drawn in all channels

So we would set the draw mask on the 2 channels to be different, then set the draw mask of the vgObject to just match the draw mask of channel 0 so that  0x0000FFFF Logical AND  0x0000FFFF results in 0x00001111 so that the object will be draw in the channel 0, while the draw mask of channel 1  0xFFFF0000Logical AND  0x0000FFFF results in 0x00000000 will not be draw in the channel 1

 Code : -- pfChannel  *chan0 = ( pfChannel*) vgGetPfChan( vgGetChan(0) );; pfChannel  *chan1 = ( pfChannel*) vgGetPfChan( vgGetChan(1) ); pfNodeTravMask( chan0, PFTRAV_DRAW, 0x0000FFFF, PFTRAV_SELF, PF_SET ); pfNodeTravMask( chan1, PFTRAV_DRAW, 0xFFFF0000, PFTRAV_SELF, PF_SET ); pfNode *node = ( pfNode * ) vgGetObjPfNode( vgGetObj(0) ); pfNodeTravMask( node, PFTRAV_DRAW, 0x0000FFFF, PFTRAV_SELF, PF_SET );

190   How do I move an object between to or more Points

The easiest way to achieve this would be to use the Vega Navigator and Path classes to create a path and a navigator to follow the path.

Alternatively you could write some code to do simple linear interpolation and move the object by some delta each frame.

See Vega Programmers Guide and Lynx Guides for further details on vgNavigator's and Pathing tool.

191   How do I follow an Object

The easiest way would be to attach the vgObject of Interest to a vgPlayer, then move the vgPlayer rather than the vgObject. The to follow simply attach the vgObserver to the vgPlayer and set the required offset behind the vgPlayer.

See the Code example switchObvserver2Player for further details on how to follow a vgPlayer

Alternatively the harder way would be :

On every frame

Get the vgPosition of the vgObject

Calculate the offset position behind the vgObject

Set the position of the vgObserver.

192  How do I follow a vgPlayer

This a quite straight forward to do, as players were designed to be viewed from.

You simply need to set your  vgObserver to look from a desired vgPlayer and you can choose 3 methods of following:

• Tethered Fixed: Follow the selected vgPlayer at a given offset
• Tethered Spin: Follow the selected vgPlayer while orbiting around the vgPlayer
• Tethered Follow: Follow the selected vgPlayer at a given offset and N-frames behind

For example to set tethered fixed you could do:

 Code : -- // //  Attach the observer to the player and navigator //   vgProp( obs, VGCOMMON_ENABLED, VG_ON );     // // Set The Observer Fixed Tethered state //   vgProp( obs, VGOBS_TETHERSTATE, VGOBS_FIXED );     // // The Observer needs to be relative to a players coords //   vgProp( obs, VGOBS_TETHERCOORD, VGOBS_TPLAYER );     // // We need the player for the navigator assume first player //   vgPlayer *plyr = vgGetPlyr( 0 );     // // Associate the Player with the Observer //   vgObservPlyr( obs, plyr );

193  How to Switch Observer Motion Models

This is quite straight forward to do, you just have to ensure that you remove any associations with vgNavigator or vgPlayer that the vgObserver may have. See the Code example switchObvserver2MotionModel for further details

194  How can I attached a vgObject to my Viewpoint

Placing a vgObject so that it is always in the view point is not too hard.

One way would be to:

• Create a vgPlayer
• Add vgObject to the vgPlayer
• Offset the vgObject in the +Y from the vgPlayer
• Associate your Motion Model with the vgPlayer
• Attatch the vgObserver to the vgPlayer (tethered Fixed)

Then when you move your motion model, the vglPayer and vgObject will automatically be moved for you and stay in your viewpoint at the given position

195  How can I find the number of Parts in a Object

Vega provides a function to return the number of vgParts within an vgObject.

int numobjs = vgGetNumParts(  vgGetObj(0) );

Note that this is the number of vgParts and not necessarily the number of nodes also note that the Make Parts property for the vgObject has to be set before the vgObject is loaded or made.

196   What are Isectors

Isectors provide the ability to handle collision detection between objects within a Scenegraphs and are an essential part of most visual simulations

For example, a typical need is to obtain the current Height Above Terrain (HAT) information in a flight simulator or a driving simulator is determined by firing a vertical line segment from the aircraft or vehicle towards the terrain/ground and calculating the distance between the aircraft or vehicle and the intersection point on the ground.

Another example is the use of an Isector to pick or selecthings in the scene, this is typically done using an Line of Site (LOS) isector

197   What is an RDF file

And RDF is a Vega Region Definition File, the RDF file can be used to store the configuration parameters used for configuring the Vega LADBM environment. It is based on the assumption that the database is constructed with tile grids.

For example, instead of defining a 10x10 tiled database in an ADF as 100 vgObjects, vgRegions, and vgVolumes, RDF leverages the fact that the data has the same basic attributes, and is evenly distributed across a regular grid. Instead of one monolithic ADF, we can have a small ADF and one or more small RDF to describe the data.

198   What does an ADF file look Like

Heres an example ADF see the next FAQ for details and the LADBM documentation.

//------------------------------------------------------------------------------------------------------------------------------------------------

tilegrid "RHCB" {

path "$(APPPATH)\data\contour-region-high-culture-bbldgs-fst" nameexpr { format "RHCB.c%03d.r%03d.fst"$col \$row }

groupid 3

tilelist {

{12 16}  {12 17}  {12 18}  {12 19}  {12 20}

{12 21}  {12 22}  {12 23}  {12 24}  {12 25}  {12 26}

{13 10}

{13 11}  {13 12}  {13 13}  {13 14}  {13 15}  {13 16}  {13 17}  {13 18}  {13 19}  {13 20}

{13 21}  {13 22}  {13 23}  {13 24}  {13 25}  {13 26}

{14 10}

{14 11}  {14 12}  {14 13}  {14 14}  {14 15}  {14 16}  {14 17}  {14 18}  {14 19}  {14 20}

{14 21}  {14 22}  {14 23}  {14 24}  {14 25}  {14 26}

{15 10}

{15 11}  {15 12}  {15 13}  {15 14}  {15 15}  {15 16}  {15 17}  {15 18}  {15 19}  {15 20}

{15 21}  {15 22}  {15 23}  {15 24}  {15 25}  {15 26}

{16 10}

{16 11}  {16 12}  {16 13}  {16 14}  {16 15}  {16 16}  {16 17}  {16 18}  {16 19}  {16 20}

{16 21}  {16 22}  {16 23}  {16 24}  {16 25}  {16 26}

{17 10}

{17 11}  {17 12}  {17 13}  {17 14}  {17 15}  {17 16}  {17 17}  {17 18}  {17 19}  {17 20}

{17 21}  {17 22}  {17 23}  {17 24}  {17 25}  {17 26}

{18 10}

{18 11}  {18 12}  {18 13}  {18 14}  {18 15}  {18 16}  {18 17}  {18 18}  {18 19}  {18 20}

{18 21}  {18 22}  {18 23}  {18 24}  {18 25}  {18 26}

{19 10}

{19 11}  {19 12}  {19 13}  {19 14}  {19 15}  {19 16}  {19 17}  {19 18}  {19 19}  {19 20}

{19 21}  {19 22}  {19 23}  {19 24}  {19 25}  {19 26}

{20 10}

{20 11}  {20 12}  {20 13}  {20 14}  {20 15}  {20 16}  {20 17}  {20 18}  {20 19}  {20 20}

{20 21}  {20 22}  {20 23}  {20 24}  {20 25}  {20 26}

{21 10}

{21 11}  {21 12}  {21 13}  {21 14}  {21 15}  {21 16}  {21 17}  {21 18}  {21 19}  {21 20}

{21 21}  {21 22}  {21 23}  {21 24}  {21 25}  {21 26}

{22 10}

{22 11}  {22 12}  {22 13}  {22 14}  {22 15}  {22 16}  {22 17}  {22 18}  {22 19}  {22 20}

{22 21}  {22 22}  {22 23}  {22 24}  {22 25}  {22 26}

{23 10}

{23 11}  {23 12}  {23 13}  {23 14}  {23 15}  {23 16}  {23 17}  {23 18}  {23 19}  {23 20}

{23 21}  {23 22}  {23 23}  {23 24}  {23 25}  {23 26}

{24 10}

{24 11}  {24 12}  {24 13}  {24 14}  {24 15}  {24 16}  {24 17}  {24 18}  {24 19}  {24 20}

{24 21}  {24 22}  {24 23}  {24 24}  {24 25}  {24 26}

{25 10}

{25 11}  {25 12}  {25 13}  {25 14}  {25 15}  {25 16}  {25 17}  {25 18}  {25 19}  {25 20}

{25 21}  {25 22}  {25 23}  {25 24}  {25 25}  {25 26}

{26 10}

{26 11}  {26 12}  {26 13}  {26 14}  {26 15}  {26 16}  {26 17}  {26 18}  {26 19}  {26 20}

{26 21}  {26 22}  {26 23}  {26 24}  {26 25}  {26 26}

}

numtiles 26 26

gridorigin -327287.45289023 -471148.8

gridextent 428149.6232 616345.6//16467.29320x26 23705.60000x24

rendersphere 0

immediate 0

aoicull 1

isectclass 0x0

optim 0x10

sensorizable 0

}

//------------------------------------------------------------------------------------------------------------------------------------------------

199    What does the content of an RDF file mean

RDF Keywords

char nameexpr [PF_MAXSTRING]

Specifies a naming expression for the tiles. When evaluating that expression, the loader sets the variables col and row to the column and row values appropriate for that tile. The generated name is used for the tile's vgObject, vgRegion, vgVolume, vgDataSet, and the actual datafile to be loaded. By convention, nameexpr should only specify the basename of the file; pathing should be resolved by searching the Vega pathlist.

int numtiles [2]

Specifies the number of columns and rows in the tilegrid (which is not the same as the actual number of tiles populating the tilegrid). If no tilelist attribute is defined, then The tile numbering starts from the lower left with tile {0 0}.

Default value: 1 1

double gridorigin[2]

Specifies the location of the lower left corner of the tilegrid (i.e. the lower left corner of tile {0 0}) in world (DBU) coordinates.

Default value: 0. 0.

double gridextent[2]

Specifies the width and height of the tilegrid in world (DBU)

coordinates. Default value: 0. 0.

int groupid

Sets the tiles' vgRegion VGREG_GROUP property. value must be an integer from 0 to 31; see man vgRegion. Default value: 0 It's a good practice to assign an unique group id to each rdf file. This will cause the region paging traversal more efficient and accurate. Also, at the initial traversal, AOI will go through ALL regions, starting from group 0, to figure out the GCS and surrounding regions. If you have many regions defined in many rdf files, then the arrangement of the group id's may affect the initial visual appearance. Here is a guide line:

group 0 - low  level terrain tiles

group 1 - high level terrain tiles

group 2 - low  level culture features

group 3 - high level culture features

int aoicull

Sets the tiles' vgRegion VGREG_AOICULL property. value must be an boolean.

Default value: 1

Sets the radius of tiles' vgVolume. value is in DBUs.

Default value: 0.

int rendersphere

Sets the tiles' vgRegion VGREG_VOL_RENDER property. value must be an boolean.

Default value: 0

200   How to pick a static object usinf vgPicker

Unfortunately you can only pick Dynamic Objects, this is a design limitation that was built into vgPicker when I originally wrote the code. (DOH)

There is no straight forward or easy working around for this limitation with Vega and the vgPicker they only solution is than write your own picking code