LSST Applications g0265f82a02+d6b5cd48b5,g02d81e74bb+a41d3748ce,g1470d8bcf6+6be6c9203b,g2079a07aa2+14824f138e,g212a7c68fe+a4f2ea4efa,g2305ad1205+72971fe858,g295015adf3+ab2c85acae,g2bbee38e9b+d6b5cd48b5,g337abbeb29+d6b5cd48b5,g3ddfee87b4+31b3a28dff,g487adcacf7+082e807817,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+b2918d57ae,g5a732f18d5+66d966b544,g64a986408d+a41d3748ce,g858d7b2824+a41d3748ce,g8a8a8dda67+a6fc98d2e7,g99cad8db69+7fe4acdf18,g9ddcbc5298+d4bad12328,ga1e77700b3+246acaaf9c,ga8c6da7877+84af8b3ff8,gb0e22166c9+3863383f4c,gb6a65358fc+d6b5cd48b5,gba4ed39666+9664299f35,gbb8dafda3b+d8d527deb2,gc07e1c2157+b2dbe6b631,gc120e1dc64+61440b2abb,gc28159a63d+d6b5cd48b5,gcf0d15dbbd+31b3a28dff,gdaeeff99f8+a38ce5ea23,ge6526c86ff+39927bb362,ge79ae78c31+d6b5cd48b5,gee10cc3b42+a6fc98d2e7,gf1cff7945b+a41d3748ce,v24.1.5.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | List of all members
lsst::sphgeom::UnionRegion Class Reference

UnionRegion is a lazy point-set union of its operands. More...

#include <CompoundRegion.h>

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

Public Member Functions

std::unique_ptr< Regionclone () const override
 clone returns a deep copy of this region.
 
Box getBoundingBox () const override
 getBoundingBox returns a bounding-box for this region.
 
Box3d getBoundingBox3d () const override
 getBoundingBox3d returns a 3-dimensional bounding-box for this region.
 
Circle getBoundingCircle () const override
 getBoundingCircle returns a bounding-circle for this region.
 
bool contains (UnitVector3d const &v) const override
 contains tests whether the given unit vector is inside this region.
 
Relationship relate (Region const &r) const override
 
std::vector< uint8_t > encode () const override
 encode serializes this region into an opaque byte string.
 
 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
 
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.
 
Region const & getOperand (std::size_t n) const
 
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
 

Static Public Member Functions

static std::unique_ptr< UnionRegiondecode (std::vector< uint8_t > const &s)
 
static std::unique_ptr< UnionRegiondecode (uint8_t const *buffer, size_t n)
 

Static Public Attributes

static constexpr uint8_t TYPE_CODE = 'u'
 

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

UnionRegion is a lazy point-set union of its operands.

All operations on a UnionRegion are implementing by delegating to its nested operand regions and combining the results.

Definition at line 108 of file CompoundRegion.h.

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 )
staticprotectedinherited

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< uint8_t > const &s)
Definition Region.h:144

◆ _encode()

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

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< 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< uint8_t > &buffer)
encodeU64 appends an uint64 in little-endian byte order to the end of buffer.
Definition codec.h:95
T push_back(T... args)

◆ clone()

std::unique_ptr< Region > lsst::sphgeom::UnionRegion::clone ( ) const
inlineoverridevirtual

clone returns a deep copy of this region.

Implements lsst::sphgeom::Region.

Definition at line 115 of file CompoundRegion.h.

115{ return std::make_unique<UnionRegion>(*this); }

◆ CompoundRegion() [1/4]

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

◆ CompoundRegion() [2/4]

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

Definition at line 62 of file CompoundRegion.cc.

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

◆ CompoundRegion() [3/4]

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

Construct by copying or taking ownership of operands.

Definition at line 58 of file CompoundRegion.cc.

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

◆ CompoundRegion() [4/4]

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

Definition at line 59 of file CompoundRegion.cc.

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

◆ contains() [1/4]

bool lsst::sphgeom::Region::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.

Definition at line 111 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
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.

◆ contains() [2/4]

