26 #include "polygon_funcs.h"
31 void Poly2Reorient::reorient(Polygon<2>& poly,
size_t skip)
const
33 size_t end = poly.numCorners();
36 case WFMATH_POLY2REORIENT_NONE:
38 case WFMATH_POLY2REORIENT_CLEAR_AXIS2:
39 for(
size_t i = 0; i != end; ++i) {
45 case WFMATH_POLY2REORIENT_CLEAR_BOTH_AXES:
46 for(
size_t i = 0; i != end; ++i) {
53 case WFMATH_POLY2REORIENT_MOVE_AXIS2_TO_AXIS1:
54 for(
size_t i = 0; i != end; ++i) {
57 (poly[i])[0] = (poly[i])[1];
61 case WFMATH_POLY2REORIENT_SCALE1_CLEAR2:
62 for(
size_t i = 0; i != end; ++i) {
65 (poly[i])[0] *= m_scale;
76 bool Polygon<2>::isEqualTo(
const Polygon<2>& p,
CoordType epsilon)
const
78 if(m_points.size() != p.m_points.size())
81 auto i1 = m_points.begin(), i2 = p.m_points.begin(),
85 if(!Equal(*i1, *i2, epsilon))
94 bool Polygon<2>::isValid()
const
96 for(
const auto & m_point : m_points) {
97 if (!m_point.isValid()) {
105 Polygon<2>& Polygon<2>::shift(
const Vector<2>& v)
107 for(
auto & point : m_points)
114 Polygon<2>& Polygon<2>::rotatePoint(
const RotMatrix<2>& m,
const Point<2>& p)
116 for(
auto & point : m_points)
123 Polygon<2> Polygon<2>::toParentCoords(
const Point<2>& origin,
124 const RotMatrix<2>& rotation)
const
127 out.m_points.resize(m_points.size());
128 for(
unsigned i = 0; i < m_points.size(); ++i)
129 out.m_points[i] = m_points[i].toParentCoords(origin, rotation);
134 Polygon<2> Polygon<2>::toParentCoords(
const AxisBox<2>& coords)
const
137 out.m_points.resize(m_points.size());
138 for(
unsigned i = 0; i < m_points.size(); ++i)
139 out.m_points[i] = m_points[i].toParentCoords(coords);
144 Polygon<2> Polygon<2>::toParentCoords(
const RotBox<2>& coords)
const
147 out.m_points.resize(m_points.size());
148 for(
unsigned i = 0; i < m_points.size(); ++i)
149 out.m_points[i] = m_points[i].toParentCoords(coords);
154 Polygon<2> Polygon<2>::toLocalCoords(
const Point<2>& origin,
155 const RotMatrix<2>& rotation)
const
158 out.m_points.resize(m_points.size());
159 for(
unsigned i = 0; i < m_points.size(); ++i)
160 out.m_points[i] = m_points[i].toLocalCoords(origin, rotation);
165 Polygon<2> Polygon<2>::toLocalCoords(
const AxisBox<2>& coords)
const
168 out.m_points.resize(m_points.size());
169 for(
unsigned i = 0; i < m_points.size(); ++i)
170 out.m_points[i] = m_points[i].toLocalCoords(coords);
175 Polygon<2> Polygon<2>::toLocalCoords(
const RotBox<2>& coords)
const
178 out.m_points.resize(m_points.size());
179 for(
unsigned i = 0; i < m_points.size(); ++i)
180 out.m_points[i] = m_points[i].toLocalCoords(coords);
184 template class Polygon<3>;
185 template class Poly2Orient<3>;
187 static_assert(std::is_standard_layout<Polygon<3>>::value,
"Polygon should be standard layout.");
188 static_assert(std::is_standard_layout<Polygon<2>>::value,
"Polygon should be standard layout.");
Generic library namespace.
double CoordType
Basic floating point type.