VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Friends
makVrv::DtDynamicTerrainRasterLibrary Class Reference

DtDynamicTerrainRasterLibrary

This class is used to managed rasters and out-the-window images applied to osgEarth terrain layers for our crater implementation. More...

Inheritance diagram for makVrv::DtDynamicTerrainRasterLibrary:
Inheritance graph
[legend]

Public Member Functions

virtual ~DtDynamicTerrainRasterLibrary ()
 Destructor. More...
 
virtual void init ()
 Initializes the library. More...
 
virtual osg::ref_ptr< osg::Image > getLandCoverRaster (osgEarth::LandCoverDictionary *landCoverDictionary, double &scaleFactorX, double &scaleFactorY, const std::string &craterType, int soilType, double heading=0.0)
 Returns the land cover raster based on a crater type, soil type, and heading. More...
 
virtual osg::ref_ptr< osg::Image > getElevationRaster (double &scaleFactorX, double &scaleFactorY, const std::string &craterType, double heading=0.0)
 Returns the elevation raster given a crater type and heading. More...
 
virtual osg::ref_ptr< osg::Image > getElevationOtwImage (double &scaleFactorX, double &scaleFactorY, const std::string &craterType, int soilType, double heading=0.0)
 Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterElevationEffects. More...
 
virtual osg::ref_ptr< osg::Image > getLandCoverOtwImage (double &scaleFactorX, double &scaleFactorY, const std::string &craterType, int soilType, double heading=0.0)
 Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterSoilEffects. More...
 
virtual osg::ref_ptr< osg::Image > getElevationAndLandCoverOtwImage (double &scaleFactorX, double &scaleFactorY, const std::string &craterType, int soilType, double heading=0.0)
 Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterElevAndSoilEffects. More...
 
osgEarth::GeoExtent calculateNewExtent (const DtVector &centerPoint, osg::ref_ptr< const osgEarth::SpatialReference > srs, double minorAxis, double majorAxis, double heading, double scaleFactorX, double scaleFactorY)
 Returns an extent that accounts for any scaling due to rotation. More...
 
- Public Member Functions inherited from makVrv::DtVirtualBaseClass
 DtVirtualBaseClass ()
 Do nothing constructor. More...
 
virtual ~DtVirtualBaseClass ()
 Virtual do nothing destructor. More...
 

Static Public Member Functions

Static member accessors
static std::string defaultCraterType ()
 
static std::string defaultCraterImageFilename ()
 
static std::string defaultCraterElevationFilename ()
 
static std::string craterTypeToElevationMapFilename ()
 
static std::string craterTypeToLandCoverMapFilename ()
 
static std::string elevationOtwMapFilename ()
 
static std::string landCoverOtwMapFilename ()
 
static std::string elevationAndLandCoverOtwMapFilename ()
 

Protected Types

typedef std::map< std::string,
osg::ref_ptr< osg::Image > > 
StrToImgMap
 
typedef std::map< std::string,
std::string > 
StrToStrMap
 
typedef std::map< std::string,
StrToStrMap
OtwImageMap
 

Protected Member Functions

 DtDynamicTerrainRasterLibrary (DtDe &de)
 Constructor. More...
 
virtual osg::ref_ptr< osg::Image > rotateImage (double &scaleFactorX, double &scaleFactorY, const osg::ref_ptr< osg::Image > &templateImg, double heading, RasterImageType imgType=RasterElevation)
 Rotates a given image based on a heading. More...
 
virtual osg::ref_ptr< osg::Image > allocateImageAndInitialize (int s, int t, RasterImageType imgType)
 Allocates and initializes a new image. More...
 
virtual osg::ref_ptr< osg::Image > loadRasterToCache (StrToImgMap &rasterCache, const std::string &craterType, const StrToStrMap &keyToFilenameMap)
 Loads an image into a cache based on the crater type and using the specified mapping file. More...
 
virtual osg::ref_ptr< osg::Image > loadOtwImageToCache (StrToImgMap &imageCache, const std::string &craterType, const std::string &soilTypeName, const OtwImageMap &keysToFilenameMap)
 Loads an image into a cache based on the crater type and soil type and using the specified mapping file. More...
 
virtual osg::ref_ptr< osg::Image > createLandCoverFromImage (osgEarth::LandCoverDictionary *landCoverDictionary, osg::ref_ptr< osg::Image > img, const std::string &landCover) const
 Creates a landcover image given an existing image and a land cover value. More...
 