bool lsst::sphgeom::Region::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.

Definition at line 107 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/4]

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

contains tests whether the given unit vector is inside this region.

Implements lsst::sphgeom::Region.

◆ contains() [4/4]

bool lsst::sphgeom::UnionRegion::contains ( UnitVector3d const & ) const
overridevirtual

contains tests whether the given unit vector is inside this region.

Implements lsst::sphgeom::Region.

Definition at line 153 of file CompoundRegion.cc.

153 {
154 return getOperand(0).contains(v) || getOperand(1).contains(v);
155}
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.

◆ decode() [1/2]

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

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

Definition at line 127 of file CompoundRegion.h.

127 {
128 return decode(s.data(), s.size());
129 }
static std::unique_ptr< UnionRegion > decode(std::vector< uint8_t > const &s)

◆ decode() [2/2]

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

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

Definition at line 130 of file CompoundRegion.h.

130 {
131 return std::make_unique<UnionRegion>(_decode(TYPE_CODE, buffer, n));
132 }
static std::array< std::unique_ptr< Region >, 2 > _decode(std::uint8_t tc, std::uint8_t const *buffer, std::size_t nBytes)
static constexpr uint8_t TYPE_CODE

◆ encode()

std::vector< uint8_t > lsst::sphgeom::UnionRegion::encode ( ) const
inlineoverridevirtual

encode serializes this region into an opaque byte string.

Byte strings emitted by encode can be deserialized with decode.

Implements lsst::sphgeom::Region.

Definition at line 122 of file CompoundRegion.h.

122{ return _encode(TYPE_CODE); }
std::vector< std::uint8_t > _encode(std::uint8_t tc) const

◆ getBoundingBox()

Box lsst::sphgeom::UnionRegion::getBoundingBox ( ) const
overridevirtual

getBoundingBox returns a bounding-box for this region.

Implements lsst::sphgeom::Region.

Definition at line 141 of file CompoundRegion.cc.

141 {
142 return getUnionBounds(*this, [](Region const &r) { return r.getBoundingBox(); });
143}

◆ getBoundingBox3d()

Box3d lsst::sphgeom::UnionRegion::getBoundingBox3d ( ) const
overridevirtual

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

Implements lsst::sphgeom::Region.

Definition at line 145 of file CompoundRegion.cc.

145 {
146 return getUnionBounds(*this, [](Region const &r) { return r.getBoundingBox3d(); });
147}

◆ getBoundingCircle()

Circle lsst::sphgeom::UnionRegion::getBoundingCircle ( ) const
overridevirtual

getBoundingCircle returns a bounding-circle for this region.

Implements lsst::sphgeom::Region.

Definition at line 149 of file CompoundRegion.cc.

149 {
150 return getUnionBounds(*this, [](Region const &r) { return r.getBoundingCircle(); });
151}

◆ getOperand()

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

Definition at line 71 of file CompoundRegion.h.

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

◆ relate() [1/5]

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

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
overridevirtualinherited

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
overridevirtualinherited

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
overridevirtualinherited

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]

Relationship lsst::sphgeom::UnionRegion::relate ( Region 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::CompoundRegion.

Definition at line 157 of file CompoundRegion.cc.

157 {
158 auto r1 = getOperand(0).relate(rhs);
159 auto r2 = getOperand(1).relate(rhs);
160 return
161 // Both operands must be disjoint with the given region for the union
162 // to be disjoint with it.
163 ((r1 & DISJOINT) & (r2 & DISJOINT))
164 // Both operands must be within the given region for the union to be
165 // within it.
166 | ((r1 & WITHIN) & (r2 & WITHIN))
167 // If either operand contains the given region, the union contains it.
168 | ((r1 & CONTAINS) | (r2 & CONTAINS));
169}
virtual Relationship relate(Region const &) const =0

Member Data Documentation

◆ TYPE_CODE

constexpr uint8_t lsst::sphgeom::UnionRegion::TYPE_CODE = 'u'
staticconstexpr

Definition at line 110 of file CompoundRegion.h.


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