VR-Vantage 2.4 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) 2017 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
13 #include <vl/globalObjectDesignator.h>
14 #include <vlpi/entityType.h>
15 #include <vlpi/entityIdentifier.h>
16 #include <vlutil/vlMachineTypes.h>
17 #include <vlutil/vlString.h>
18 #include <matrix/vlVector.h>
19 #include <map>
20 
22 {
28 };
29 
33 {
34 public:
36 
38 
40 
41  DtTerrainGeometry& operator=(const DtTerrainGeometry& orig);
42 
43  bool operator==(const DtTerrainGeometry& other) const;
44  bool operator!=(const DtTerrainGeometry& other) const;
45 
46  int netSize() const;
47 
48  virtual unsigned int getPaddingSize(DtU64 byteOffset, unsigned int boundary) const;
49 
50  void writeToBuffer( char* buffer ) const;
51  void fillFromBuffer( const char* buffer, int bufferSize, int offset );
52 
55 
56  template<class Variant>
57  const Variant* variant() const
58  {
59  // Don't do an expensive dynamic cast unless we're pretty sure we have the right type here.
60  if (Variant::theTerrainAreaType() == terrainAreaType())
61  {
62  return dynamic_cast<const Variant*>(this);
63  }
64  return 0;
65  }
66 
67  template<class Variant>
68  Variant* variant()
69  {
70  return const_cast<Variant*>(static_cast<const Variant*>(this));
71  }
73 
75 
76 
78  virtual DtTerrainGeometry* clone() const = 0;
79 
81  virtual DtTerrainAreaTypeEnum32 terrainAreaType() const = 0;
82 
85  virtual bool approximatelyEqual(const DtTerrainGeometry& other, double tolerance = -1.0) const = 0;
86 
88  virtual int variantNetSize() const = 0;
89 
91  virtual int variantOctetBoundary() const = 0;
92 
94  virtual void writeVariantToBuffer( char* buffer ) const = 0;
95 
97  virtual void fillVariantFromBuffer( const char* buffer, int bufferSize, int offset ) = 0;
98 
100 
101  virtual void printData() const;
102  virtual void printDataToStream(std::ostream &) const;
103 
105  static DtTerrainAreaTypeEnum32 terrainAreaTypeFromBuffer(const char* buffer, int bufferSize, int offset);
106 
109  static int octetBoundary();
110 
112  static double defaultTolerance();
113 
115  static void setDefaultTolerance(double tolerance);
116 
117 protected:
118 
119  static double theDefaultTolerance; // = 0.001
120 
121 };
122 
126 {
127 public:
128  virtual DtTerrainAreaTypeEnum32 terrainAreaType() const = 0;
129  virtual int variantOctetBoundary() const = 0;
130  virtual DtTerrainGeometry* createVariant() const = 0;
131  virtual DtTerrainGeometryVariantInfo* clone() const = 0;
132 };
133 
135 template<class VariantType>
137 {
138 public:
139 
141  {
142  return VariantType::theTerrainAreaType();
143  }
144 
145  virtual int variantOctetBoundary() const
146  {
147  return VariantType::theVariantOctetBoundary();
148  }
149 
151  {
152  return new VariantType();
153  }
154 
156  {
158  }
159 };
160 
165 {
166 public:
167 
169  static void registerTerrainGeometryVariant(const DtTerrainGeometryVariantInfo& variantInfo);
170 
173  static void registerUnknownTerrainGeometryVariant(const DtTerrainGeometryVariantInfo& variantInfo);
174 
176  static DtTerrainGeometry* createTerrainGeometry(DtTerrainAreaTypeEnum32 terrainAreaType);
177 
179  static DtTerrainGeometry* createUnknownTerrainGeometry();
180 
183  static int octetBoundary(DtTerrainAreaTypeEnum32 terrainAreaType);
184 
186  static int maximumOctetBoundary();
187 
188 protected:
189 
191  static void registerDefaultTerrainGeometryVariants();
192 
193  static std::map<DtTerrainAreaTypeEnum32, DtTerrainGeometryVariantInfo*> theVariants;
194 
196 
198 };
199 
200 DT_DLL_vrfExtObjects std::ostream& operator<<(std::ostream& stream, const DtTerrainGeometry&);
201 
202 


Copyright © 2005-2018 VT MAK. All Rights Reserved (www.mak.com)