VR-Forces 4.2 Class Documentation
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>
16 #include <vector>
17 #include <geometry/surface.h>
18 #include <geometry/tdbextent.h>
19 
20 #include <tbb/tbb_thread.h>
21 #include <tbb/mutex.h>
22 
23 class DtCollisionWorld;
24 
27 {
28 public:
29  typedef std::vector<MAKVRinTerra::DtFeatureGeometry> GeometryArray;
30 
33 
35  virtual ~DtThreadedTriangulator();
36 
38  virtual void addProcessGeometry(const GeometryArray&, const DtSurface&, bool triangulate);
39 
41  static void threadMain(DtThreadedTriangulator*);
42 
44  virtual void process();
45 
48  virtual void stop();
49 
51  virtual void start();
52 
54  virtual bool isStopped() const;
55 
57  virtual bool isRunning() const;
58 
60  virtual void cancel();
61 
63  virtual bool isCancelled() const;
64 
66  virtual bool isProcessing() const;
67 
69  virtual void join();
70 
71 protected:
74  const DtSurface& surface) const;
75 
77  virtual void tessellate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
78 
80  virtual void triangulate(const GeometryArray& pointFeatures, const DtSurface& defaultSurface);
81 
82 protected:
85  tbb::tbb_thread* myThread;
86  mutable tbb::spin_rw_mutex myMutex;
87  bool myStop;
88  bool myRunning;
91 
93  {
95  DtSurface surface;
97  };
98 
99  typedef std::vector<ProcessGeometry> ProcessGeometries;
100 
102 };
103 
111 {
112 public:
114  {
115  QUERY_DEFAULT = 0,
116  POINT_SELECT = 1,
117  AREA_SELECT = 2,
118  SURFACE_SELECT = 3
119  };
120 
121  typedef std::pair<std::string, QueryType> Query;
122  typedef std::map<std::string, Query> Queries;
123 
126 
128  virtual ~DtFeatureToGeometryConverter();
129 
131  virtual void convertToGeometry(const DtPoint& pnt, MAKVRinTerra::DtFeatureContext*, DtCollisionWorld*);
132 
134  virtual void reset();
135 
137  virtual void addQuery(const std::string& key, const std::string& value, QueryType = QUERY_DEFAULT);
138 
141  virtual std::string addQuery(const std::string& value, QueryType = QUERY_DEFAULT);
142  std::string addQueryByAreaSelect(const std::string& value)
143  {
144  return addQuery(value, AREA_SELECT);
145  }
146 
147  std::string addQueryByPointSelect(const std::string& value)
148  {
149  return addQuery(value, POINT_SELECT);
150  }
151 
153  virtual void removeQuery(const std::string& key);
154 
156  virtual const Queries& queries() const;
157 
159  virtual bool determineSurfaceType(const DtPoint&, MAKVRinTerra::DtFeatureContext* fc, const std::string& query, DtSurface& surface);
160 
162  virtual bool hasSurface(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&) const;
163 
165  virtual void setSeaLevel(double);
166  virtual double seaLevel() const;
167 
168 protected:
169  typedef std::pair<MAKVRinTerra::DtFeatureGeometry, DtSurface> SurfaceDefinition;
170  typedef std::vector<SurfaceDefinition> Surfaces;
171 
174  {
176 
178  : geometry(orig.geometry), extent(orig.extent), query(orig.query), retries(orig.retries) {};
179 
180  AreaInformation& operator=(const AreaInformation& orig) { geometry = orig.geometry;
181  extent = orig.extent; query = orig.query; retries = orig.retries; return *this; };
182 
184  DtExtent extent;
185  std::string query;
186  int retries;
187  };
188 
189  typedef std::vector<AreaInformation> AreasCovered;
190 
193  virtual void addForConversion(const MAKVRinTerra::DtFeature&, MAKVRinTerra::DtFeatureContext* fc, DtCollisionWorld* c);
194 
196  virtual MAKVRinTerra::DtFeatureGeometry generateIntersection(const DtPoint&, MAKVRinTerra::DtFeatureContext* fc, QueryType,
197  MAKVRinTerra::DtFeatureGeometry& coverageArea);
198 
201  virtual bool shouldIntersectWith(const DtPoint&, MAKVRinTerra::DtFeatureContext*, MAKVRinTerra::DtFeatureGeometry&, QueryType,
202  const std::string& query, bool& firstTime, AreasCovered::iterator&);
203 
205  virtual void createGeometryFromPoints(MAKVRinTerra::DtFeatureContext*, DtCollisionWorld*,
206  const std::vector<MAKVRinTerra::DtFeatureGeometry>&) const;
207 
209  virtual void createGeometryFromAreas(MAKVRinTerra::DtFeatureContext*, DtCollisionWorld*, const MAKVRinTerra::DtFeatureGeometry&) const;
210 
212  virtual void createGeometry(const std::vector<MAKVRinTerra::DtFeatureGeometry>&,
213  const DtSurface&, MAKVRinTerra::DtFeatureContext*, DtCollisionWorld*, bool triangulate) const;
214 
216  virtual bool shouldAddAsSurface(const MAKVRinTerra::DtFeature& , DtSurface& surface) const;
217 
219  virtual void addNewSurfaceGeometries(const Surfaces&, MAKVRinTerra::DtFeatureContext* fc, const std::string& query);
220 
222  virtual bool noIntersectionFound(const MAKVRinTerra::DtFeatureGeometry&, DtSurface&) const;
223 
225  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> createOrReturnSavedQuery(MAKVRinTerra::DtFeatureContext* fc,
226  std::string query, bool readDirectly = false);
227 
229  virtual void coverageArea(const MAKVRinTerra::DtFeature& feature);
230 
232  virtual void addAreaCovered(const MAKVRinTerra::DtFeatureGeometry geom, const std::string& query, int retries = 0);
233 
235  virtual AreaInformation createAreaInfo(const MAKVRinTerra::DtFeatureGeometry& geom, const std::string& query,
236  int retries = 0) const;
237 
238 protected:
239  std::vector<MAKVRinTerra::DtFeatureGeometry> myPointFeatures;
240 
247 
249 
250  struct LandArea
251  {
252  DtExtent extent;
254  };
255 
256  typedef std::vector<LandArea> LandAreas;
257 
261  {
262  DtPoint location;
263  bool result;
264  DtSurface surface;
265  };
266 
268  double mySeaLevel;
269 
271  typedef boost::ptr_map<std::string, MAKVRinTerra::DtFeatureSet> SavedQueries;
273 
276 
278 
280 
282 
285 
288 };

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)