VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
featureToGeometryConverter.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <features/feature.h>
15 #include <features/featureSet.h>
17 #include <vector>
18 #include <geometry/surface.h>
19 #include <geometry/extent.h>
20 
21 #include <tbb/tbb_thread.h>
22 #include <tbb/spin_rw_mutex.h>
23 #include <tbb/mutex.h>
24 
25 #include <boost/ptr_container/ptr_map.hpp>
26 
27 class DtCollisionWorld;
29 
32 {
33 public:
34  typedef std::vector<MAKVRinTerra::DtFeatureGeometry> GeometryArray;
35 
38 
40  virtual ~DtThreadedTriangulator();
41 
43  virtual void addProcessGeometry(const GeometryArray&, const DtSurface&, bool triangulate);
44 
46  static void threadMain(DtThreadedTriangulator*);
47 
49  virtual void process();
50 
53  virtual void stop();
54 
56  virtual void start();
57 
59  virtual bool isStopped() const;
60 
62  virtual bool isRunning() const;
63 
65  virtual void cancel();
66 
68  virtual bool isCancelled() const;
69 
71  virtual bool isProcessing() const;
72 
74  virtual void join();
75 
76 protected:
79  const DtSurface& surface) const;
80 
82  virtual void tessellate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
83 
85  virtual void triangulate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
86 
87 protected:
90  tbb::tbb_thread* myThread;
91  mutable tbb::spin_rw_mutex myMutex;
92  bool myStop;
93  bool myRunning;
96 
98  {
102  };
103 
104  typedef std::vector<ProcessGeometry> ProcessGeometries;
105 
107 };
108 
116 {
117 public:
119  {
120  QUERY_DEFAULT = 0,
121  POINT_SELECT = 1,
122  AREA_SELECT = 2,
123  SURFACE_SELECT = 3
124  };
125 
126  typedef std::pair<std::string, QueryType> Query;
127  typedef std::map<std::string, Query> Queries;
128 
131 
133  virtual ~DtFeatureToGeometryConverter();
134 
136  virtual void convertToGeometry(const DtPoint& pnt, const DtTerrainImplementation*, DtCollisionWorld*);
137 
139  virtual void reset();
140 
142  virtual void addQuery(const std::string& key, const std::string& value, QueryType = QUERY_DEFAULT);
143 
146  virtual std::string addQuery(const std::string& value, QueryType = QUERY_DEFAULT);
147  std::string addQueryByAreaSelect(const std::string& value)
148  {
149  return addQuery(value, AREA_SELECT);
150  }
151 
152  std::string addQueryByPointSelect(const std::string& value)
153  {
154  return addQuery(value, POINT_SELECT);
155  }
156 
158  virtual void removeQuery(const std::string& key);
159 
161  virtual const Queries& queries() const;
162 
164  virtual bool determineSurfaceType(const DtPoint&, const DtTerrainImplementation* fc, const std::string& query, DtSurface& surface);
165 
167  virtual bool hasSurface(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&);
168 
170  virtual void setSeaLevel(double);
171  virtual double seaLevel() const;
172 
174  virtual DtCollisionWorld* collisionWorld();
175 
176 protected:
177  typedef std::pair<MAKVRinTerra::DtFeatureGeometry, DtSurface> SurfaceDefinition;
178  typedef std::vector<SurfaceDefinition> Surfaces;
179 
182  {
184 
186  : geometry(orig.geometry), extent(orig.extent), query(orig.query), retries(orig.retries) {};
187 
188  AreaInformation& operator=(const AreaInformation& orig) { geometry = orig.geometry;
189  extent = orig.extent; query = orig.query; retries = orig.retries; return *this; };
190 
193  std::string query;
194  int retries;
195  };
196 
197  typedef std::vector<AreaInformation> AreasCovered;
198 
201  virtual void addForConversion(const MAKVRinTerra::DtFeature&, const DtTerrainImplementation* fc, DtCollisionWorld* c);
202 
204  virtual bool generateIntersection(const DtPoint&, const DtTerrainImplementation* fc, QueryType,
206 
209  virtual bool shouldIntersectWith(const DtPoint&, const DtTerrainImplementation*, MAKVRinTerra::DtFeatureGeometry&, QueryType,
210  const std::string& query, bool& firstTime, AreasCovered::iterator&);
211 
213  virtual void createGeometryFromPoints(const DtTerrainImplementation*, DtCollisionWorld*,
214  const std::vector<MAKVRinTerra::DtFeatureGeometry>&) const;
215 
217  virtual void createGeometryFromAreas(const DtTerrainImplementation*, DtCollisionWorld*, const MAKVRinTerra::DtFeatureGeometry&) const;
218 
220  virtual void createGeometry(const std::vector<MAKVRinTerra::DtFeatureGeometry>&,
221  const DtSurface&, const DtTerrainImplementation*, DtCollisionWorld*, bool triangulate) const;
222 
224  virtual bool shouldAddAsSurface(const MAKVRinTerra::DtFeature& , DtSurface& surface) const;
225 
227  virtual void addNewSurfaceGeometries(const Surfaces&, const DtTerrainImplementation* fc, const std::string& query);
228 
230  virtual bool noIntersectionFound(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&) const;
231 
233  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> createOrReturnSavedQuery(const DtTerrainImplementation* fc,
234  std::string query, bool readDirectly = false);
235 
237  virtual void coverageArea(const MAKVRinTerra::DtFeature& feature);
238 
240  virtual void addAreaCovered(const MAKVRinTerra::DtFeatureGeometry& geom, const std::string& query, int retries = 0);
241 
243  virtual AreaInformation createAreaInfo(const MAKVRinTerra::DtFeatureGeometry& geom, const std::string& query,
244  int retries = 0) const;
245 
247  virtual void updateLastIntersection(const DtPoint&, bool valid, const DtSurface& surface);
248 
249 protected:
250  std::vector<MAKVRinTerra::DtFeatureGeometry> myPointFeatures;
251 
258 
260  std::vector< std::string > myQueryStringList;
261 
263 
264  struct LandArea
265  {
268  };
269 
270  typedef std::vector<LandArea> LandAreas;
271 
275  {
277  bool result;
279  };
280 
282  double mySeaLevel;
283 
285  typedef boost::ptr_map<std::string, MAKVRinTerra::DtFeatureSet> SavedQueries;
287 
290 
292 
294 
296 
299  mutable tbb::spin_rw_mutex myMutex;
300  mutable tbb::spin_rw_mutex myLastLocationMutex;
301 
304 };
This is the abstract base class for all terrain implementations.
Definition: terrainImplementation.h:164
bool myCancelled
Definition: featureToGeometryConverter.h:94
tbb::tbb_thread * myThread
Definition: featureToGeometryConverter.h:90
tbb::spin_rw_mutex myMutex
Definition: featureToGeometryConverter.h:299
AreaInformation(const AreaInformation &orig)
Definition: featureToGeometryConverter.h:185
DtCollisionWorld * myCollisionWorld
Definition: featureToGeometryConverter.h:89
QueryType
Definition: featureToGeometryConverter.h:118
bool triangulate
Definition: featureToGeometryConverter.h:101
tbb::spin_rw_mutex myMutex
Definition: featureToGeometryConverter.h:91
std::vector< LandArea > LandAreas
Definition: featureToGeometryConverter.h:270
Queries myQueries
Queries that can be used to perform specified functions.
Definition: featureToGeometryConverter.h:257
std::string addQueryByAreaSelect(const std::string &value)
Definition: featureToGeometryConverter.h:147
Area coverage.
Definition: featureToGeometryConverter.h:181
std::vector< MAKVRinTerra::DtFeatureGeometry > myPointFeatures
Definition: featureToGeometryConverter.h:250
bool myStop
Definition: featureToGeometryConverter.h:92
bool myProcessing
Definition: featureToGeometryConverter.h:95
bool myCoverageAreasInitialized
Definition: featureToGeometryConverter.h:295
DtSurface surface
Definition: featureToGeometryConverter.h:278
double mySeaLevel
Definition: featureToGeometryConverter.h:282
MAKVRinTerra::DtFeatureGeometry myIntersectArea
Definition: featureToGeometryConverter.h:291
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
AreasCovered myCoverageAreas
Definition: featureToGeometryConverter.h:289
std::map< std::string, Query > Queries
Definition: featureToGeometryConverter.h:127
Definition: surface.h:179
GeometryArray geometry
Definition: featureToGeometryConverter.h:99
DtCollisionWorld * myCollisionWorld
Definition: featureToGeometryConverter.h:293
DtThreadedTriangulator * myThreadedSurfaceTriangulator
Definition: featureToGeometryConverter.h:298
DtExtent extent
Definition: featureToGeometryConverter.h:192
MAKVRinTerra::DtFeatureGeometry geometry
Definition: featureToGeometryConverter.h:189
AreasCovered myAreasCovered
Definition: featureToGeometryConverter.h:288
tbb::spin_rw_mutex myLastLocationMutex
Definition: featureToGeometryConverter.h:300
This class will allow for the addition of features and their geometry for inclusion into the collisio...
Definition: featureToGeometryConverter.h:115
LastIntersection myLastIntersection
Definition: featureToGeometryConverter.h:281
boost::ptr_map< std::string, MAKVRinTerra::DtFeatureSet > SavedQueries
Saved queries.
Definition: featureToGeometryConverter.h:285
Handle< PointType > Point
Definition: featureGeometry.h:65
std::vector< AreaInformation > AreasCovered
Definition: featureToGeometryConverter.h:197
Definition: featureToGeometryConverter.h:97
std::pair< std::string, QueryType > Query
Definition: featureToGeometryConverter.h:126
AreaInformation & operator=(const AreaInformation &orig)
Definition: featureToGeometryConverter.h:188
std::vector< ProcessGeometry > ProcessGeometries
Definition: featureToGeometryConverter.h:104
Represents some coordinate system.
Definition: proj.h:44
AreaInformation()
Definition: featureToGeometryConverter.h:183
bool myRunning
Definition: featureToGeometryConverter.h:93
Surfaces myNewSurfaces
Definition: featureToGeometryConverter.h:262
Convenience member to return the last intersection if geometries match.
Definition: featureToGeometryConverter.h:274
std::string addQueryByPointSelect(const std::string &value)
Definition: featureToGeometryConverter.h:152
DtPoint location
Definition: featureToGeometryConverter.h:276
LandAreas myLandAreas
Definition: featureToGeometryConverter.h:272
bool result
Definition: featureToGeometryConverter.h:277
std::string query
Definition: featureToGeometryConverter.h:193
std::pair< MAKVRinTerra::DtFeatureGeometry, DtSurface > SurfaceDefinition
Definition: featureToGeometryConverter.h:177
int retries
Definition: featureToGeometryConverter.h:194
std::vector< SurfaceDefinition > Surfaces
Definition: featureToGeometryConverter.h:178
This class will triangulate the given objects in the queue into the collision world supplied...
Definition: featureToGeometryConverter.h:31
std::vector< MAKVRinTerra::DtFeatureGeometry > GeometryArray
Definition: featureToGeometryConverter.h:34
DtSurface surface
Definition: featureToGeometryConverter.h:100
DtThreadedTriangulator * myThreadedGeometryTriangulator
Definition: featureToGeometryConverter.h:297
ProcessGeometries myProcessGeometries
Definition: featureToGeometryConverter.h:106
Contains the declaration of the DtExtent class.
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
MAKVRinTerra::DtProj::Ptr myProjection
Definition: featureToGeometryConverter.h:88
bool myUseGeosGeometryForLandAreas
Default is false – use tessellator.
Definition: featureToGeometryConverter.h:303
DtExtent extent
Definition: featureToGeometryConverter.h:266
This class contains a Bullet btCollisionWorld, and also maintains ownership of the collision objects ...
Definition: collisionWorld.h:38
Represents a GIS feature.
Definition: feature.h:37
SavedQueries mySavedQueries
Definition: featureToGeometryConverter.h:286
SurfaceDefinition area
Definition: featureToGeometryConverter.h:267
std::vector< std::string > myQueryStringList
Predefine a list of Query string (QUERY1, QUERY2, etc) to speed up convertToGeometry() and addQuery()...
Definition: featureToGeometryConverter.h:260
Represents a feature geometry.
Definition: featureGeometry.h:35
Definition: point.h:34
Definition: featureToGeometryConverter.h:264
boost::shared_ptr< DtProj > Ptr
Definition: proj.h:47

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)