LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | List of all members
lsst::sphgeom::CompoundRegion Class Referenceabstract

CompoundRegion is an intermediate base class for spherical regions that are comprised of a point-set operation on other nested regions. More...

#include <CompoundRegion.h>

Inheritance diagram for lsst::sphgeom::CompoundRegion:
lsst::sphgeom::Region lsst::sphgeom::IntersectionRegion lsst::sphgeom::UnionRegion

Public Member Functions

 CompoundRegion (std::vector< std::unique_ptr< Region > > operands) noexcept
 Construct by taking ownership of operands.
 
 CompoundRegion (CompoundRegion const &)
 
 CompoundRegion (CompoundRegion &&) noexcept=default
 
CompoundRegionoperator= (CompoundRegion const &)=delete
 
CompoundRegionoperator= (CompoundRegion &&)=delete
 
size_t nOperands () const
 
Region const & getOperand (std::size_t n) const
 
virtual Relationship relate (Region const &r) const =0
 
Relationship relate (Box const &b) const override
 
Relationship relate (Circle const &c) const override
 
Relationship relate (ConvexPolygon const &p) const override
 
Relationship relate (Ellipse const &e) const override
 
virtual std::unique_ptr< Regionclone () const =0
 clone returns a deep copy of this region.
 
virtual Box getBoundingBox () const =0
 getBoundingBox returns a bounding-box for this region.
 
virtual Box3d getBoundingBox3d () const =0
 getBoundingBox3d returns a 3-dimensional bounding-box for this region.
 
virtual Circle getBoundingCircle () const =0
 getBoundingCircle returns a bounding-circle for this region.
 
virtual bool isEmpty () const =0
 isEmpty returns true when a region does not contain any points.
 
virtual bool contains (UnitVector3d const &) const =0
 contains tests whether the given unit vector is inside this region.
 
bool contains (double x, double y, double z) const
 contains tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region.
 
bool contains (double lon, double lat) const
 contains tests whether the unit vector defined by the given longitude and latitude coordinates (in radians) is inside this region.
 
virtual std::vector< std::uint8_tencode () const =0
 encode serializes this region into an opaque byte string.
 
virtual TriState overlaps (Region const &other) const =0
 
virtual TriState overlaps (Box const &) const =0
 
virtual TriState overlaps (Circle const &) const =0
 
virtual TriState overlaps (ConvexPolygon const &) const =0
 
virtual TriState overlaps (Ellipse const &) const =0
 

Static Public Member Functions

static std::vector< std::unique_ptr< Region > > getRegions (Region const &region)
 getRegions returns a vector of Region.
 
static std::unique_ptr< CompoundRegiondecode (std::vector< std::uint8_t > const &s)
 
static std::unique_ptr< CompoundRegiondecode (std::uint8_t const *buffer, size_t n)
 
static std::unique_ptr< RegiondecodeBase64 (std::string const &s)
 
static std::unique_ptr< RegiondecodeBase64 (std::string_view const &s)
 
static TriState decodeOverlapsBase64 (std::string const &s)
 
static TriState decodeOverlapsBase64 (std::string_view const &s)
 

Protected Member Functions

std::vector< std::uint8_t_encode (std::uint8_t tc) const
 
std::vector< std::unique_ptr< Region > > const & operands () const
 
template<typename Compound >
void flatten_operands ()
 

Static Protected Member Functions

static std::vector< std::unique_ptr< Region > > _decode (std::uint8_t tc, std::uint8_t const *buffer, std::size_t nBytes)
 
static TriState _relationship_to_overlaps (Relationship r)
 

Detailed Description

CompoundRegion is an intermediate base class for spherical regions that are comprised of a point-set operation on other nested regions.

Definition at line 55 of file CompoundRegion.h.

Constructor & Destructor Documentation

◆ CompoundRegion() [1/3]

lsst::sphgeom::CompoundRegion::CompoundRegion ( std::vector< std::unique_ptr< Region > > operands)
explicitnoexcept

Construct by taking ownership of operands.

Definition at line 88 of file CompoundRegion.cc.

