VR-Link API Documentation for HLA Evolved
Environmental Process Example

Some sample code to demonstrait the usage of Environmental Process Objects in VR-Link.

Environmental Process objects represent things happening in the simulated environment like chemical clouds, chaff, or vapor trails.

Environmental Process Objects are implemented in four main classes

Here is a function which creates and publishes an Environmental Process Object

#include <vl/envProcessSR.h>
#include <vl/envProcPub.h>

#include "PointRec.h"
#include "Point2Rec.h"
#include <iostream>

class DtExerciseConn;

void publishEnvPro(DtExerciseConn *exConn)
{
   // Create publishers
   DtEnvironmentProcessPublisher pub(exConn);

   // Hold on to its state repository, where we can set data
   DtEnvironmentProcessRepository &esr = *pub.epsr();


   // Fill in unrealistic sample data
   DtEntityIdentifier entId("1:3:1");
   DtEnvironmentTypeRecord envType;

   envType.setClassOfEnv(1);
   envType.setKind(2);
   envType.setDomain(3);
   envType.setCategory(4);
   envType.setSubCategory(5);
   envType.setSpecific(6);
   envType.setExtra(7);

   esr.setEnvironmentalProcessID(entId);
   esr.setEnvironmentType(envType);
   esr.setModelType(DtEnvironmentModelUnknown);
   esr.setEnvironmentalStatus(DtTrue);
   esr.setSequenceNumber(10);
   esr.setNumberOfEnvironmentalRecords(3);

   int size = (sizeof(Point1GeometryData) - sizeof(DtNetEnvironmentalRecord))*8;
   if (esr.setRecordBitSize(0, size) && esr.setRecordBitSize(1, size) &&
       esr.setRecordBitSize(2, size))
   {
      std::cout<< "Setting size was successful" << std::endl;
   }
   else
   {
      std::cout<< "Setting size was unsucessfull" << std::endl;
   }

   for ( int i = 0; i < esr.numberOfEnvironmentalRecords(); i++)
   {
      Point1GeometryData* rec = (Point1GeometryData*) esr.recordPointer(i);
      rec->myIndex = i;
      rec->myType = DtPointRecord1Type;
      rec->pos[0] = i*10 + 10;
      rec->pos[1] = i*10 + 10;
      rec->pos[2] = i*10 + 10;
   }

}
    

Sample code to listen for Environmental Process objects can be found here:

#include <vl/fom.h>
#include <vl/envProcessSR.h>
#include <vl/reflEnvProc.h>
#include <vl/refEnvList.h>


class DtExerciseConn;


// A callback for when a DtReflectedEnvironmentProcess object is updated.
void printEnvProc(DtReflectedEnvironmentProcess* obj, void* userData)
{
  obj->epsr()->printData();
}

// A callback for when a new DtReflectedEnvironmentProcess object is added.
void envProcAddedCb(DtReflectedEnvironmentProcess* obj, void* userData)
{
   // register a callback for when an existing object is updated. 
   obj->addPostUpdateCallback(printEnvProc, userData);
}

// Create a reflected list and register interest in object creation.
void listenEnvProc(DtExerciseConn *exConn)
{
   DtReflectedEnvironmentProcessList rel(exConn);
   rel.addEnvironmentProcessAdditionCallback(envProcAddedCb, NULL);
}

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)