VR-Vantage 2.2 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
terrainGeometry.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
6 #pragma once
7 
9 
10 #include <vlutil/vlMachineTypes.h>
11 #include <vlutil/vlString.h>
12 #include <vl/globalObjectDesignator.h>
13 #include <vlpi/entityType.h>
14 #include <vlpi/entityIdentifier.h>
15 #include <matrix/vlVector.h>
16 #include <map>
17 
18 
20 {
26 };
27 
29 
32 {
33 public:
35 
37 
39 
40  DtTerrainGeometry& operator=(const DtTerrainGeometry& orig);
41 
42  bool operator==(const DtTerrainGeometry& other) const;
43  bool operator!=(const DtTerrainGeometry& other) const;
44 
45  int netSize() const;
46 
47  virtual unsigned int getPaddingSize(DtU64 byteOffset, unsigned int boundary) const;
48 
49  void writeToBuffer( char* buffer ) const;
50  void fillFromBuffer( const char* buffer, int bufferSize, int offset );
51 
54 
55  template<class Variant>
56  const Variant* variant() const
57  {
58  // Don't do an expensive dynamic cast unless we're pretty sure we have the right type here.
59  if (Variant::theTerrainAreaType() == terrainAreaType())
60  {
61  return dynamic_cast<const Variant*>(this);
62  }
63  return 0;
64  }
65 
66  template<class Variant>
67  Variant* variant()
68  {
69  return const_cast<Variant*>(static_cast<const Variant*>(this));
70  }
72 
74 
75 
77  virtual DtTerrainGeometry* clone() const = 0;
78 
80  virtual DtTerrainAreaTypeEnum32 terrainAreaType() const = 0;
81 
84  virtual bool approximatelyEqual(const DtTerrainGeometry& other, double tolerance = -1.0) const = 0;
85 
87  virtual int variantNetSize() const = 0;
88 
90  virtual int variantOctetBoundary() const = 0;
91 
93  virtual void writeVariantToBuffer( char* buffer ) const = 0;
94 
96  virtual void fillVariantFromBuffer( const char* buffer, int bufferSize, int offset ) = 0;
97 
99 
100  virtual void printData() const;
101  virtual void printDataToStream(std::ostream &) const;
102 
104  static DtTerrainAreaTypeEnum32 terrainAreaTypeFromBuffer(const char* buffer, int bufferSize, int offset);
105 
108  static int octetBoundary();
109 
111  static double defaultTolerance();
112 
114  static void setDefaultTolerance(double tolerance);
115 
116 protected:
117 
118  static double theDefaultTolerance; // = 0.001
119 
120 };
121 
125 {
126 public:
127  virtual DtTerrainAreaTypeEnum32 terrainAreaType() const = 0;
128  virtual int variantOctetBoundary() const = 0;
129  virtual DtTerrainGeometry* createVariant() const = 0;
130  virtual DtTerrainGeometryVariantInfo* clone() const = 0;
131 };
132 
134 template<class VariantType>
136 {
137 public:
138 
140  {
141  return VariantType::theTerrainAreaType();
142  }
143 
144  virtual int variantOctetBoundary() const
145  {
146  return VariantType::theVariantOctetBoundary();
147  }
148 
150  {
151  return new VariantType();
152  }
153 
155  {
157  }
158 };
159 
164 {
165 public:
166 
168  static void registerTerrainGeometryVariant(const DtTerrainGeometryVariantInfo& variantInfo);
169 
172  static void registerUnknownTerrainGeometryVariant(const DtTerrainGeometryVariantInfo& variantInfo);
173 
175  static DtTerrainGeometry* createTerrainGeometry(DtTerrainAreaTypeEnum32 terrainAreaType);
176 
178  static DtTerrainGeometry* createUnknownTerrainGeometry();
179 
182  static int octetBoundary(DtTerrainAreaTypeEnum32 terrainAreaType);
183 
185  static int maximumOctetBoundary();
186 
187 protected:
188 
190  static void registerDefaultTerrainGeometryVariants();
191 
192  static std::map<DtTerrainAreaTypeEnum32, DtTerrainGeometryVariantInfo*> theVariants;
193 
195 
197 };
198 
199 DT_DLL_vrfExtObjects std::ostream& operator<<(std::ostream& stream, const DtTerrainGeometry&);
200 
201 


Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)