89 : _operands(std::move(operands))
90{
91}
std::vector< std::unique_ptr< Region > > const & operands() const
T move(T... args)

◆ CompoundRegion() [2/3]

lsst::sphgeom::CompoundRegion::CompoundRegion ( CompoundRegion const & other)

Definition at line 93 of file CompoundRegion.cc.

94 : _operands()
95{
96 for (auto&& operand: other._operands) {
97 _operands.emplace_back(operand->clone());
98 }
99}

◆ CompoundRegion() [3/3]

lsst::sphgeom::CompoundRegion::CompoundRegion ( CompoundRegion && )
defaultnoexcept

Member Function Documentation

◆ _decode()

std::vector< std::unique_ptr< Region > > lsst::sphgeom::CompoundRegion::_decode ( std::uint8_t tc,
std::uint8_t const * buffer,
std::size_t nBytes )
staticprotected

Definition at line 135 of file CompoundRegion.cc.

136 {
137 std::uint8_t const *end = buffer + nBytes;
138 if (nBytes == 0) {
139 throw std::runtime_error("Encoded CompoundRegion is truncated.");
140 }
141 if (buffer[0] != tc) {
142 throw std::runtime_error("Byte string is not an encoded CompoundRegion.");
143 }
144 ++buffer;
146 while (buffer != end) {
147 std::uint64_t nBytes = consumeDecodeU64(buffer, end);
148 if (buffer + nBytes > end) {
149 throw std::runtime_error("Encoded CompoundRegion is truncated.");
150 }
151 result.push_back(Region::decode(buffer, nBytes));
152 buffer += nBytes;
153 }
154 return result;
155}
py::object result
Definition _schema.cc:429
int end
static std::unique_ptr< Region > decode(std::vector< std::uint8_t > const &s)
Definition Region.h:162

◆ _encode()

std::vector< std::uint8_t > lsst::sphgeom::CompoundRegion::_encode ( std::uint8_t tc) const
protected

Definition at line 124 of file CompoundRegion.cc.

124 {
126 buffer.push_back(tc);
127 for (auto&& operand: _operands) {
128 auto operand_buffer = operand->encode();
129 encodeU64(operand_buffer.size(), buffer);
130 buffer.insert(buffer.end(), operand_buffer.begin(), operand_buffer.end());
131 }
132 return buffer;
133}
T end(T... args)
T insert(T... args)
void encodeU64(std::uint64_t item, std::vector< std::uint8_t > &buffer)
encodeU64 appends an uint64 in little-endian byte order to the end of buffer.
Definition codec.h:96
T push_back(T... args)

◆ _relationship_to_overlaps()

static TriState lsst::sphgeom::Region::_relationship_to_overlaps ( Relationship r)
inlinestaticprotectedinherited

Definition at line 206 of file Region.h.

206 {
207 // `relate` returns exact relation when specific bit is set, if it is
208 // not then relation may be true or not.
209 if ((r & DISJOINT) == DISJOINT) {
210 return TriState(false);
211 }
212 if ((r & (WITHIN | CONTAINS)).any()) {
213 return TriState(true);
214 }
215 return TriState();
216 }
bool any(CoordinateExpr< N > const &expr) noexcept
Return true if any elements are true.

◆ clone()

virtual std::unique_ptr< Region > lsst::sphgeom::Region::clone ( ) const
pure virtualinherited

◆ contains() [1/3]

bool lsst::sphgeom::Region::contains ( double lon,
double lat ) const
inherited

contains tests whether the unit vector defined by the given longitude and latitude coordinates (in radians) is inside this region.

Definition at line 54 of file Region.cc.

54 {
55 return contains(UnitVector3d(LonLat::fromRadians(lon, lat)));
56}
static LonLat fromRadians(double lon, double lat)
Definition LonLat.h:62
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.

◆ contains() [2/3]

bool lsst::sphgeom::Region::contains ( double x,
double y,
double z ) const
inherited

contains tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region.

Definition at line 50 of file Region.cc.

