VR-Forces Developer's Guide
 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/spin_rw_mutex.h>
22 #include <tbb/mutex.h>
23 
24 #include <boost/ptr_container/ptr_map.hpp>
25 
26 class DtCollisionWorld;
28 
31 {
32 public:
33  typedef std::vector<MAKVRinTerra::DtFeatureGeometry> GeometryArray;
34 
37 
39  virtual ~DtThreadedTriangulator();
40 
42  virtual void addProcessGeometry(const GeometryArray&, const DtSurface&, bool triangulate);
43 
45  static void threadMain(DtThreadedTriangulator*);
46 
48  virtual void process();
49 
52  virtual void stop();
53 
55  virtual void start();
56 
58  virtual bool isStopped() const;
59 
61  virtual bool isRunning() const;
62 
64  virtual void cancel();
65 
67  virtual bool isCancelled() const;
68 
70  virtual bool isProcessing() const;
71 
73  virtual void join();
74 
75 protected:
78  const DtSurface& surface) const;
79 
81  virtual void tessellate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
82 
84  virtual void triangulate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
85 
86 protected:
89  std::thread* myThread;
90  mutable tbb::spin_rw_mutex myMutex;
91  bool myStop;
92  bool myRunning;
95 
97  {
101  };
102 
103  typedef std::vector<ProcessGeometry> ProcessGeometries;
104 
106 };
107 
115 {
116 public:
118  {
119  QUERY_DEFAULT = 0,
120  POINT_SELECT = 1,
121  AREA_SELECT = 2,
122  SURFACE_SELECT = 3
123  };
124 
125  typedef std::pair<std::string, QueryType> Query;
126  typedef std::map<std::string, Query> Queries;
127 
130 
132  virtual ~DtFeatureToGeometryConverter();
133 
135  virtual void convertToGeometry(const DtPoint& pnt, const DtTerrainImplementation*, DtCollisionWorld*);
136 
138  virtual void reset();
139 
141  virtual void addQuery(const std::string& key, const std::string& value, QueryType = QUERY_DEFAULT);
142 
145  virtual std::string addQuery(const std::string& value, QueryType = QUERY_DEFAULT);
146  std::string addQueryByAreaSelect(const std::string& value)
147  {
148  return addQuery(value, AREA_SELECT);
149  }
150 
151  std::string addQueryByPointSelect(const std::string& value)
152  {
153  return addQuery(value, POINT_SELECT);
154  }
155 
157  virtual void removeQuery(const std::string& key);
158 
160  virtual const Queries& queries() const;
161 
163  virtual bool determineSurfaceType(const DtPoint&, const DtTerrainImplementation* fc, const std::string& query, DtSurface& surface);
164 
166  virtual bool hasSurface(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&);
167 
169  virtual void setSeaLevel(double);
170  virtual double seaLevel() const;
171 
173  virtual DtCollisionWorld* collisionWorld();
174 
175 protected:
176  typedef std::pair<MAKVRinTerra::DtFeatureGeometry, DtSurface> SurfaceDefinition;
177  typedef std::vector<SurfaceDefinition> Surfaces;
178 
181  {
183 
185  : geometry(orig.geometry), extent(orig.extent), query(orig.query), retries(orig.retries) {};
186 
187  AreaInformation& operator=(const AreaInformation& orig) { geometry = orig.geometry;
188  extent = orig.extent; query = orig.query; retries = orig.retries; return *this; };
189 
192  std::string query;
193  int retries;
194  };
195 
196  typedef std::vector<AreaInformation> AreasCovered;
197 
200  virtual void addForConversion(const MAKVRinTerra::DtFeature&, const DtTerrainImplementation* fc, DtCollisionWorld* c);
201 
203  virtual bool generateIntersection(const DtPoint&, const DtTerrainImplementation* fc, QueryType,
205 
208  virtual bool shouldIntersectWith(const DtPoint&, const DtTerrainImplementation*, MAKVRinTerra::DtFeatureGeometry&, QueryType,
209  const std::string& query, bool& firstTime, AreasCovered::iterator&);
210 
212  virtual void createGeometryFromPoints(const DtTerrainImplementation*, DtCollisionWorld*,
213  const std::vector<MAKVRinTerra::DtFeatureGeometry>&) const;
214 
216  virtual void createGeometryFromAreas(const DtTerrainImplementation*, DtCollisionWorld*, const MAKVRinTerra::DtFeatureGeometry&) const;
217 
219  virtual void createGeometry(const std::vector<MAKVRinTerra::DtFeatureGeometry>&,
220  const DtSurface&, const DtTerrainImplementation*, DtCollisionWorld*, bool triangulate) const;
221 
223  virtual bool shouldAddAsSurface(const MAKVRinTerra::DtFeature& , DtSurface& surface) const;
224 
226  virtual void addNewSurfaceGeometries(const Surfaces&, const DtTerrainImplementation* fc, const std::string& query);
227 
229  virtual bool noIntersectionFound(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&) const;
230 
232  virtual std::unique_ptr<MAKVRinTerra::DtFeatureSet> createOrReturnSavedQuery(const DtTerrainImplementation* fc,
233  std::string query, bool readDirectly = false);
234 
236  virtual void coverageArea(const MAKVRinTerra::DtFeature& feature);
237 
239  virtual void addAreaCovered(const MAKVRinTerra::DtFeatureGeometry& geom, const std::string& query, int retries = 0);
240 
242  virtual AreaInformation createAreaInfo(const MAKVRinTerra::DtFeatureGeometry& geom, const std::string& query,
243  int retries = 0) const;
244 
246  virtual void updateLastIntersection(const DtPoint&, bool valid, const DtSurface& surface);
247 
248 protected:
249  std::vector<MAKVRinTerra::DtFeatureGeometry> myPointFeatures;
250 
257 
259  std::vector< std::string > myQueryStringList;
260 
262 
263  struct LandArea
264  {
267  };
268 
269  typedef std::vector<LandArea> LandAreas;
270 
274  {
276  bool result;
278  };
279 
281  double mySeaLevel;
282 
284  typedef boost::ptr_map<std::string, MAKVRinTerra::DtFeatureSet> SavedQueries;
286 
289 
291 
293 
295 
298  mutable tbb::spin_rw_mutex myMutex;
299  mutable tbb::spin_rw_mutex myLastLocationMutex;
300 
303 };
This is the abstract base class for all terrain implementations. A terrain implementation is used by ...
Definition: terrainImplementation.h:244
bool myCancelled
Definition: featureToGeometryConverter.h:93
tbb::spin_rw_mutex myMutex
Definition: featureToGeometryConverter.h:298
AreaInformation(const AreaInformation &orig)
Definition: featureToGeometryConverter.h:184
DtCollisionWorld * myCollisionWorld
Definition: featureToGeometryConverter.h:88
QueryType
Definition: featureToGeometryConverter.h:117
bool triangulate
Definition: featureToGeometryConverter.h:100
tbb::spin_rw_mutex myMutex
Definition: featureToGeometryConverter.h:90
std::vector< LandArea > LandAreas
Definition: featureToGeometryConverter.h:269
Queries myQueries
Queries that can be used to perform specified functions. These queries will be used by particluar sub...
Definition: featureToGeometryConverter.h:256
std::string addQueryByAreaSelect(const std::string &value)
Definition: featureToGeometryConverter.h:146
Area coverage.
Definition: featureToGeometryConverter.h:180
std::vector< MAKVRinTerra::DtFeatureGeometry > myPointFeatures
Definition: featureToGeometryConverter.h:249
bool myStop
Definition: featureToGeometryConverter.h:91
bool myProcessing
Definition: featureToGeometryConverter.h:94
bool myCoverageAreasInitialized
Definition: featureToGeometryConverter.h:294
DtSurface surface
Definition: featureToGeometryConverter.h:277
double mySeaLevel
Definition: featureToGeometryConverter.h:281
MAKVRinTerra::DtFeatureGeometry myIntersectArea
Definition: featureToGeometryConverter.h:290
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
AreasCovered myCoverageAreas
Definition: featureToGeometryConverter.h:288
std::map< std::string, Query > Queries
Definition: featureToGeometryConverter.h:126
Definition: surface.h:181
GeometryArray geometry
Definition: featureToGeometryConverter.h:98
DtCollisionWorld * myCollisionWorld
Definition: featureToGeometryConverter.h:292
DtThreadedTriangulator * myThreadedSurfaceTriangulator
Definition: featureToGeometryConverter.h:297
DtExtent extent
Definition: featureToGeometryConverter.h:191
MAKVRinTerra::DtFeatureGeometry geometry
Definition: featureToGeometryConverter.h:188
AreasCovered myAreasCovered
Definition: featureToGeometryConverter.h:287
tbb::spin_rw_mutex myLastLocationMutex
Definition: featureToGeometryConverter.h:299
This class will allow for the addition of features and their geometry for inclusion into the collisio...
Definition: featureToGeometryConverter.h:114
LastIntersection myLastIntersection
Definition: featureToGeometryConverter.h:280
boost::ptr_map< std::string, MAKVRinTerra::DtFeatureSet > SavedQueries
Saved queries.
Definition: featureToGeometryConverter.h:284
Handle< PointType > Point
Definition: featureGeometry.h:70
std::vector< AreaInformation > AreasCovered
Definition: featureToGeometryConverter.h:196
Definition: featureToGeometryConverter.h:96
std::pair< std::string, QueryType > Query
Definition: featureToGeometryConverter.h:125
AreaInformation & operator=(const AreaInformation &orig)
Definition: featureToGeometryConverter.h:187
std::vector< ProcessGeometry > ProcessGeometries
Definition: featureToGeometryConverter.h:103
Represents some coordinate system. The terms &quot;coordinate system&quot;, &quot;projection&quot;, &quot;spatial reference&quot;...
Definition: proj.h:52
AreaInformation()
Definition: featureToGeometryConverter.h:182
bool myRunning
Definition: featureToGeometryConverter.h:92
Surfaces myNewSurfaces
Definition: featureToGeometryConverter.h:261
Convenience member to return the last intersection if geometries match.
Definition: featureToGeometryConverter.h:273
std::string addQueryByPointSelect(const std::string &value)
Definition: featureToGeometryConverter.h:151
std::shared_ptr< DtProj > Ptr
Definition: proj.h:55
DtPoint location
Definition: featureToGeometryConverter.h:275
LandAreas myLandAreas
Definition: featureToGeometryConverter.h:271
bool result
Definition: featureToGeometryConverter.h:276
std::string query
Definition: featureToGeometryConverter.h:192
std::pair< MAKVRinTerra::DtFeatureGeometry, DtSurface > SurfaceDefinition
Definition: featureToGeometryConverter.h:176
int retries
Definition: featureToGeometryConverter.h:193
std::vector< SurfaceDefinition > Surfaces
Definition: featureToGeometryConverter.h:177
This class will triangulate the given objects in the queue into the collision world supplied...
Definition: featureToGeometryConverter.h:30
std::vector< MAKVRinTerra::DtFeatureGeometry > GeometryArray
Definition: featureToGeometryConverter.h:33
DtSurface surface
Definition: featureToGeometryConverter.h:99
DtThreadedTriangulator * myThreadedGeometryTriangulator
Definition: featureToGeometryConverter.h:296
std::thread * myThread
Definition: featureToGeometryConverter.h:89
ProcessGeometries myProcessGeometries
Definition: featureToGeometryConverter.h:105
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:87
bool myUseGeosGeometryForLandAreas
Default is false – use tessellator.
Definition: featureToGeometryConverter.h:302
DtExtent extent
Definition: featureToGeometryConverter.h:265
This class contains a Bullet btCollisionWorld, and also maintains ownership of the collision objects ...
Definition: collisionWorld.h:41
Represents a GIS feature. Features consist of a DtFeatureGeometry (2.5D geometric vector data) and a ...
Definition: feature.h:36
SavedQueries mySavedQueries
Definition: featureToGeometryConverter.h:285
SurfaceDefinition area
Definition: featureToGeometryConverter.h:266
std::vector< std::string > myQueryStringList
Predefine a list of Query string (QUERY1, QUERY2, etc) to speed up convertToGeometry() and addQuery()...
Definition: featureToGeometryConverter.h:259
Represents a feature geometry.
Definition: featureGeometry.h:40
Definition: point.h:34
Definition: featureToGeometryConverter.h:263

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)