18 #include <boost/function.hpp>
23 namespace MAKVRinTerra
41 #ifdef DtObjectDebugger_Enable
56 static const int UnknownType = -1;
57 static const int PointType = 0;
58 static const int PathType = 1;
59 static const int AreaType = 2;
80 class RelationshipMatrix;
83 typedef std::shared_ptr<Implementation>
ImplPtr;
86 typedef std::shared_ptr<const Implementation>
ImplCPtr;
93 static std::string ToString(
Type);
100 static Area MakeBox(
Point,
double length,
double width,
double rotation);
101 static Area MakeBox(
const DtProj&,
double xmin,
double ymin,
double xmax,
double ymax);
107 static Area MakeArea(
const DtProj&,
const std::vector<DtPoint>& points);
108 static Area MakeArea(
const DtProj&,
const std::vector<DtVector>& points);
109 static Path MakePath(
const DtProj&,
const std::vector<DtPoint>& points);
110 static Path MakePath(
const DtProj&,
const std::vector<DtVector>& points);
118 template <
typename Container>
124 template <
typename Iterator>
176 std::string description()
const;
179 std::string toWKT()
const;
182 bool isValid()
const;
185 bool isEmpty()
const;
188 bool isUnknown()
const;
191 bool isPoint()
const;
200 unsigned dimension()
const;
211 template <
typename T>
212 std::shared_ptr<T> cast();
214 template <
typename T>
215 std::shared_ptr<const T> cast()
const;
218 const DtProj& projection()
const;
227 void convert(
const DtProj& p);
230 void convertToLocalTopo();
238 unsigned numberOfPoints()
const;
242 std::unique_ptr<PointVector> points()
const;
245 std::unique_ptr<PointVector> pointsWithHeight()
const;
247 boost::optional<DtPoint> singlePointWithHeight()
const;
251 std::unique_ptr<PointVector> pointsWithoutHeight()
const;
254 unsigned numberOfSubGeometries()
const;
257 std::unique_ptr<GeometryVector> subGeometries()
const;
296 Point centroid()
const;
344 virtual void lock() = 0;
345 virtual void unlock() = 0;
355 explicit Lock(
const Implementation&);
358 explicit Lock(
const Implementation&,
const Implementation&);
371 template <
typename T>
377 template <
typename T>
385 :
public std::enable_shared_from_this<DtFeatureGeometry::Implementation>
386 #ifdef DtObjectDebugger_Enable
398 virtual ~Implementation();
400 virtual Mutex& getMutex()
const;
402 virtual std::string description()
const;
404 virtual std::string toWKT()
const;
406 virtual bool isValid()
const;
408 virtual bool isEmpty()
const;
410 virtual unsigned dimension()
const;
412 virtual Hash hash()
const;
419 virtual bool unique()
const;
422 virtual const DtProj & projection()
const = 0;
429 virtual void convert(
const DtProj &) = 0;
432 virtual void prepare();
437 virtual Type type()
const = 0;
440 virtual unsigned numberOfPoints()
const = 0;
443 virtual std::unique_ptr<PointVector> points()
const = 0;
446 virtual boost::optional<DtPoint> singlePoint()
const;
449 virtual unsigned numberOfSubGeometries()
const = 0;
452 virtual std::unique_ptr<GeometryVector> subGeometries()
const = 0;
479 virtual double length()
const = 0;
481 virtual double area()
const = 0;
484 virtual Point centroid()
const = 0;
501 virtual DtFeatureGeometry bufferWithFlatCap(
double width,
unsigned segments)
const = 0;
516 virtual void lock()
override { myMutex.lock(); }
526 explicit Implementation();
527 explicit Implementation(
const Implementation&);
538 #ifdef DtObjectDebugger_Enable
543 typedef std::shared_ptr<EmptyImplementation>
Ptr;
553 virtual bool isValid()
const override;
556 virtual std::unique_ptr<PointVector>
points()
const override;
557 virtual boost::optional<DtPoint>
singlePoint()
const override;
560 virtual std::unique_ptr<GeometryVector>
subGeometries()
const override;
571 virtual double length()
const override;
572 virtual double area()
const override;
590 #ifdef DtObjectDebugger_Enable
595 virtual ~RelationshipMatrix();
597 virtual bool equals()
const;
599 virtual bool disjoint()
const;
600 virtual bool covers()
const;
601 virtual bool coveredBy()
const;
602 virtual bool within()
const;
603 virtual bool touches()
const;
604 virtual bool overlaps()
const;
605 virtual bool crosses()
const;
606 virtual bool contains()
const;
625 Handle(
const Implementation::Ptr&);
631 DtPoint pointWithHeight()
const;
632 DtPoint pointWithoutHeight()
const;
642 typedef std::vector<DtFeatureGeometry::Path>
Vector;
654 template <
typename Container>
657 return Make(
PointVector(cont.begin(), cont.end()), proj);
660 template <
typename Iterator>
668 Handle(
const Implementation::Ptr&);
670 Path reversed()
const;
674 class DT_DLL_features DtFeatureGeometry::Handle<DtFeatureGeometry::AreaType>
675 :
public DtFeatureGeometry
678 friend class DtFeatureGeometry;
680 typedef std::vector<DtFeatureGeometry::Area>
Vector;
684 Handle(
const Implementation::Ptr&);
688 Path outerBoundary()
const;
690 unsigned numberOfHoles()
const;
691 std::unique_ptr<GeometryVector> holes()
const;
693 Path findShortestPerimeter(
Path)
const;
virtual const DtProj & projection() const override
#define DT_DLL_features
stop complaining about multiple independent base classes for boost::noncopyable this should probably ...
Definition: featuresDefines.h:41
virtual void transform(const TransformFunction &) override
std::vector< DtPoint > PointVector
Definition: featureGeometry.h:76
DtTaggedException< struct InvalidGeometryTag > InvalidGeometry
Definition: featureGeometry.h:46
virtual std::unique_ptr< GeometryVector > subGeometries() const override
int Type
Type of geometry represented.
Definition: featureGeometry.h:54
virtual void convert(const DtProj &) override
std::shared_ptr< const DtProj > CPtr
Definition: proj.h:56
virtual bool contains(DtFeatureGeometry) const override
MutexType myMutex
Definition: featureGeometry.h:530
std::shared_ptr< Implementation > ImplPtr
Shared pointer to Implementation.
Definition: featureGeometry.h:80
Mutex * mutex2
Definition: featureGeometry.h:365
DtFeatureGeometry::Type Type
Definition: featureGeometry.h:394
virtual DtFeatureGeometry::Point closestPointTo(DtFeatureGeometry g, const DtProj &, double *distanceTo=0) const override
DtFeatureGeometry(const Handle< T > &h)
Create a geometry from a handle.
Definition: featureGeometry.h:158
Definition: featureGeometry.h:513
virtual bool isValid() const override
virtual boost::optional< DtPoint > singlePoint() const override
std::vector< DtFeatureGeometry::Path > Vector
Definition: featureGeometry.h:642
std::string Hash
DtFeatureGeometry caches the hashes for the geometries can be differentiated quickly.
Definition: featureGeometry.h:90
ImplPtr implementation()
Get implementation of this geometry.
#define DT_DEFINE_OBJECT_DEBUGGER_NAME(type)
Definition: objectCounter.h:31
Default on in debug, off in release.
Definition: objectCounter.h:27
Definition: featureGeometry.h:61
DT_DLL_features std::ostream & operator<<(std::ostream &, const DtFeatureTransform &)
std::ostream output.
Handle< AreaType > Area
Definition: featureGeometry.h:72
static DtFeatureGeometry MakeSet(const Container &cont)
Functions for creating set or collection geometries.
Definition: featureGeometry.h:119
virtual Point centroid() const override
Definition: featureGeometry.h:339
virtual unsigned numberOfPoints() const override
virtual bool covers(DtFeatureGeometry) const override
ImplPtr myImpl
Definition: featureGeometry.h:368
virtual void lock() override
Definition: featureGeometry.h:516
DtFeatureGeometry::ImplCPtr CPtr
Definition: featureGeometry.h:392
virtual bool touches(DtFeatureGeometry) const override
DtTaggedException< struct BadGeometryCastTag > BadGeometryCast
Definition: featureGeometry.h:47
virtual double length() const override
virtual DtFeatureGeometry boundary() const override
Handle< PointType > Point
Definition: featureGeometry.h:70
Represents some coordinate system. The terms "coordinate system", "projection", "spatial reference"...
Definition: proj.h:52
virtual bool intersects(DtFeatureGeometry) const override
std::shared_ptr< EmptyImplementation > Ptr
Definition: featureGeometry.h:543
virtual unsigned numberOfSubGeometries() const override
virtual std::unique_ptr< PointVector > points() const override
virtual Type type() const override
Mutex * mutex1
Definition: featureGeometry.h:364
virtual bool equals(DtFeatureGeometry) const override
virtual DtFeatureGeometry convexHull() const override
Scoped lock which will lock two Implementation mutexes in a predefined order to avoid deadlock...
Definition: featureGeometry.h:351
Handle< PathType > Path
Definition: featureGeometry.h:71
virtual bool crosses(DtFeatureGeometry) const override
virtual DtFeatureGeometry buffer(double width, unsigned segments) const override
std::vector< DtFeatureGeometry::Area > Vector
Definition: featureGeometry.h:680
boost::function< DtPoint(const DtPoint &)> TransformFunction
Callback for transform().
Definition: featureGeometry.h:221
virtual DtFeatureGeometry unionWith(DtFeatureGeometry g) const override
Create a new MAK exception type that inherits from boost::exception. Tag is what differentiates this ...
Definition: taggedException.h:15
virtual DtFeatureGeometry clone() const override
virtual double distanceTo(DtFeatureGeometry, const DtProj &) const override
static DtFeatureGeometry::Path Make(Iterator i, Iterator end, const DtProj &proj)
Definition: featureGeometry.h:661
DtFeatureGeometry Unknown
Definition: featureGeometry.h:69
virtual void unlock() override
Definition: featureGeometry.h:518
std::vector< DtFeatureGeometry > GeometryVector
Definition: featureGeometry.h:75
DtProj::CPtr myProjection
Definition: featureGeometry.h:585
Implementation which represents an empty geometry. Empty geometry do have 0 points, do not intersect with any other geometries, and are infinitely far away from all other geometries.
Definition: featureGeometry.h:536
std::shared_ptr< const Implementation > ImplCPtr
Shared pointer to const Implementation.
Definition: featureGeometry.h:86
DT_DLL_VRVCORE double length(const makVrv::DtCoordinateSystem &, const std::vector< DtVector > &vertices)
Returns the total distance of a segmented line defined by the provided vector of vertices. Coordinates are in local database coordinates. The coordinate system is used to convert between the local database coordinates and geocentric. All distance is in 2D – the Z value is ignored.
virtual double area() const override
static DtFeatureGeometry::Path Make(const Container &cont, const DtProj &proj)
Definition: featureGeometry.h:655
virtual DtFeatureGeometry differenceWith(DtFeatureGeometry g) const override
Hash myHash
Definition: featureGeometry.h:529
virtual bool within(DtFeatureGeometry) const override
std::shared_ptr< T > cast()
Get implementation as a specific type.
Definition: featureGeometry.h:372
std::recursive_mutex myMutex
Definition: featureGeometry.h:522
DtFeatureGeometry::ImplPtr Ptr
Definition: featureGeometry.h:391
virtual DtFeatureGeometry bufferWithFlatCap(double width, unsigned segments) const override
virtual DtFeatureGeometry intersectionWith(DtFeatureGeometry g) const override
Represents a feature geometry.
Definition: featureGeometry.h:40
DtFeatureGeometry & operator=(const Handle< T > &h)
Definition: featureGeometry.h:166
virtual bool overlaps(DtFeatureGeometry) const override
static DtFeatureGeometry MakeSet(Iterator i, Iterator end)
Functions for creating set or collection geometries.
Definition: featureGeometry.h:125