50 {
51 return contains(UnitVector3d(x, y, z));
52}
double z
Definition Match.cc:44
int y
Definition SpanSet.cc:48

◆ contains() [3/3]

virtual bool lsst::sphgeom::Region::contains ( UnitVector3d const & ) const
pure virtualinherited

◆ decode() [1/2]

std::unique_ptr< CompoundRegion > lsst::sphgeom::CompoundRegion::decode ( std::uint8_t const * buffer,
size_t n )
static

decode deserializes a CompoundRegion from a byte string produced by encode.

Definition at line 157 of file CompoundRegion.cc.

157 {
158 if (n == 0) {
159 throw std::runtime_error("Encoded CompoundRegion is truncated.");
160 }
161 switch (buffer[0]) {
163 return UnionRegion::decode(buffer, n);
165 return IntersectionRegion::decode(buffer, n);
166 default:
167 throw std::runtime_error("Byte string is not an encoded CompoundRegion.");
168 }
169}
static std::unique_ptr< IntersectionRegion > decode(std::vector< std::uint8_t > const &s)
static constexpr std::uint8_t TYPE_CODE
static constexpr std::uint8_t TYPE_CODE
static std::unique_ptr< UnionRegion > decode(std::vector< std::uint8_t > const &s)

◆ decode() [2/2]

static std::unique_ptr< CompoundRegion > lsst::sphgeom::CompoundRegion::decode ( std::vector< std::uint8_t > const & s)
inlinestatic

decode deserializes a CompoundRegion from a byte string produced by encode.

Definition at line 88 of file CompoundRegion.h.

88 {
89 return decode(s.data(), s.size());
90 }
static std::unique_ptr< CompoundRegion > decode(std::vector< std::uint8_t > const &s)

◆ decodeBase64() [1/2]

static std::unique_ptr< Region > lsst::sphgeom::Region::decodeBase64 ( std::string const & s)
inlinestaticinherited

decodeBase64 deserializes a Region from an ASCII string produced by encode and then base64-encoding that result.

This method also interprets ':' as a delimiter for the elements of a UnionRegion, to support cases where a union of region is constructed server-side in a database as a concatenation with that delimiter.

Definition at line 176 of file Region.h.

176 {
177 return decodeBase64(s);
178 }
static std::unique_ptr< Region > decodeBase64(std::string const &s)
Definition Region.h:176

◆ decodeBase64() [2/2]

std::unique_ptr< Region > lsst::sphgeom::Region::decodeBase64 ( std::string_view const & s)
staticinherited

decodeBase64 deserializes a Region from an ASCII string produced by encode and then base64-encoding that result.

This method also interprets ':' as a delimiter for the elements of a UnionRegion, to support cases where a union of region is constructed server-side in a database as a concatenation with that delimiter.

Definition at line 93 of file Region.cc.

93 {
94 if (s.empty()) {
95 return std::unique_ptr<UnionRegion>(new UnionRegion({}));
96 }
97 auto region_begin = s.begin();
98 auto region_end = std::find(s.begin(), s.end(), ':');
99 if (region_end != s.end()) {
101 while (region_end != s.end()) {
102 auto bytes = base64::decode_into<std::vector<std::uint8_t>>(region_begin, region_end);
103 union_args.push_back(decode(bytes));
104 region_begin = region_end;
105 ++region_begin;
106 region_end = std::find(region_begin, s.end(), ':');
107 }
108 auto bytes = base64::decode_into<std::vector<std::uint8_t>>(region_begin, region_end);
109 union_args.push_back(decode(bytes));
110 return std::unique_ptr<UnionRegion>(new UnionRegion(std::move(union_args)));
111 } else {
112 auto bytes = base64::decode_into<std::vector<std::uint8_t>>(region_begin, region_end);
113 return decode(bytes);
114 }
115}
table::Key< table::Array< std::uint8_t > > bytes
Definition python.h:135
T find(T... args)

◆ decodeOverlapsBase64() [1/2]

static TriState lsst::sphgeom::Region::decodeOverlapsBase64 ( std::string const & s)
inlinestaticinherited