virtual osg::ref_ptr< osg::Image > getOtwImage (StrToImgMap &imgCache, const OtwImageMap &keysToFilenameMap, double &scaleFactorX, double &scaleFactorY, const std::string &craterType, int soilType, double heading)
 Helper method used by getElevationOtwImage, getLandCoverOtwImage, and getElevationAndLandCoverOtwImage. More...
 
virtual std::string lookupRasterFileAndResolvePath (const std::string &craterType, const StrToStrMap &keyToFilenameMap) const
 Looks up and the resolves the filename and path for a given crater type using the specified mapper. More...
 
virtual std::string lookupOtwImageFileAndResolvePath (const std::string &craterType, const std::string &soilTypeName, const OtwImageMap &keysToFilenameMap) const
 Looks up and the resolves the filename and path for a given crater type and soil type using the specified mapper. More...
 
virtual bool populateRasterMap (StrToStrMap &mapToPopulate, const std::string rasterFilename)
 Loads an raster mapping file and stores the results in an std::map. More...
 
virtual bool populateImageMap (OtwImageMap &mapToPopulate, const std::string imageMapFilename)
 Loads an image mapping file and stores the results in an std::multimap. More...
 
virtual std::string otwImageCacheKey (const std::string &craterType, const std::string &soilTypeName) const
 Returns a key for use in the out-the-window image caches. More...
 

Protected Attributes

bool myIsInitialized
 
tbb::spin_rw_mutex myLandCoverCacheMutex
 
tbb::spin_rw_mutex myElevationRasterCacheMutex
 
tbb::spin_rw_mutex myOtwImageCacheMutex
 
tbb::spin_rw_mutex myInitMutex
 
StrToImgMap myLandCoverImageCache
 
StrToImgMap myLandCoverElevationRasterCache
 
StrToImgMap myElevationRasterCache
 
StrToImgMap myElevationOtwImageCache
 
StrToImgMap myLandCoverOtwImageCache
 
StrToImgMap myElevationAndLandCoverOtwImageCache
 
StrToStrMap myCraterTypeToElevationFilenameMap
 
StrToStrMap myCraterTypeToLandCoverFilenameMap
 
OtwImageMap myCraterTypeAndSoilTypeToOtwFilenameForElevationMap
 
OtwImageMap myCraterTypeAndSoilTypeToOtwFilenameForLandCoverMap
 
OtwImageMap myCraterTypeAndSoilTypeToOtwFilenameForElevationAndLandCoverMap
 
DtDemyDe
 
DtVrfSoilTypeToOsgEarthLandCoverMapmySoilTypeToLandCoverMap
 

Static Protected Attributes

static const std::string theDefaultCraterType
 
static const std::string theDefaultCraterImageFilename
 
static const std::string theDefaultCraterElevationFilename
 
static const std::string theCraterTypeToElevationMapFilename
 
static const std::string theCraterTypeToLandCoverMapFilename
 
static const std::string theElevationOtwMapFilename
 
static const std::string theLandCoverOtwMapFilename
 
static const std::string theElevationAndLandCoverOtwMapFilename
 

Private Member Functions

 DtDynamicTerrainRasterLibrary ()
 Default CTOR (unimplemented) More...
 
 DtDynamicTerrainRasterLibrary (const DtDynamicTerrainRasterLibrary &orig)
 Copy CTOR (Unimplemented) More...
 
DtDynamicTerrainRasterLibraryoperator= (const DtDynamicTerrainRasterLibrary &)
 Assignment Operator (Unimplemented) More...
 

Friends

class DtDynamicTerrainRasterLibraryCreator
 Only the DtDynamicTerrainRasterLibraryCreator should create instances of the DtDynamicTerrainRasterLibrary. More...
 

Detailed Description

DtDynamicTerrainRasterLibrary

This class is used to managed rasters and out-the-window images applied to osgEarth terrain layers for our crater implementation.

These rasters may be applied to an osgEarth decal image layer as imagery; a decal elevation layer to deform the terrain skin; and a decal land cover layer to modify landcover.

