libspatialindex API Reference  (git-trunk)
MovingRegion.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Project: libspatialindex - A C++ library for spatial indexing
3  * Author: Marios Hadjieleftheriou, mhadji@gmail.com
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 
30 namespace SpatialIndex
31 {
33  {
34  using Region::getLow;
35  using Region::getHigh;
41 
42  public:
43  MovingRegion();
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);
63  MovingRegion(const MovingRegion& in);
64  ~MovingRegion() override;
65 
66  virtual MovingRegion& operator=(const MovingRegion& r);
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  MovingRegion* clone() override;
115 
116  //
117  // ISerializable interface
118  //
119  uint32_t getByteArraySize() override;
120  void loadFromByteArray(const uint8_t* data) override;
121  void storeToByteArray(uint8_t** data, uint32_t& len) override;
122 
123  //
124  // IEvolvingShape interface
125  //
126  void getVMBR(Region& out) const override;
127  void getMBRAtTime(double t, Region& out) const override;
128 
129  //
130  // ITimeShape interface
131  //
132  double getAreaInTime() const override;
133  double getAreaInTime(const Tools::IInterval& ivI) const override;
134  double getIntersectingAreaInTime(const ITimeShape& r) const override;
135  double getIntersectingAreaInTime(const Tools::IInterval& ivI, const ITimeShape& r) const override;
136 
137  void makeInfinite(uint32_t dimension) override;
138  void makeDimension(uint32_t dimension) override;
139 
140  private:
141  void initialize(
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  }; // CrossPoint
156 
157  public:
158  double* m_pVLow{nullptr};
159  double* m_pVHigh{nullptr};
160 
161  friend SIDX_DLL std::ostream& operator<<(std::ostream& os, const MovingRegion& r);
162  }; // MovingRegion
163 
165  SIDX_DLL std::ostream& operator<<(std::ostream& os, const MovingRegion& r);
166 }
virtual double getLow(uint32_t index) const
Definition: Region.cc:535
virtual bool containsPointInTime(const TimePoint &in) const
Definition: TimeRegion.cc:164
virtual bool containsRegionInTime(const TimeRegion &in) const
Definition: TimeRegion.cc:148
Tools::PoolPointer< MovingRegion > MovingRegionPtr
Definition: MovingRegion.h:164
virtual bool intersectsRegionInTime(const TimeRegion &in) const
Definition: TimeRegion.cc:134
virtual void combineRegionInTime(const TimeRegion &in)
Definition: TimeRegion.cc:181
virtual void getCombinedRegionInTime(TimeRegion &out, const TimeRegion &in) const
Definition: TimeRegion.cc:189
virtual double getHigh(uint32_t index) const
Definition: Region.cc:543
SIDX_DLL std::ostream & operator<<(std::ostream &os, const Ball &ball)
Definition: Ball.cc:215
#define SIDX_DLL
Definition: sidx_export.h:41