Cleanup in Shape.h.

This commit is contained in:
Tats
2015-12-28 15:28:32 -06:00
parent 00523e15e3
commit 60ca853956
2 changed files with 38 additions and 34 deletions
+34
View File
@@ -563,6 +563,40 @@ void Mesh::_reorderVertices()
vertices = newVertices;
}
void Ellipse::sanitize()
{
// Get horizontal axis rotated 90 degrees CW
QVector2D hAxis = getHorizontalAxis();
const QVector2D center(getCenter());
QVector2D hAxisRotated(hAxis.y(), -hAxis.x());
// Project vertex 1 onto it.
QVector2D vAxisNormalized = hAxisRotated.normalized();
QVector2D vFromCenter = QVector2D(getVertex(1)) - center;
const QVector2D& projection = QVector2D::dotProduct( vFromCenter, vAxisNormalized ) * vAxisNormalized;
MShape::setVertex(1, (center + projection).toPointF());
MShape::setVertex(3, (center - projection).toPointF());
if (hasCenterControl())
{
// Clip control point.
MShape::setVertex(4, clipInside(getVertex(4)));
}
}
QPointF Ellipse::clipInside(const QPointF& v) const
{
// Map point as vector on a unit circle.
QVector2D vector(toUnitCircle().map(v));
// Clip control point.
return (vector.length() <= 1 ?
v :
fromUnitCircle().map(vector.normalized().toPointF()));
}
QTransform Ellipse::toUnitCircle() const
{
const QPointF& center = getCenter();
+4 -34
View File
@@ -288,31 +288,11 @@ public:
sanitize();
}
virtual ~Ellipse() {}
/// Remaps points so as to make sure this is a correct ellipse, keeping vertices 0 and 2 as
/// reference for the horizzontal axis.
void sanitize()
{
// Get horizontal axis rotated 90 degrees CW
QVector2D hAxis = getHorizontalAxis();
const QVector2D center(getCenter());
QVector2D hAxisRotated(hAxis.y(), -hAxis.x());
// Project vertex 1 onto it.
QVector2D vAxisNormalized = hAxisRotated.normalized();
QVector2D vFromCenter = QVector2D(getVertex(1)) - center;
const QVector2D& projection = QVector2D::dotProduct( vFromCenter, vAxisNormalized ) * vAxisNormalized;
MShape::setVertex(1, (center + projection).toPointF());
MShape::setVertex(3, (center - projection).toPointF());
if (hasCenterControl())
{
// Clip control point.
MShape::setVertex(4, clipInside(getVertex(4)));
}
}
virtual ~Ellipse() {}
void sanitize();
virtual QString getType() const { return "ellipse"; }
@@ -333,17 +313,7 @@ public:
}
/// If v is outside boundaries, remap it to the border.
QPointF clipInside(const QPointF& v) const
{
// Map point as vector on a unit circle.
QVector2D vector(toUnitCircle().map(v));
// Clip control point.
return (vector.length() <= 1 ?
v :
fromUnitCircle().map(vector.normalized().toPointF()));
}
QPointF clipInside(const QPointF& v) const;
// QRect getBoundingRect() const {
// return QRect(0, getVerticalAxis().manhattanLength(),