DtDynamicTerrainRasterLibrary uses a number of maps to look up the necessary rasters based on data sent by VR - Forces to represent craters.The information conveyed that is used here is an effect type enumerant, which includes DtTerrainCraterElevationEffect, DtTerrainCraterSoilEffect, and DtTerrainCraterElevAndSoilEffect; a crater type string; a VR - Forces soil type enumerant, and a heading.

The effect type determines which osgEarth layers will be affected; different maps are used to look up rasters for different layers or, in the case of the out the window images, a different map for each effect type.

The rasters themselves will be read from disk using the DtOsgFileCache and stored as osg::images. Additional caches are provided within the library with maps that index from the input values to pointers to those osg::images. Cached images are rotated by the specified heading when requested.

The following maps for finding raster / image filenames are used:

Member Typedef Documentation

typedef std::map<std::string, osg::ref_ptr <osg::Image> > makVrv::DtDynamicTerrainRasterLibrary::StrToImgMap
protected
typedef std::map<std::string, std::string> makVrv::DtDynamicTerrainRasterLibrary::StrToStrMap
protected
typedef std::map<std::string, StrToStrMap> makVrv::DtDynamicTerrainRasterLibrary::OtwImageMap
protected

Constructor & Destructor Documentation

makVrv::DtDynamicTerrainRasterLibrary::DtDynamicTerrainRasterLibrary ( DtDe de)
protected

Constructor.

Parameters
dereference to a VRV display engine
virtual makVrv::DtDynamicTerrainRasterLibrary::~DtDynamicTerrainRasterLibrary ( )
virtual

Destructor.

makVrv::DtDynamicTerrainRasterLibrary::DtDynamicTerrainRasterLibrary ( )
private

Default CTOR (unimplemented)

makVrv::DtDynamicTerrainRasterLibrary::DtDynamicTerrainRasterLibrary ( const DtDynamicTerrainRasterLibrary orig)
private

Copy CTOR (Unimplemented)

Member Function Documentation

virtual void makVrv::DtDynamicTerrainRasterLibrary::init ( )
virtual

Initializes the library.

Note that if the library can not be fully initialized, default images will be provided. Hence there is no return code. Ideally you should call init when the library is created, but the public API calls will check and call init() if you haven't

virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getLandCoverRaster ( osgEarth::LandCoverDictionary *  landCoverDictionary,
double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
int  soilType,
double  heading = 0.0 
)
virtual

Returns the land cover raster based on a crater type, soil type, and heading.

Parameters
landCoverDictionarypointer to a land cover dictionary to look up the osgEarth land cover class for the soil type specified
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
craterTypea key into the CraterTypeToLandCoverFilenameMap
soilTypethe soil Type value to find the land cover
headingthe heading in degrees
Returns
the resulting landcover raster
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getElevationRaster ( double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
double  heading = 0.0 
)
virtual

Returns the elevation raster given a crater type and heading.

Parameters
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
craterTypea key into the CraterTypeToElevationFilenameMap
headingthe heading in degrees
Returns
the resulting elevation raster
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getElevationOtwImage ( double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
int  soilType,
double  heading = 0.0 
)
virtual

Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterElevationEffects.

Parameters
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
craterTypea key into the CraterTypeAndSoilTypeToOtwFilenameForElevationMap
soilTypea secondary key into the map
headingthe heading in degrees
Returns
the resulting visual image
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getLandCoverOtwImage ( double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
int  soilType,
double  heading = 0.0 
)
virtual

Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterSoilEffects.

Parameters
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
craterTypea key into the CraterTypeAndSoilTypeToOtwFilenameForLandCoverMap
soilTypea secondary key into the map
headingthe heading in degrees
Returns
the resulting visual image
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getElevationAndLandCoverOtwImage ( double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
int  soilType,
double  heading = 0.0 
)
virtual

Returns the visual image given a crater type, soil type, and heading for DtTerrainCraterElevAndSoilEffects.

Parameters
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
craterTypea key into the CraterTypeAndSoilTypeToOtwFilenameForElevationAndLandCoverMap
soilTypea secondary key into the map
headingthe heading in degrees
Returns
the resulting visual image
osgEarth::GeoExtent makVrv::DtDynamicTerrainRasterLibrary::calculateNewExtent ( const DtVector centerPoint,
osg::ref_ptr< const osgEarth::SpatialReference >  srs,
double  minorAxis,
double  majorAxis,
double  heading,
double  scaleFactorX,
double  scaleFactorY 
)