decodeOverlapsBase64 evaluates an encoded overlap expression.

A single overlap expression is formed by concatenating a pair of base64-encoded regions (Region::encode then base64 encoding) with '&' as the delimiter. Multiple such pairwise overlap expressions can then be concatenated with '|' as the delimiter to form the logical OR.

Definition at line 190 of file Region.h.

190 {
191 return decodeOverlapsBase64(s);
192 }
static TriState decodeOverlapsBase64(std::string const &s)
Definition Region.h:190

◆ decodeOverlapsBase64() [2/2]

TriState lsst::sphgeom::Region::decodeOverlapsBase64 ( std::string_view const & s)
staticinherited

decodeOverlapsBase64 evaluates an encoded overlap expression.

A single overlap expression is formed by concatenating a pair of base64-encoded regions (Region::encode then base64 encoding) with '&' as the delimiter. Multiple such pairwise overlap expressions can then be concatenated with '|' as the delimiter to form the logical OR.

Definition at line 117 of file Region.cc.

117 {
118 TriState result(false);
119 if (s.empty()) {
120 // False makes the most sense as the limit of a logical OR of zero
121 // terms (e.g. `any([])` in Python).
122 return result;
123 }
124 auto begin = s.begin();
125 while (result != true) { // if result is known to be true, we're done.
126 auto mid = std::find(begin, s.end(), '&');
127 if (mid == s.end()) {
128 throw std::runtime_error("No '&' found in encoded overlap expression term.");
129 }
130 auto a = Region::decode(base64::decode_into<std::vector<std::uint8_t>>(begin, mid));
131 ++mid;
132 auto end = std::find(mid, s.end(), '|');
133 auto b = Region::decode(base64::decode_into<std::vector<std::uint8_t>>(mid, end));
134 result = result | a->overlaps(*b);
135 if (end == s.end()) {
136 break;
137 } else {
138 begin = end;
139 ++begin;
140 }
141 }
142 return result;
143}
table::Key< int > b
T begin(T... args)

◆ encode()

virtual std::vector< std::uint8_t > lsst::sphgeom::Region::encode ( ) const
pure virtualinherited

encode serializes this region into an opaque byte string.

Byte strings emitted by encode can be deserialized with decode.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ flatten_operands()

template<typename Compound >
void lsst::sphgeom::CompoundRegion::flatten_operands ( )
protected

Definition at line 103 of file CompoundRegion.cc.

103 {
104 for (size_t i = 0; i != _operands.size(); ) {
105 if (auto compound = dynamic_cast<Compound*>(_operands[i].get())) {
106 // Move all regions from this operand, then remove it.
107 std::move(
108 compound->_operands.begin(),
109 compound->_operands.end(),
110 std::inserter(_operands, _operands.begin() + i + 1)
111 );
112 _operands.erase(_operands.begin() + i);
113 } else {
114 ++ i;
115 }
116 }
117}
T inserter(T... args)

◆ getBoundingBox()

virtual Box lsst::sphgeom::Region::getBoundingBox ( ) const
pure virtualinherited

◆ getBoundingBox3d()

virtual Box3d lsst::sphgeom::Region::getBoundingBox3d ( ) const
pure virtualinherited

getBoundingBox3d returns a 3-dimensional bounding-box for this region.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ getBoundingCircle()

virtual Circle lsst::sphgeom::Region::getBoundingCircle ( ) const
pure virtualinherited

◆ getOperand()

Region const & lsst::sphgeom::CompoundRegion::getOperand ( std::size_t n) const
inline

Definition at line 74 of file CompoundRegion.h.

74 {
75 return *_operands[n];
76 }

◆ getRegions()

std::vector< std::unique_ptr< Region > > lsst::sphgeom::Region::getRegions ( Region const & region)
staticinherited

getRegions returns a vector of Region.

Definition at line 145 of file Region.cc.

