Fix adding a piece to global contour.
In case of combine we must skip one edge. In case of rotation we must add right number of edges. --HG-- branch : develop
This commit is contained in:
parent
a01490b4f4
commit
9f6bb49a22
|
@ -179,24 +179,26 @@ QVector<QPointF> VContour::UniteWithContour(const VLayoutPiece &detail, int glob
|
||||||
return QVector<QPointF>();
|
return QVector<QPointF>();
|
||||||
}
|
}
|
||||||
|
|
||||||
const int i2 = globalI == d->globalContour.count() ? 0 : globalI;
|
|
||||||
|
|
||||||
int i=0;
|
int i=0;
|
||||||
while (i < d->globalContour.count())
|
while (i < d->globalContour.count())
|
||||||
{
|
{
|
||||||
if (i == i2)
|
AppendToContour(newContour, d->globalContour.at(i));
|
||||||
{
|
|
||||||
if (type == BestFrom::Rotation)
|
if (type == BestFrom::Rotation)
|
||||||
|
{
|
||||||
|
if (i == globalI)
|
||||||
{
|
{
|
||||||
AppendWhole(newContour, detail, detJ);
|
AppendWhole(newContour, detail, detJ);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if (i == globalI-1)
|
||||||
{
|
{
|
||||||
InsertDetail(newContour, detail, detJ);
|
InsertDetail(newContour, detail, detJ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AppendToContour(newContour, d->globalContour.at(i));
|
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,21 +305,22 @@ void VContour::AppendWhole(QVector<QPointF> &contour, const VLayoutPiece &detail
|
||||||
{
|
{
|
||||||
int processedEdges = 0;
|
int processedEdges = 0;
|
||||||
const int nD = detail.LayoutEdgesCount();
|
const int nD = detail.LayoutEdgesCount();
|
||||||
int j = detJ+1;
|
int j = detJ;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (j > nD)
|
if (j >= nD)
|
||||||
{
|
{
|
||||||
j=1;
|
j=0;
|
||||||
}
|
}
|
||||||
const QVector<QPointF> points = CutEdge(detail.LayoutEdge(j));
|
|
||||||
for (int i = 0; i < points.size()-1; ++i)
|
for(auto &point : CutEdge(detail.LayoutEdge(j+1)))
|
||||||
{
|
{
|
||||||
contour.append(points.at(i));
|
AppendToContour(contour, point);
|
||||||
}
|
}
|
||||||
++processedEdges;
|
++processedEdges;
|
||||||
++j;
|
++j;
|
||||||
}while (processedEdges < nD);
|
}
|
||||||
|
while (processedEdges < nD);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -325,16 +328,17 @@ void VContour::InsertDetail(QVector<QPointF> &contour, const VLayoutPiece &detai
|
||||||
{
|
{
|
||||||
int processedEdges = 0;
|
int processedEdges = 0;
|
||||||
const int nD = detail.LayoutEdgesCount();
|
const int nD = detail.LayoutEdgesCount();
|
||||||
int j = detJ+1;
|
int j = detJ;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (j > nD)
|
if (j >= nD)
|
||||||
{
|
{
|
||||||
j=1;
|
j=0;
|
||||||
}
|
}
|
||||||
if (j != detJ)
|
|
||||||
|
if (j != detJ-1)
|
||||||
{
|
{
|
||||||
for(auto &point : CutEdge(detail.LayoutEdge(j)))
|
for(auto &point : CutEdge(detail.LayoutEdge(j+1)))
|
||||||
{
|
{
|
||||||
AppendToContour(contour, point);
|
AppendToContour(contour, point);
|
||||||
}
|
}
|
||||||
|
@ -342,7 +346,7 @@ void VContour::InsertDetail(QVector<QPointF> &contour, const VLayoutPiece &detai
|
||||||
++processedEdges;
|
++processedEdges;
|
||||||
++j;
|
++j;
|
||||||
}
|
}
|
||||||
while (processedEdges <= nD);
|
while (processedEdges < nD);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user