30#ifndef LSST_SPHGEOM_REGION_H_
31#define LSST_SPHGEOM_REGION_H_
64#if defined(__GNUC__) || defined(__clang__)
65__attribute__((visibility(
"default")))
67IvoaStcsNotImplemented :
public std::runtime_error {
69 using std::runtime_error::runtime_error;
107 virtual ~Region() =
default;
110 virtual std::unique_ptr<Region> clone()
const = 0;
113 virtual Box getBoundingBox()
const = 0;
116 virtual Box3d getBoundingBox3d()
const = 0;
119 virtual Circle getBoundingCircle()
const = 0;
122 virtual bool isEmpty()
const = 0;
125 virtual bool contains(UnitVector3d
const &)
const = 0;
129 bool contains(
double x,
double y,
double z)
const;
133 bool contains(
double lon,
double lat)
const;
156 virtual Relationship relate(ConvexPolygon
const &)
const = 0;
165 virtual TriState overlaps(Region
const& other)
const = 0;
166 virtual TriState overlaps(Box
const &)
const = 0;
167 virtual TriState overlaps(Circle
const &)
const = 0;
168 virtual TriState overlaps(ConvexPolygon
const &)
const = 0;
169 virtual TriState overlaps(Ellipse
const &)
const = 0;
174 virtual std::vector<std::uint8_t> encode()
const = 0;
178 static std::unique_ptr<Region> decode(std::vector<std::uint8_t>
const & s) {
179 return decode(s.data(), s.size());
182 static std::unique_ptr<Region> decode(std::uint8_t
const * buffer,
size_t n);
192 static std::unique_ptr<Region> decodeBase64(std::string
const & s) {
193 return decodeBase64(std::string_view(s));
196 static std::unique_ptr<Region> decodeBase64(std::string_view
const & s);
206 static TriState decodeOverlapsBase64(std::string
const & s) {
207 return decodeOverlapsBase64(std::string_view(s));
210 static TriState decodeOverlapsBase64(std::string_view
const & s);
214 static std::vector<std::unique_ptr<Region>> getRegions(Region
const ®ion);
230 std::string toIvoaStcs(std::string
const & frame =
"ICRS")
const {
239 static TriState _relationship_to_overlaps(
Relationship r) {
242 if ((r & DISJOINT) == DISJOINT) {
243 return TriState(
false);
245 if ((r & (WITHIN | CONTAINS)).any()) {
246 return TriState(
true);
259 throw IvoaStcsNotImplemented(
260 "This region can not be converted to an IVOA STC-S string."
Definition _continue_class.py:109
Definition ConvexPolygon.h:65
Definition UnitVector3d.h:62
virtual std::string toIvoaStcsBody(std::string const &frame="") const
virtually.
Definition Region.h:258
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42
This file provides a type alias for describing set relationships.
This file declares a class for representing tri-state values.