28 namespace geometry_utility
34 resultVerticiesPos.resize(_size);
35 for (
size_t i = 0; i < _size; ++i)
37 resultVerticiesPos[i] = _baseVerticiesPos[i];
45 return resultVerticiesPos;
51 int invert = (_side ==
Right || _side ==
Bottom) ? -1 : 1;
52 for (
size_t i = 0; i < _verticies.size(); ++i)
55 FloatPoint& v1 = _verticies[(i + 1) % _verticies.size()];
61 if (invert* v0.
left >= invert* _sideCoord && invert* v1.
left >= invert * _sideCoord)
62 newVerticies.push_back(v0);
64 else if (invert* v0.
left >= invert * _sideCoord && invert * v1.
left < invert * _sideCoord)
66 newVerticies.push_back(v0);
67 float c = (v0.
left - _sideCoord) / (_sideCoord - v1.
left);
68 newVerticies.push_back(
FloatPoint((
float)_sideCoord, (v0.
top + c * v1.
top) / (c + 1)));
71 else if (invert* v0.
left <= invert * _sideCoord && invert * v1.
left > invert * _sideCoord)
73 float c = (v0.
left - _sideCoord) / (_sideCoord - v1.
left);
74 newVerticies.push_back(
FloatPoint((
float)_sideCoord, (v0.
top + c * v1.
top) / (c + 1)));
81 if (invert* v0.
top >= invert* _sideCoord && invert* v1.
top >= invert * _sideCoord)
82 newVerticies.push_back(v0);
84 else if (invert* v0.
top >= invert * _sideCoord && invert * v1.
top < invert * _sideCoord)
86 newVerticies.push_back(v0);
87 float c = (v0.
top - _sideCoord) / (_sideCoord - v1.
top);
88 newVerticies.push_back(
FloatPoint((v0.
left + c * v1.
left) / (c + 1), (
float)_sideCoord));
91 else if (invert* v0.
top <= invert * _sideCoord && invert * v1.
top > invert * _sideCoord)
93 float c = (v0.
top - _sideCoord) / (_sideCoord - v1.
top);
94 newVerticies.push_back(
FloatPoint((v0.
left + c * v1.
left) / (c + 1), (
float)_sideCoord));
101 _verticies = newVerticies;
FloatPoint getPositionInsideRect(const FloatPoint &_point, const FloatPoint &_corner0, const FloatPoint &_corner1, const FloatPoint &_corner2)
VectorFloatPoint cropPolygon(FloatPoint *_baseVerticiesPos, size_t _size, const IntCoord &_cropRectangle)
std::vector< FloatPoint > VectorFloatPoint
FloatPoint getUVFromPositionInsideRect(const FloatPoint &_point, const FloatPoint &_v0, const FloatPoint &_v1, const FloatPoint &_baseUV)
void cropPolygonSide(VectorFloatPoint &_verticies, int _sideCoord, Side _side)
types::TPoint< float > FloatPoint