145 {
147 if (auto union_region = dynamic_cast<UnionRegion const *>(&region)) {
148 for(unsigned i = 0; i < union_region->nOperands(); ++i) {
149 result.emplace_back(union_region->getOperand(i).clone());
150 }
151 } else if(auto intersection_region = dynamic_cast<IntersectionRegion const *>(&region)) {
152 for(unsigned i = 0; i < intersection_region->nOperands(); ++i) {
153 result.emplace_back(intersection_region->getOperand(i).clone());
154 }
155 } else {
156 result.emplace_back(region.clone());
157 }
158 return result;
159}
T emplace_back(T... args)

◆ isEmpty()

virtual bool lsst::sphgeom::Region::isEmpty ( ) const
pure virtualinherited

◆ nOperands()

size_t lsst::sphgeom::CompoundRegion::nOperands ( ) const
inline

Definition at line 71 of file CompoundRegion.h.

71{ return _operands.size(); }

◆ operands()

std::vector< std::unique_ptr< Region > > const & lsst::sphgeom::CompoundRegion::operands ( ) const
inlineprotected

Definition at line 104 of file CompoundRegion.h.

104{ return _operands; }

◆ operator=() [1/2]

CompoundRegion & lsst::sphgeom::CompoundRegion::operator= ( CompoundRegion && )
delete

◆ operator=() [2/2]

CompoundRegion & lsst::sphgeom::CompoundRegion::operator= ( CompoundRegion const & )
delete

◆ overlaps() [1/5]

virtual TriState lsst::sphgeom::Region::overlaps ( Box const & ) const
pure virtualinherited

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ overlaps() [2/5]

virtual TriState lsst::sphgeom::Region::overlaps ( Circle const & ) const
pure virtualinherited

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ overlaps() [3/5]

virtual TriState lsst::sphgeom::Region::overlaps ( ConvexPolygon const & ) const
pure virtualinherited

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ overlaps() [4/5]

virtual TriState lsst::sphgeom::Region::overlaps ( Ellipse const & ) const
pure virtualinherited

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

◆ overlaps() [5/5]

TriState lsst::sphgeom::Region::overlaps ( Region const & other) const
pure virtualinherited

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.

Definition at line 59 of file Region.cc.

59 {
60 // Default implementation just uses `relate`, and it returns unknown state
61 // more frequently, subclasses will want to implement better tests.
62 auto r = this->relate(other);
63 if ((r & DISJOINT).any()) {
64 return TriState(false);
65 } else if ((r & (CONTAINS | WITHIN)).any()) {
66 return TriState(true);
67 } else {
68 return TriState();
69 }
70}
virtual Relationship relate(Region const &) const =0

◆ relate() [1/5]

Relationship lsst::sphgeom::CompoundRegion::relate ( Box const & ) const
overridevirtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implements lsst::sphgeom::Region.

Definition at line 119 of file CompoundRegion.cc.

119{ return relate(static_cast<Region const &>(b)); }
virtual Relationship relate(Region const &r) const =0

◆ relate() [2/5]

Relationship lsst::sphgeom::CompoundRegion::relate ( Circle const & ) const
overridevirtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implements lsst::sphgeom::Region.

Definition at line 120 of file CompoundRegion.cc.

120{ return relate(static_cast<Region const &>(c)); }

◆ relate() [3/5]

Relationship lsst::sphgeom::CompoundRegion::relate ( ConvexPolygon const & ) const
overridevirtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implements lsst::sphgeom::Region.

Definition at line 121 of file CompoundRegion.cc.

121{ return relate(static_cast<Region const &>(p)); }

◆ relate() [4/5]

Relationship lsst::sphgeom::CompoundRegion::relate ( Ellipse const & ) const
overridevirtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implements lsst::sphgeom::Region.

Definition at line 122 of file CompoundRegion.cc.

122{ return relate(static_cast<Region const &>(e)); }

◆ relate() [5/5]

virtual Relationship lsst::sphgeom::CompoundRegion::relate ( Region const & ) const
pure virtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implements lsst::sphgeom::Region.

Implemented in lsst::sphgeom::UnionRegion, and lsst::sphgeom::IntersectionRegion.


The documentation for this class was generated from the following files: