19enum ObjectAxis : uint8_t {
49 Cuboid(
double lower[3],
double upper[3]);
70 double upperCorner(
int d) {
return _upperCorner[d]; }
71 double lowerCorner(
int d) {
return _lowerCorner[d]; }
74 double _lowerCorner[3];
75 double _upperCorner[3];
82 Sphere(
double center[3],
double r);
106 double _radiusSquare;
118 Cylinder(
double centerBase[3],
double radius,
double height);
143 double _centerBase[3];
144 double _radiusSquare;
145 struct CylinderDirection {
147 uint8_t base1, base2, height;
159 ObjectUnification(std::shared_ptr<Object> obj1, std::shared_ptr<Object> obj2) : _ob1(obj1), _ob2(obj2) {}
176 return _ob1->isInside(r) || _ob2->isInside(r);
181 return _ob1->isInsideNoBorder(r) || _ob2->isInsideNoBorder(r) || (_ob1->isInside(r) && _ob2->isInside(r));
185 double rmin1[3], rmin2[3];
186 _ob1->getBboxMin(rmin1);
187 _ob2->getBboxMin(rmin2);
188 for(
int d = 0; d < 3; d++) {
189 rmin[d] = (rmin1[d] < rmin2[d]) ? rmin1[d] : rmin2[d] ;
194 double rmax1[3], rmax2[3];
195 _ob1->getBboxMax(rmax1);
196 _ob2->getBboxMax(rmax2);
197 for(
int d = 0; d < 3; d++) {
198 rmax[d] = (rmax1[d] > rmax2[d]) ? rmax1[d] : rmax2[d] ;
203 std::shared_ptr<Object> _ob1;
204 std::shared_ptr<Object> _ob2;
218 ObjectSubtractor(std::shared_ptr<Object> original_ob, std::shared_ptr<Object> subtract_ob) : _ob1(original_ob), _ob2(subtract_ob) {}
235 return _ob1->isInside(r) && (!_ob2->isInsideNoBorder(r));
239 return _ob1->isInsideNoBorder(r) && (!_ob2->isInside(r));
243 _ob1->getBboxMin(rmin);
247 _ob1->getBboxMax(rmax);
251 std::shared_ptr<Object> _ob1;
252 std::shared_ptr<Object> _ob2;
263 ObjectIntersection(std::shared_ptr<Object> obj1, std::shared_ptr<Object> obj2) : _ob1(obj1), _ob2(obj2) {}
280 return _ob1->isInside(r) && _ob2->isInside(r);
284 return _ob1->isInsideNoBorder(r) && _ob2->isInsideNoBorder(r);
288 double rmin1[3], rmin2[3];
289 _ob1->getBboxMin(rmin1);
290 _ob2->getBboxMin(rmin2);
291 for(
int d = 0; d < 3; d++) {
292 rmin[d] = (rmin1[d] < rmin2[d]) ? rmin2[d] : rmin1[d] ;
297 double rmax1[3], rmax2[3];
298 _ob1->getBboxMax(rmax1);
299 _ob2->getBboxMax(rmax2);
300 for(
int d = 0; d < 3; d++) {
301 rmax[d] = (rmax1[d] > rmax2[d]) ? rmax2[d] : rmax1[d] ;
306 std::shared_ptr<Object> _ob1;
307 std::shared_ptr<Object> _ob2;
314 ObjectShifter(std::shared_ptr<Object> obj,
double shift[3]) : _obj(obj) {
315 _shift[0] = shift[0];
316 _shift[1] = shift[1];
317 _shift[2] = shift[2];
336 double r_transformed[3] = {
341 return _obj->isInside(r_transformed);
345 double r_transformed[3] = {
350 return _obj->isInsideNoBorder(r_transformed);
354 _obj->getBboxMin(rmin);
355 for(
int d = 0; d < 3; d++) {
356 rmin[d] += _shift[d];
361 _obj->getBboxMax(rmax);
362 for(
int d = 0; d < 3; d++) {
363 rmax[d] += _shift[d];
368 std::shared_ptr<Object> _obj;
std::string getName()
Definition: Objects.h:62
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for Cuboid and all its included objects.
Definition: Objects.cpp:19
void getBboxMin(double rmin[3])
Definition: Objects.cpp:40
void getBboxMax(double rmax[3])
Definition: Objects.cpp:45
bool isInsideNoBorder(double r[3])
Definition: Objects.cpp:34
bool isInside(double r[3])
Definition: Objects.cpp:28
Definition: Objects.h:110
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for Cylinder and all its included objects.
Definition: Objects.cpp:108
bool isInside(double r[3])
Definition: Objects.cpp:132
void getBboxMax(double rmax[3])
Definition: Objects.cpp:157
bool isInsideNoBorder(double r[3])
Definition: Objects.cpp:141
void getBboxMin(double rmin[3])
Definition: Objects.cpp:150
std::string getName()
Definition: Objects.h:132
Definition: Objects.h:256
ObjectIntersection(std::shared_ptr< Object > obj1, std::shared_ptr< Object > obj2)
Definition: Objects.h:263
bool isInsideNoBorder(double r[3])
Definition: Objects.h:283
void getBboxMax(double rmax[3])
Definition: Objects.h:296
bool isInside(double r[3])
Definition: Objects.h:279
void getBboxMin(double rmin[3])
Definition: Objects.h:287
std::string getName()
Definition: Objects.h:276
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for ObjectIntersection and all its included objects.
Definition: Objects.cpp:210
Definition: Objects.h:311
bool isInside(double r[3])
Definition: Objects.h:335
bool isInsideNoBorder(double r[3])
Definition: Objects.h:344
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for ObjectIntersection and all its included objects.
Definition: Objects.cpp:235
std::string getName()
Definition: Objects.h:331
void getBboxMax(double rmax[3])
Definition: Objects.h:360
void getBboxMin(double rmin[3])
Definition: Objects.h:353
Definition: Objects.h:211
bool isInside(double r[3])
Definition: Objects.h:234
ObjectSubtractor(std::shared_ptr< Object > original_ob, std::shared_ptr< Object > subtract_ob)
Definition: Objects.h:218
bool isInsideNoBorder(double r[3])
Definition: Objects.h:238
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for ObjectSubtractor and all its included objects.
Definition: Objects.cpp:189
void getBboxMin(double rmin[3])
Definition: Objects.h:242
std::string getName()
Definition: Objects.h:231
void getBboxMax(double rmax[3])
Definition: Objects.h:246
Definition: Objects.h:152
ObjectUnification(std::shared_ptr< Object > obj1, std::shared_ptr< Object > obj2)
Definition: Objects.h:159
std::string getName()
Definition: Objects.h:172
void getBboxMax(double rmax[3])
Definition: Objects.h:193
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for ObjectUnification and all its included objects.
Definition: Objects.cpp:168
bool isInside(double r[3])
Definition: Objects.h:175
void getBboxMin(double rmin[3])
Definition: Objects.h:184
bool isInsideNoBorder(double r[3])
Definition: Objects.h:179
virtual bool isInsideNoBorder(double r[3])=0
virtual std::string getName()=0
virtual bool isInside(double r[3])=0
virtual void getBboxMin(double rmin[3])=0
virtual void getBboxMax(double rmax[3])=0
std::string getName()
Definition: Objects.h:95
void getBboxMax(double rmax[3])
Definition: Objects.cpp:95
void getBboxMin(double rmin[3])
Definition: Objects.cpp:90
Sphere()
Definition: Objects.cpp:53
bool isInside(double r[3])
Definition: Objects.cpp:70
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for Sphere and all its included objects.
Definition: Objects.cpp:60
bool isInsideNoBorder(double r[3])
Definition: Objects.cpp:80
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270
XML input file with unit handling/conversion support.