Incorrect work with curves. Closes #170

This commit is contained in:
Roman Telezhynskyi 2022-03-16 17:43:09 +02:00
parent e013ce234a
commit 8b0b5c89aa
7 changed files with 22 additions and 15 deletions

View file

@ -3,6 +3,7 @@
- Fix issue with Custom template. - Fix issue with Custom template.
- Fix issue with tile font size. - Fix issue with tile font size.
- [smart-pattern/valentina#171] System identifies two of the same curve. - [smart-pattern/valentina#171] System identifies two of the same curve.
- [smart-pattern/valentina#170] Incorrect work with curves.
# Valentina 0.7.50 February 14, 2022 # Valentina 0.7.50 February 14, 2022
- Fix regression. Minimal seam allowance width is less than the point accuracy values. - Fix regression. Minimal seam allowance width is less than the point accuracy values.

View file

@ -204,7 +204,8 @@ VSplineData::~VSplineData()
qreal VSplineData::GetL(const QPointF &p1, const QPointF &p4, qreal kCurve) qreal VSplineData::GetL(const QPointF &p1, const QPointF &p4, qreal kCurve)
{ {
static const qreal angle = 90; static const qreal angle = 90;
const qreal radius = QLineF(p1, p4).length()/M_SQRT2; qreal length = VFuzzyComparePoints(p1, p4) ? accuracyPointOnLine*2 : QLineF(p1, p4).length();
const qreal radius = length/M_SQRT2;
return kCurve * radius * 4 / 3 * qTan( angle * M_PI_4 / 180.0 ); return kCurve * radius * 4 / 3 * qTan( angle * M_PI_4 / 180.0 );
} }

View file

@ -207,11 +207,6 @@ VSplinePath::~VSplinePath()
*/ */
void VSplinePath::append(const VSplinePoint &point) void VSplinePath::append(const VSplinePoint &point)
{ {
if (d->path.size() > 0 && static_cast<QPointF>(ConstLast(d->path).P()) == static_cast<QPointF>(point.P())) //-V807
{
return;
}
d->path.append(point); d->path.append(point);
CreateName(); CreateName();
} }

View file

@ -234,6 +234,7 @@ void VToolEndLine::SetVisualization()
visual->SetAngle(VAbstractApplication::VApp()->TrVars() visual->SetAngle(VAbstractApplication::VApp()->TrVars()
->FormulaToUser(formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); ->FormulaToUser(formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator()));
visual->setLineStyle(LineStyleToPenStyle(m_lineType)); visual->setLineStyle(LineStyleToPenStyle(m_lineType));
visual->SetMode(Mode::Show);
visual->RefreshGeometry(); visual->RefreshGeometry();
} }
} }

View file

@ -75,9 +75,11 @@ VToolLinePoint::VToolLinePoint(VAbstractPattern *doc, VContainer *data, const qu
Q_ASSERT_X(basePointId != 0, Q_FUNC_INFO, "basePointId == 0"); //-V654 //-V712 Q_ASSERT_X(basePointId != 0, Q_FUNC_INFO, "basePointId == 0"); //-V654 //-V712
QPointF point1 = static_cast<QPointF>(*data->GeometricObject<VPointF>(basePointId)); QPointF point1 = static_cast<QPointF>(*data->GeometricObject<VPointF>(basePointId));
QPointF point2 = static_cast<QPointF>(*data->GeometricObject<VPointF>(id)); QPointF point2 = static_cast<QPointF>(*data->GeometricObject<VPointF>(id));
mainLine = new VScaledLine(QLineF(point1 - point2, QPointF()), this); QLineF line(point1 - point2, QPointF());
mainLine = new VScaledLine(line, this);
mainLine->SetBoldLine(false); mainLine->SetBoldLine(false);
mainLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); mainLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true);
mainLine->setVisible(not line.isNull());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -107,7 +109,9 @@ void VToolLinePoint::RefreshGeometry()
VToolSinglePoint::RefreshPointGeometry(*VDrawTool::data.GeometricObject<VPointF>(m_id)); VToolSinglePoint::RefreshPointGeometry(*VDrawTool::data.GeometricObject<VPointF>(m_id));
QPointF point = static_cast<QPointF>(*VDrawTool::data.GeometricObject<VPointF>(m_id)); QPointF point = static_cast<QPointF>(*VDrawTool::data.GeometricObject<VPointF>(m_id));
QPointF basePoint = static_cast<QPointF>(*VDrawTool::data.GeometricObject<VPointF>(basePointId)); QPointF basePoint = static_cast<QPointF>(*VDrawTool::data.GeometricObject<VPointF>(basePointId));
mainLine->setLine(QLineF(basePoint - point, QPointF())); QLineF line(basePoint - point, QPointF());
mainLine->setLine(line);
mainLine->setVisible(not line.isNull());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View file

@ -63,14 +63,21 @@ void VisToolEndLine::RefreshGeometry()
QLineF line; QLineF line;
if (qFuzzyIsNull(length)) if (qFuzzyIsNull(length))
{ {
if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) if (mode == Mode::Creation)
{ {
line = QLineF(static_cast<QPointF>(*first), Visualization::scenePos); if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier)
line.setAngle(CorrectAngle(line.angle())); {
line = QLineF(static_cast<QPointF>(*first), Visualization::scenePos);
line.setAngle(CorrectAngle(line.angle()));
}
else
{
line = QLineF(static_cast<QPointF>(*first), Visualization::scenePos);
}
} }
else else
{ {
line = QLineF(static_cast<QPointF>(*first), Visualization::scenePos); DrawPoint(point, static_cast<QPointF>(*first), mainColor);
} }
} }
else else

View file

@ -251,15 +251,13 @@ void Visualization::DrawLine(VScaledLine *lineItem, const QLineF &line, const QC
QPen visPen = lineItem->pen(); QPen visPen = lineItem->pen();
visPen.setColor(color); visPen.setColor(color);
visPen.setStyle(style); visPen.setStyle(not line.isNull() ? style : Qt::NoPen);
lineItem->setPen(visPen); lineItem->setPen(visPen);
if (not line.isNull()) if (not line.isNull())
{ {
lineItem->setLine(line); lineItem->setLine(line);
} }
lineItem->setVisible(not line.isNull());
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------