26#include "polygon_funcs.h"
31void 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;
76bool 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))
94bool Polygon<2>::isValid()
const
96 for(
const auto & m_point : m_points) {
97 if (!m_point.isValid()) {
105Polygon<2>& Polygon<2>::shift(
const Vector<2>& v)
107 for(
auto & point : m_points)
114Polygon<2>& Polygon<2>::rotatePoint(
const RotMatrix<2>& m,
const Point<2>& p)
116 for(
auto & point : m_points)
123Polygon<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);
134Polygon<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);
144Polygon<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);
154Polygon<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);
165Polygon<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);
175Polygon<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);
184template class Polygon<3>;
185template class Poly2Orient<3>;
187static_assert(std::is_standard_layout<Polygon<3>>::value,
"Polygon should be standard layout.");
188static_assert(std::is_standard_layout<Polygon<2>>::value,
"Polygon should be standard layout.");
Generic library namespace.
double CoordType
Basic floating point type.