Returns an extent that accounts for any scaling due to rotation.

Parameters
centerPointcenter point in geocentric coordinates
srsOSG Earth Spatial Reference
minorAxisthe minor axis (x-axis)
majorAxisthe major axis (y-axis)
headingthe topographic heading
scaleFactorXscale factor along the x axis
scaleFactorYscale factor along the y axis
static std::string makVrv::DtDynamicTerrainRasterLibrary::defaultCraterType ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::defaultCraterImageFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::defaultCraterElevationFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::craterTypeToElevationMapFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::craterTypeToLandCoverMapFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::elevationOtwMapFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::landCoverOtwMapFilename ( )
static
static std::string makVrv::DtDynamicTerrainRasterLibrary::elevationAndLandCoverOtwMapFilename ( )
static
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::rotateImage ( double scaleFactorX,
double scaleFactorY,
const osg::ref_ptr< osg::Image > &  templateImg,
double  heading,
RasterImageType  imgType = RasterElevation 
)
protectedvirtual

Rotates a given image based on a heading.

Parameters
scaleFactorXthe X amount the image was increased in size to accommodate any rotation
scaleFactorYthe Y amount the image was increased in size to accommodate any rotation
templateImgthe image to be rotated
headingthe heading in degrees
imgTypeenumeration for the type of raster/image
Returns
the rotated image
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::allocateImageAndInitialize ( int  s,
int  t,
RasterImageType  imgType 
)
protectedvirtual

Allocates and initializes a new image.

Land cover is initialized with NO_DATA_VALUE whereas elevation is 0.0

Parameters
sthe s size of the new image
tthe t size of the new image
imgTypeenumeration for the type of raster/image
Returns
the newly allocated and initialized image
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::loadRasterToCache ( StrToImgMap rasterCache,
const std::string &  craterType,
const StrToStrMap keyToFilenameMap 
)
protectedvirtual

Loads an image into a cache based on the crater type and using the specified mapping file.

Parameters
rasterCachea cache used to store images based on crater type
cratertype the key for the image to load
keyToFilenameMapmap used to look up the image filename based on the crater type
Returns
the image that was loaded
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::loadOtwImageToCache ( StrToImgMap imageCache,
const std::string &  craterType,
const std::string &  soilTypeName,
const OtwImageMap keysToFilenameMap 
)
protectedvirtual

Loads an image into a cache based on the crater type and soil type and using the specified mapping file.

Parameters
rasterCachea cache used to store images based on crater type
cratertype the key for the image to load
soilTypeNamesecondary key for the image to load
keyToFilenameMapmap used to look up the image filename based on the crater type
Returns
the image that was loaded
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::createLandCoverFromImage ( osgEarth::LandCoverDictionary *  landCoverDictionary,
osg::ref_ptr< osg::Image >  img,
const std::string &  landCover 
) const
protectedvirtual

Creates a landcover image given an existing image and a land cover value.

Parameters
imgan existing image that the land cover values will be applied to
landCoveris the string value of the land cover that will be applied to the pixels in the image
Returns
the resulting image with the land cover value applied to it
virtual osg::ref_ptr<osg::Image> makVrv::DtDynamicTerrainRasterLibrary::getOtwImage ( StrToImgMap imgCache,
const OtwImageMap keysToFilenameMap,
double scaleFactorX,
double scaleFactorY,
const std::string &  craterType,
int  soilType,
double  heading 
)
protectedvirtual

Helper method used by getElevationOtwImage, getLandCoverOtwImage, and getElevationAndLandCoverOtwImage.

This method does the actual work; the calling methods provide the appropriate cache and mapper to use

virtual std::string makVrv::DtDynamicTerrainRasterLibrary::lookupRasterFileAndResolvePath ( const std::string &  craterType,
const StrToStrMap keyToFilenameMap 
) const
protectedvirtual

Looks up and the resolves the filename and path for a given crater type using the specified mapper.

Parameters
craterTypekey to look up in keyToFilenameMap
keyToFilenameMapname of map to use to look up the filename (the path to resolve)
Returns
the resolved path and filename as a single string
virtual std::string makVrv::DtDynamicTerrainRasterLibrary::lookupOtwImageFileAndResolvePath ( const std::string &  craterType,
const std::string &  soilTypeName,
const OtwImageMap keysToFilenameMap 
) const
protectedvirtual

Looks up and the resolves the filename and path for a given crater type and soil type using the specified mapper.

Parameters
craterTypekey to look up in keysToFilenameMap
soilTypeNamesecondary key to look up in keysToFilenameMap
keysToFilenameMapname of map to use to look up the filename (the path to resolve)
Returns
the resolved path and filename as a single string
virtual bool makVrv::DtDynamicTerrainRasterLibrary::populateRasterMap ( StrToStrMap mapToPopulate,
const std::string  rasterFilename 
)
protectedvirtual

Loads an raster mapping file and stores the results in an std::map.

Parameters
mapToPopulatethe map that is to be populated
rasterFilenamethe raster mapping filename
Returns
true if it was able to load the file and populate the map, else false
virtual bool makVrv::DtDynamicTerrainRasterLibrary::populateImageMap ( OtwImageMap mapToPopulate,
const std::string  imageMapFilename 
)
protectedvirtual

Loads an image mapping file and stores the results in an std::multimap.

Parameters
mapToPopulatethe map that is to be populated
imageFilenamethe image mapping filename
Returns
true if it was able to load the file and populate the map, else false
virtual std::string makVrv::DtDynamicTerrainRasterLibrary::otwImageCacheKey ( const std::string &  craterType,
const std::string &  soilTypeName 
) const
protectedvirtual

Returns a key for use in the out-the-window image caches.

Parameters
craterTypecrater type used to retrieve the image to be cached
soilTypeNamesoil type name used to retrieve the image to be cached
Returns
the cache key created
DtDynamicTerrainRasterLibrary& makVrv::DtDynamicTerrainRasterLibrary::operator= ( const DtDynamicTerrainRasterLibrary )
private

Assignment Operator (Unimplemented)

Friends And Related Function Documentation

Only the DtDynamicTerrainRasterLibraryCreator should create instances of the DtDynamicTerrainRasterLibrary.

Member Data Documentation

const std::string makVrv::DtDynamicTerrainRasterLibrary::theDefaultCraterType
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theDefaultCraterImageFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theDefaultCraterElevationFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theCraterTypeToElevationMapFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theCraterTypeToLandCoverMapFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theElevationOtwMapFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theLandCoverOtwMapFilename
staticprotected
const std::string makVrv::DtDynamicTerrainRasterLibrary::theElevationAndLandCoverOtwMapFilename
staticprotected
bool makVrv::DtDynamicTerrainRasterLibrary::myIsInitialized
protected
tbb::spin_rw_mutex makVrv::DtDynamicTerrainRasterLibrary::myLandCoverCacheMutex
protected
tbb::spin_rw_mutex makVrv::DtDynamicTerrainRasterLibrary::myElevationRasterCacheMutex
protected
tbb::spin_rw_mutex makVrv::DtDynamicTerrainRasterLibrary::myOtwImageCacheMutex
protected
tbb::spin_rw_mutex makVrv::DtDynamicTerrainRasterLibrary::myInitMutex
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myLandCoverImageCache
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myLandCoverElevationRasterCache
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myElevationRasterCache
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myElevationOtwImageCache
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myLandCoverOtwImageCache
protected
StrToImgMap makVrv::DtDynamicTerrainRasterLibrary::myElevationAndLandCoverOtwImageCache
protected
StrToStrMap makVrv::DtDynamicTerrainRasterLibrary::myCraterTypeToElevationFilenameMap
protected
StrToStrMap makVrv::DtDynamicTerrainRasterLibrary::myCraterTypeToLandCoverFilenameMap
protected
OtwImageMap makVrv::DtDynamicTerrainRasterLibrary::myCraterTypeAndSoilTypeToOtwFilenameForElevationMap
protected
OtwImageMap makVrv::DtDynamicTerrainRasterLibrary::myCraterTypeAndSoilTypeToOtwFilenameForLandCoverMap
protected
OtwImageMap makVrv::DtDynamicTerrainRasterLibrary::myCraterTypeAndSoilTypeToOtwFilenameForElevationAndLandCoverMap
protected
DtDe& makVrv::DtDynamicTerrainRasterLibrary::myDe
protected
DtVrfSoilTypeToOsgEarthLandCoverMap* makVrv::DtDynamicTerrainRasterLibrary::mySoilTypeToLandCoverMap
protected

The documentation for this class was generated from the following file:

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)