VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
featureToGeometryConverter.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright 2013 VT MAK
3 *******************************************************************************/
4 
7 
9 
10 #pragma once
11 
13 #include <features/feature.h>
14 #include <features/featureSet.h>
16 #include <vector>
17 #include <geometry/surface.h>
18 #include <geometry/extent.h>
19 
20 #include <tbb/tbb_thread.h>
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  tbb::tbb_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 MAKVRinTerra::DtFeatureGeometry generateIntersection(const DtPoint&, const DtTerrainImplementation* fc, QueryType,
204  MAKVRinTerra::DtFeatureGeometry& coverageArea);
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::auto_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 
260  struct LandArea
261  {
264  };
265 
266  typedef std::vector<LandArea> LandAreas;
267 
271  {
273  bool result;
275  };
276 
278  double mySeaLevel;
279 
281  typedef boost::ptr_map<std::string, MAKVRinTerra::DtFeatureSet> SavedQueries;
283 
286 
288 
290 
292 
295  mutable tbb::spin_rw_mutex myMutex;
296  mutable tbb::spin_rw_mutex myLastLocationMutex;
297 
300 };

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)