QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
MovingRegion.h
Go to the documentation of this file.
1/******************************************************************************
2 * Project: libspatialindex - A C++ library for spatial indexing
3 * Author: Marios Hadjieleftheriou, [email protected]
4 ******************************************************************************
5 * Copyright (c) 2003, Marios Hadjieleftheriou
6 *
7 * All rights reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 * DEALINGS IN THE SOFTWARE.
26******************************************************************************/
27
28#pragma once
29
30namespace SpatialIndex
31{
33 {
34 using Region::getLow;
35 using Region::getHigh;
36 using TimeRegion::intersectsRegionInTime;
37 using TimeRegion::containsRegionInTime;
38 using TimeRegion::combineRegionInTime;
39 using TimeRegion::getCombinedRegionInTime;
40 using TimeRegion::containsPointInTime;
41
42 public:
45 const double* pLow, const double* pHigh,
46 const double* pVLow, const double* pVHigh,
47 const Tools::IInterval& ti, uint32_t dimension);
49 const double* pLow, const double* pHigh,
50 const double* pVLow, const double* pVHigh,
51 double tStart, double tEnd, uint32_t dimension);
53 const Point& low, const Point& high,
54 const Point& vlow, const Point& vhigh,
55 const Tools::IInterval& ti);
57 const Point& low, const Point& high,
58 const Point& vlow, const Point& vhigh,
59 double tStart, double tEnd);
60 MovingRegion(const Region& mbr, const Region& vbr, const Tools::IInterval& ivI);
61 MovingRegion(const Region& mbr, const Region& vbr, double tStart, double tEnd);
62 MovingRegion(const MovingPoint& low, const MovingPoint& high);
64 virtual ~MovingRegion();
65
67 virtual bool operator==(const MovingRegion&) const;
68
69 bool isShrinking() const;
70
71 virtual double getLow(uint32_t index, double t) const;
72 virtual double getHigh(uint32_t index, double t) const;
73 virtual double getExtrapolatedLow(uint32_t index, double t) const;
74 virtual double getExtrapolatedHigh(uint32_t index, double t) const;
75 virtual double getVLow(uint32_t index) const;
76 virtual double getVHigh(uint32_t index) const;
77
78 virtual bool intersectsRegionInTime(const MovingRegion& r) const;
79 virtual bool intersectsRegionInTime(const MovingRegion& r, Tools::IInterval& out) const;
80 virtual bool intersectsRegionInTime(const Tools::IInterval& ivI, const MovingRegion& r, Tools::IInterval& ret) const;
81 virtual bool containsRegionInTime(const MovingRegion& r) const;
82 virtual bool containsRegionInTime(const Tools::IInterval& ivI, const MovingRegion& r) const;
83 virtual bool containsRegionAfterTime(double t, const MovingRegion& r) const;
84
85 virtual double getProjectedSurfaceAreaInTime() const;
86 virtual double getProjectedSurfaceAreaInTime(const Tools::IInterval& ivI) const;
87
88 virtual double getCenterDistanceInTime(const MovingRegion& r) const;
89 virtual double getCenterDistanceInTime(const Tools::IInterval& ivI, const MovingRegion& r) const;
90
91 virtual bool intersectsRegionAtTime(double t, const MovingRegion& r) const;
92 virtual bool containsRegionAtTime(double t, const MovingRegion& r) const;
93
94 virtual bool intersectsPointInTime(const MovingPoint& p) const;
95 virtual bool intersectsPointInTime(const MovingPoint& p, Tools::IInterval& out) const;
96 virtual bool intersectsPointInTime(const Tools::IInterval& ivI, const MovingPoint& p, Tools::IInterval& out) const;
97 virtual bool containsPointInTime(const MovingPoint& p) const;
98 virtual bool containsPointInTime(const Tools::IInterval& ivI, const MovingPoint& p) const;
99
100 //virtual bool intersectsPointAtTime(double t, const MovingRegion& in) const;
101 //virtual bool containsPointAtTime(double t, const MovingRegion& in) const;
102
103 virtual void combineRegionInTime(const MovingRegion& r);
104 virtual void combineRegionAfterTime(double t, const MovingRegion& r);
105 virtual void getCombinedRegionInTime(MovingRegion& out, const MovingRegion& in) const;
106 virtual void getCombinedRegionAfterTime(double t, MovingRegion& out, const MovingRegion& in) const;
107
108 virtual double getIntersectingAreaInTime(const MovingRegion& r) const;
109 virtual double getIntersectingAreaInTime(const Tools::IInterval& ivI, const MovingRegion& r) const;
110
111 //
112 // IObject interface
113 //
114 virtual MovingRegion* clone();
115
116 //
117 // ISerializable interface
118 //
119 virtual uint32_t getByteArraySize();
120 virtual void loadFromByteArray(const byte* data);
121 virtual void storeToByteArray(byte** data, uint32_t& len);
122
123 //
124 // IEvolvingShape interface
125 //
126 virtual void getVMBR(Region& out) const;
127 virtual void getMBRAtTime(double t, Region& out) const;
128
129 //
130 // ITimeShape interface
131 //
132 virtual double getAreaInTime() const;
133 virtual double getAreaInTime(const Tools::IInterval& ivI) const;
134 virtual double getIntersectingAreaInTime(const ITimeShape& r) const;
135 virtual double getIntersectingAreaInTime(const Tools::IInterval& ivI, const ITimeShape& r) const;
136
137 virtual void makeInfinite(uint32_t dimension);
138 virtual void makeDimension(uint32_t dimension);
139
140 private:
142 const double* pLow, const double* pHigh,
143 const double* pVLow, const double* pVHigh,
144 double tStart, double tEnd, uint32_t dimension);
145
146 public:
148 {
149 public:
150 double m_t;
151 uint32_t m_dimension;
152 uint32_t m_boundary;
154
155 struct ascending: public std::binary_function<CrossPoint&, CrossPoint&, bool>
156 {
157 bool operator()(const CrossPoint& __x, const CrossPoint& __y) const { return __x.m_t > __y.m_t; }
158 };
159 }; // CrossPoint
160
161 public:
162 double* m_pVLow;
163 double* m_pVHigh;
164
165 friend SIDX_DLL std::ostream& operator<<(std::ostream& os, const MovingRegion& r);
166 }; // MovingRegion
167
169 SIDX_DLL std::ostream& operator<<(std::ostream& os, const MovingRegion& r);
170}
Definition SpatialIndex.h:98
Definition SpatialIndex.h:82
Definition MovingPoint.h:33
Definition MovingRegion.h:148
double m_t
Definition MovingRegion.h:150
const MovingRegion * m_to
Definition MovingRegion.h:153
uint32_t m_boundary
Definition MovingRegion.h:152
uint32_t m_dimension
Definition MovingRegion.h:151
Definition MovingRegion.h:33
virtual bool operator==(const MovingRegion &) const
virtual double getIntersectingAreaInTime(const ITimeShape &r) const
virtual double getLow(uint32_t index, double t) const
virtual double getCenterDistanceInTime(const MovingRegion &r) const
virtual double getAreaInTime() const
MovingRegion(const double *pLow, const double *pHigh, const double *pVLow, const double *pVHigh, double tStart, double tEnd, uint32_t dimension)
virtual void combineRegionAfterTime(double t, const MovingRegion &r)
virtual double getExtrapolatedHigh(uint32_t index, double t) const
virtual bool intersectsPointInTime(const MovingPoint &p) const
virtual double getAreaInTime(const Tools::IInterval &ivI) const
virtual double getVHigh(uint32_t index) const
friend SIDX_DLL std::ostream & operator<<(std::ostream &os, const MovingRegion &r)
MovingRegion(const Point &low, const Point &high, const Point &vlow, const Point &vhigh, const Tools::IInterval &ti)
virtual double getProjectedSurfaceAreaInTime(const Tools::IInterval &ivI) const
MovingRegion(const MovingRegion &in)
MovingRegion(const Region &mbr, const Region &vbr, double tStart, double tEnd)
virtual double getIntersectingAreaInTime(const MovingRegion &r) const
virtual bool containsRegionAfterTime(double t, const MovingRegion &r) const
virtual void getCombinedRegionInTime(MovingRegion &out, const MovingRegion &in) const
double * m_pVLow
Definition MovingRegion.h:162
void initialize(const double *pLow, const double *pHigh, const double *pVLow, const double *pVHigh, double tStart, double tEnd, uint32_t dimension)
virtual double getExtrapolatedLow(uint32_t index, double t) const
virtual void makeInfinite(uint32_t dimension)
double * m_pVHigh
Definition MovingRegion.h:163
virtual void getMBRAtTime(double t, Region &out) const
virtual bool containsRegionInTime(const MovingRegion &r) const
virtual bool containsRegionAtTime(double t, const MovingRegion &r) const
virtual bool intersectsRegionAtTime(double t, const MovingRegion &r) const
virtual bool intersectsPointInTime(const Tools::IInterval &ivI, const MovingPoint &p, Tools::IInterval &out) const
virtual void getCombinedRegionAfterTime(double t, MovingRegion &out, const MovingRegion &in) const
virtual bool intersectsRegionInTime(const Tools::IInterval &ivI, const MovingRegion &r, Tools::IInterval &ret) const
virtual void storeToByteArray(byte **data, uint32_t &len)
virtual double getVLow(uint32_t index) const
virtual void combineRegionInTime(const MovingRegion &r)
virtual void loadFromByteArray(const byte *data)
virtual void getVMBR(Region &out) const
virtual double getHigh(uint32_t index, double t) const
MovingRegion(const Point &low, const Point &high, const Point &vlow, const Point &vhigh, double tStart, double tEnd)
virtual double getIntersectingAreaInTime(const Tools::IInterval &ivI, const ITimeShape &r) const
virtual bool intersectsRegionInTime(const MovingRegion &r) const
virtual bool containsPointInTime(const Tools::IInterval &ivI, const MovingPoint &p) const
MovingRegion(const Region &mbr, const Region &vbr, const Tools::IInterval &ivI)
virtual bool intersectsRegionInTime(const MovingRegion &r, Tools::IInterval &out) const
MovingRegion(const MovingPoint &low, const MovingPoint &high)
virtual uint32_t getByteArraySize()
MovingRegion(const double *pLow, const double *pHigh, const double *pVLow, const double *pVHigh, const Tools::IInterval &ti, uint32_t dimension)
virtual double getIntersectingAreaInTime(const Tools::IInterval &ivI, const MovingRegion &r) const
virtual bool containsPointInTime(const MovingPoint &p) const
virtual MovingRegion & operator=(const MovingRegion &r)
virtual double getCenterDistanceInTime(const Tools::IInterval &ivI, const MovingRegion &r) const
virtual bool intersectsPointInTime(const MovingPoint &p, Tools::IInterval &out) const
virtual void makeDimension(uint32_t dimension)
virtual double getProjectedSurfaceAreaInTime() const
virtual bool containsRegionInTime(const Tools::IInterval &ivI, const MovingRegion &r) const
virtual MovingRegion * clone()
Definition Point.h:35
Definition Region.h:33
Definition TimeRegion.h:33
Definition Tools.h:201
Definition PoolPointer.h:37
Definition CustomStorage.h:34
Tools::PoolPointer< MovingRegion > MovingRegionPtr
Definition MovingRegion.h:168
SIDX_DLL std::ostream & operator<<(std::ostream &os, const LineSegment &pt)
#define SIDX_DLL
Definition sidx_export.h:41
bool operator()(const CrossPoint &__x, const CrossPoint &__y) const
Definition MovingRegion.h:157