SPHinXsys  alpha version
transform_shape.h
Go to the documentation of this file.
1 
7 #ifndef TRANSFORM_SHAPE_H
8 #define TRANSFORM_SHAPE_H
9 
10 #include "base_data_package.h"
11 #include "base_geometry.h"
12 
13 namespace SPH
14 {
20  template <class BaseShapeType>
22  {
23 
24  public:
26  template <typename... ConstructorArgs>
27  explicit TransformShape(const Transformd &transformd, ConstructorArgs &&...args)
28  : BaseShapeType(std::forward<ConstructorArgs>(args)...),
29  transformd_(transformd){};
30  virtual ~TransformShape(){};
31 
33  Transformd &getTransform() { return transformd_; };
34  void setTransform(const Transformd &transformd) { transformd_ = transformd; };
35 
36  virtual bool checkContain(const Vecd &input_pnt, bool BOUNDARY_INCLUDED = true) override
37  {
38  Vecd input_pnt_origin = transformd_.shiftBaseStationToFrame(input_pnt);
39  return BaseShapeType::checkContain(input_pnt_origin);
40  };
41  virtual Vecd findClosestPoint(const Vecd &input_pnt) override
42  {
43  Vecd input_pnt_origin = transformd_.shiftBaseStationToFrame(input_pnt);
44  Vecd closest_point_origin = BaseShapeType::findClosestPoint(input_pnt_origin);
45  return transformd_.shiftFrameStationToBase(closest_point_origin);
46  };
47 
48  protected:
49  Transformd transformd_;
50 
51  virtual BoundingBox findBounds() override
52  {
53  BoundingBox original_bound = BaseShapeType::findBounds();
54  return BoundingBox(transformd_.shiftFrameStationToBase(original_bound.first),
55  transformd_.shiftFrameStationToBase(original_bound.second));
56  };
57  };
58 }
59 
60 #endif // TRANSFORM_SHAPE_H
Transformd & getTransform()
Definition: transform_shape.h:33
Vec2d shiftBaseStationToFrame(const Vec2d &target)
Definition: base_data_type.h:484
Coordinate transform in 2D Note that the rotation is around the frame (or local) origin.
Definition: base_data_type.h:453
Shape is the base class for all geometries.
TransformShape(const Transformd &transformd, ConstructorArgs &&...args)
Definition: transform_shape.h:27
A template shape in which coordinate transformation is applied before or/and after access the interfa...
Definition: transform_shape.h:21
Vec2d shiftFrameStationToBase(const Vec2d &origin)
Definition: base_data_type.h:472
Definition: solid_body_supplementary.cpp:9