LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
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 (Region const &first, Region const &second)
 Construct by copying or taking ownership of operands.
 
 CompoundRegion (std::array< std::unique_ptr< Region >, 2 > operands) noexcept
 
 CompoundRegion (CompoundRegion const &)
 
 CompoundRegion (CompoundRegion &&) noexcept=default
 
CompoundRegionoperator= (CompoundRegion const &)=delete
 
CompoundRegionoperator= (CompoundRegion &&)=delete
 
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 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.
 

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)
 

Protected Member Functions

std::vector< std::uint8_t_encode (std::uint8_t tc) const
 

Static Protected Member Functions

static std::array< std::unique_ptr< Region >, 2 > _decode (std::uint8_t tc, std::uint8_t const *buffer, std::size_t nBytes)
 

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/4]

lsst::sphgeom::CompoundRegion::CompoundRegion ( Region const & first,
Region const & second )

Construct by copying or taking ownership of operands.

Definition at line 77 of file CompoundRegion.cc.

78 : _operands{first.clone(), second.clone()} {}

◆ CompoundRegion() [2/4]

lsst::sphgeom::CompoundRegion::CompoundRegion ( std::array< std::unique_ptr< Region >, 2 > operands)
explicitnoexcept

Definition at line 80 of file CompoundRegion.cc.

82 : _operands(std::move(operands)) {}
T move(T... args)

◆ CompoundRegion() [3/4]

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

Definition at line 84 of file CompoundRegion.cc.

85 : _operands{other.getOperand(0).clone(), other.getOperand(1).clone()} {}

◆ CompoundRegion() [4/4]

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

Member Function Documentation

◆ _decode()

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

Definition at line 104 of file CompoundRegion.cc.

105 {
106 std::uint8_t const *end = buffer + nBytes;
107 if (nBytes == 0) {
108 throw std::runtime_error("Encoded CompoundRegion is truncated.");
109 }
110 if (buffer[0] != tc) {
111 throw std::runtime_error("Byte string is not an encoded CompoundRegion.");
112 }
113 ++buffer;
115 std::uint64_t nBytes1 = consumeDecodeU64(buffer, end);
116 result[0] = Region::decode(buffer, nBytes1);
117 buffer += nBytes1;
118 std::uint64_t nBytes2 = consumeDecodeU64(buffer, end);
119 result[1] = Region::decode(buffer, nBytes2);
120 buffer += nBytes2;
121 if (buffer != end) {
122 throw std::runtime_error("Encoded CompoundRegion is has unexpected additional bytes.");
123 }
124 return result;
125}
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:145

◆ _encode()

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

Definition at line 92 of file CompoundRegion.cc.

92 {
94 buffer.push_back(tc);
95 auto buffer1 = getOperand(0).encode();
96 encodeU64(buffer1.size(), buffer);
97 buffer.insert(buffer.end(), buffer1.begin(), buffer1.end());
98 auto buffer2 = getOperand(1).encode();
99 encodeU64(buffer2.size(), buffer);
100 buffer.insert(buffer.end(), buffer2.begin(), buffer2.end());
101 return buffer;
102}
Region const & getOperand(std::size_t n) const
virtual std::vector< std::uint8_t > encode() const =0
encode serializes this region into an opaque byte string.
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)

◆ 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 51 of file Region.cc.

51 {
52 return contains(UnitVector3d(LonLat::fromRadians(lon, lat)));
53}
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 47 of file Region.cc.

47 {
48 return contains(UnitVector3d(x, y, z));
49}
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 127 of file CompoundRegion.cc.

127 {
128 if (n == 0) {
129 throw std::runtime_error("Encoded CompoundRegion is truncated.");
130 }
131 switch (buffer[0]) {
133 return UnionRegion::decode(buffer, n);
135 return IntersectionRegion::decode(buffer, n);
136 default:
137 throw std::runtime_error("Byte string is not an encoded CompoundRegion.");
138 }
139}
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 86 of file CompoundRegion.h.

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

◆ 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.

◆ 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 72 of file CompoundRegion.h.

72 {
73 return *_operands[n];
74 }

◆ getRegions()

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

getRegions returns a vector of Region.

Definition at line 76 of file Region.cc.

76 {
78 if (auto union_region = dynamic_cast<UnionRegion const *>(&region)) {
79 for(int i = 0; i < 2; ++i) {
80 result.emplace_back(union_region->getOperand(i).clone());
81 }
82 } else if(auto intersection_region = dynamic_cast<IntersectionRegion const *>(&region)) {
83 for(int i = 0; i < 2; ++i) {
84 intersection_region->getOperand(i);
85 result.emplace_back(intersection_region->getOperand(i).clone());
86 }
87 } else {
88 result.emplace_back(region.clone());
89 }
90 return result;
91}
T emplace_back(T... args)

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ 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 87 of file CompoundRegion.cc.

87{ return relate(static_cast<Region const &>(b)); }
table::Key< int > 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 88 of file CompoundRegion.cc.

88{ 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 89 of file CompoundRegion.cc.

89{ 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 90 of file CompoundRegion.cc.

90{ 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: