8#include <kernel/geometry/atlas/chart.hpp> 
   49      template<
typename Mesh_>
 
   51        public ChartCRTP<Circle<Mesh_>, Mesh_, CircleTraits>
 
  140          _midpoint.set_mat_vec_mult(rot, tmp) += offset;
 
  157          CoordType distance(grad_dist.norm_euclid());
 
  159          if(distance < Math::eps<CoordType>())
 
  182          grad_dist = (projected - point);
 
  183          CoordType my_dist(grad_dist.norm_euclid());
 
  184          grad_dist.normalize();
 
  203          if(my_dist < Math::eps<CoordType>())
 
  212          grad_dist.normalize();
 
  220          auto& vtx = mesh.get_vertex_set();
 
  221          const auto& target_vtx = meshpart.template get_target_set<0>();
 
  243          point[0] = this->_midpoint[0] + this->_radius * 
Math::cos(x);
 
  244          point[1] = this->_midpoint[1] + this->_radius * 
Math::sin(x);
 
  254        virtual void write(std::ostream& os, 
const String& sindent)
 const override 
  256          os << sindent << 
"<Circle";
 
  257          os << 
" radius=\"" << this->_radius << 
"\"";
 
  258          os << 
" midpoint=\"" << this->_midpoint[0] << 
" " << this->_midpoint[1] << 
"\"";
 
  264            os << 
" domain=\"" << param_l << 
" " << param_r << 
"\"";
 
  270      template<
typename Mesh_, 
typename ChartReturn_ = ChartBase<Mesh_>>
 
  277        std::unique_ptr<ChartReturn_>& _chart;
 
  285        virtual bool attribs(std::map<String,bool>& attrs)
 const override 
  287          attrs.emplace(
"radius", 
true);
 
  288          attrs.emplace(
"midpoint", 
true);
 
  289          attrs.emplace(
"domain", 
false);
 
  297          const std::map<String, String>& attrs,
 
  300          CoordType radius = CoordType(0);
 
  301          CoordType mid_x = CoordType(0);
 
  302          CoordType mid_y = CoordType(0);
 
  303          CoordType dom_0 = CoordType(0);
 
  304          CoordType dom_1 = CoordType(1);
 
  305          bool have_domain(
false);
 
  308          if(!attrs.find(
"radius")->second.parse(radius))
 
  310          if(radius < CoordType(1E-5))
 
  314          std::deque<String> mids = attrs.find(
"midpoint")->second.split_by_whitespaces();
 
  315          if(mids.size() != std::size_t(2))
 
  317          if(!mids.front().parse(mid_x) || !mids.back().parse(mid_y))
 
  321          auto it = attrs.find(
"domain");
 
  322          if(it != attrs.end())
 
  325            std::deque<String> doms = it->second.split_by_whitespaces();
 
  326            if(doms.size() != std::size_t(2))
 
  328            if(!doms.front().parse(dom_0) || !doms.back().parse(dom_1))
 
  334            _chart.reset(
new ChartType(mid_x, mid_y, radius, dom_0, dom_1));
 
  336            _chart.reset(
new ChartType(mid_x, mid_y, radius));
 
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
Chart CRTP base-class template.
BaseClass::WorldPoint WorldPoint
our world point type
VertexSetType::CoordType CoordType
coordinate type
virtual void close(int, const String &) override
Closes this markup parser node.
virtual std::shared_ptr< Xml::MarkupParser > markup(int, const String &, const String &) override
Called to process a child markup node.
virtual bool attribs(std::map< String, bool > &attrs) const override
Specifies the mandatory and optional attributes.
virtual void create(int iline, const String &sline, const String &, const std::map< String, String > &attrs, bool) override
Creates this markup parser node.
virtual bool content(int, const String &) override
Called to process a content line.
Circle chart class template.
CoordType _trafo_b
Right parametrization domain boundary.
Circle(CoordType mid_x, CoordType mid_y, CoordType radius)
Creates a Circle chart for implicit adaption.
CoordType _trafo_a
Left parametrization domain boundary.
virtual String get_type() const override
Writes the type as String.
CoordType compute_signed_dist(const WorldPoint &point, WorldPoint &grad_dist) const
virtual void transform(const WorldPoint &origin, const WorldPoint &angles, const WorldPoint &offset) override
Circle(CoordType mid_x, CoordType mid_y, CoordType radius, CoordType param_l, CoordType param_r)
Creates a Circle chart for both implicit and explicit adaption.
CoordType compute_dist(const WorldPoint &point, WorldPoint &grad_dist) const
CoordType compute_dist(const WorldPoint &point) const
Computes the distance of a point to this chart.
ChartCRTP< Circle< Mesh_ >, Mesh_, CircleTraits > BaseClass
The CRTP base class.
CoordType _radius
the circle's radius
virtual bool can_explicit() const override
WorldPoint _midpoint
the circle's midpoint
BaseClass::WorldPoint WorldPoint
Vector type for world points, aka image points.
CoordType compute_signed_dist(const WorldPoint &point) const
BaseClass::CoordType CoordType
Floating point type.
BaseClass::ParamPoint ParamPoint
Vector type for parametrization points, aka domain points.
void project_meshpart(Mesh_ &mesh, const MeshPart< Mesh_ > &meshpart) const
bool _have_domain
Specifies whether the circle mapping has a domain.
virtual void write(std::ostream &os, const String &sindent) const override
Writes the Chart into a stream in XML format.
void project_point(WorldPoint &point) const
Projects a single world point.
void map_param(WorldPoint &point, const ParamPoint ¶m) const
Maps a single parameter point.
Class template for partial meshes.
Index get_num_entities(int dim) const
Returns the number of entities.
String class implementation.
Tiny Matrix class template.
CUDA_HOST_DEVICE Matrix & set_rotation_2d(T_ angle)
Sets this matrix to a 2D rotation matrix.
Tiny Vector class template.
XML Markup Parser interface.
T_ abs(T_ x)
Returns the absolute value.
T_ sin(T_ x)
Returns the sine of a value.
T_ signum(T_ x)
Returns the sign of a value.
T_ cos(T_ x)
Returns the cosine of a value.
std::uint64_t Index
Index data type.
static constexpr int world_dim
this is a 2D object
static constexpr bool is_explicit
we support explicit map
static constexpr bool is_implicit
we support implicit projection
static constexpr int param_dim
we have 1D parameters