Refactoring. Eliminate unneeded reverse points and two methods hidden in

anonymous namespace.

--HG--
branch : feature
This commit is contained in:
Roman Telezhynskyi 2017-01-25 16:12:36 +02:00
parent 7f1de2e044
commit 9a51b165ac
2 changed files with 58 additions and 56 deletions

View File

@ -34,6 +34,47 @@
#include <QPainterPath> #include <QPainterPath>
namespace
{
//---------------------------------------------------------------------------------------------------------------------
VSAPoint CurvePoint(VSAPoint candidate, const VContainer *data, const VPieceNode &node,
const QVector<QPointF> &curvePoints)
{
if (node.GetTypeTool() == Tool::NodePoint)
{
const QPointF p = *data->GeometricObject<VPointF>(node.GetId());
if (VAbstractCurve::IsPointOnCurve(curvePoints, p))
{
candidate = VSAPoint(p);
candidate.SetSAAfter(node.GetSAAfter(data, *data->GetPatternUnit()));
candidate.SetSABefore(node.GetSABefore(data, *data->GetPatternUnit()));
candidate.SetAngleType(node.GetAngleType());
}
}
return candidate;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief indexOfNode return index in list node using id object.
* @param list list nodes detail.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
int IndexOfNode(const QVector<VPieceNode> &list, quint32 id)
{
for (int i = 0; i < list.size(); ++i)
{
if (list.at(i).GetId() == id)
{
return i;
}
}
qDebug()<<"Can't find node.";
return -1;
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VPiecePath::VPiecePath() VPiecePath::VPiecePath()
: d(new VPiecePathData) : d(new VPiecePathData)
@ -269,19 +310,21 @@ VSAPoint VPiecePath::StartSegment(const VContainer *data, const QVector<VPieceNo
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(nodes.at(i).GetId()); const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(nodes.at(i).GetId());
QVector<QPointF> points = curve->GetPoints(); const QVector<QPointF> points = curve->GetPoints();
if (reverse) if (points.isEmpty())
{ {
points = VGObject::GetReversePoints(points); return VSAPoint();
} }
VSAPoint begin = VSAPoint(points.first()); VSAPoint begin;
reverse ? begin = VSAPoint(points.last()) : begin = VSAPoint(points.first());
if (nodes.size() > 1) if (nodes.size() > 1)
{ {
int index = 0; int index = 0;
i == 0 ? index = nodes.size()-1 : index = i-1; i == 0 ? index = nodes.size()-1 : index = i-1;
begin = CurvePoint(begin, data, nodes.at(index), curve); begin = CurvePoint(begin, data, nodes.at(index), points);
} }
return begin; return begin;
} }
@ -296,19 +339,21 @@ VSAPoint VPiecePath::EndSegment(const VContainer *data, const QVector<VPieceNode
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(nodes.at(i).GetId()); const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(nodes.at(i).GetId());
QVector<QPointF> points = curve->GetPoints(); const QVector<QPointF> points = curve->GetPoints();
if (reverse) if (points.isEmpty())
{ {
points = VGObject::GetReversePoints(points); return VSAPoint();
} }
VSAPoint end = VSAPoint(points.last()); VSAPoint end;
reverse ? end = VSAPoint(points.first()) : end = VSAPoint(points.last());
if (nodes.size() > 2) if (nodes.size() > 2)
{ {
int index = 0; int index = 0;
i == nodes.size() - 1 ? index = 0 : index = i+1; i == nodes.size() - 1 ? index = 0 : index = i+1;
end = CurvePoint(end, data, nodes.at(index), curve); end = CurvePoint(end, data, nodes.at(index), points);
} }
return end; return end;
} }
@ -416,7 +461,7 @@ bool VPiecePath::OnEdge(quint32 p1, quint32 p2) const
qDebug()<<"Not enough points."; qDebug()<<"Not enough points.";
return false; return false;
} }
int i = indexOfNode(list, p1); int i = IndexOfNode(list, p1);
int j1 = 0, j2 = 0; int j1 = 0, j2 = 0;
if (i == list.size() - 1) if (i == list.size() - 1)
@ -462,8 +507,8 @@ int VPiecePath::Edge(quint32 p1, quint32 p2) const
} }
const QVector<VPieceNode> list = ListNodePoint(); const QVector<VPieceNode> list = ListNodePoint();
int i = indexOfNode(list, p1); int i = IndexOfNode(list, p1);
int j = indexOfNode(list, p2); int j = IndexOfNode(list, p2);
int min = qMin(i, j); int min = qMin(i, j);
@ -750,42 +795,3 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
return pointsEkv; return pointsEkv;
} }
//---------------------------------------------------------------------------------------------------------------------
VSAPoint VPiecePath::CurvePoint(const VSAPoint &candidate, const VContainer *data, const VPieceNode &node,
const QSharedPointer<VAbstractCurve> &curve)
{
VSAPoint point = candidate;
if (node.GetTypeTool() == Tool::NodePoint)
{
const QPointF p = *data->GeometricObject<VPointF>(node.GetId());
if (curve->IsPointOnCurve(p))
{
point = VSAPoint(p);
point.SetSAAfter(node.GetSAAfter(data, *data->GetPatternUnit()));
point.SetSABefore(node.GetSABefore(data, *data->GetPatternUnit()));
point.SetAngleType(node.GetAngleType());
}
}
return point;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief indexOfNode return index in list node using id object.
* @param list list nodes detail.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
int VPiecePath::indexOfNode(const QVector<VPieceNode> &list, quint32 id)
{
for (int i = 0; i < list.size(); ++i)
{
if (list.at(i).GetId() == id)
{
return i;
}
}
qDebug()<<"Can't find node.";
return -1;
}

View File

@ -106,10 +106,6 @@ public:
private: private:
QSharedDataPointer<VPiecePathData> d; QSharedDataPointer<VPiecePathData> d;
static VSAPoint CurvePoint(const VSAPoint &candidate, const VContainer *data, const VPieceNode &node,
const QSharedPointer<VAbstractCurve> &curve);
static int indexOfNode(const QVector<VPieceNode> &list, quint32 id);
}; };
Q_DECLARE_TYPEINFO(VPiecePath, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(VPiecePath, Q_MOVABLE_TYPE);