diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index f67d7ad0a..8ea7b8fc8 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -316,6 +316,7 @@ void MainWindow::InitScenes() connect(this, &MainWindow::EnablePointSelection, sceneDraw, &VMainGraphicsScene::TogglePointSelection); connect(this, &MainWindow::EnableLineSelection, sceneDraw, &VMainGraphicsScene::ToggleLineSelection); connect(this, &MainWindow::EnableArcSelection, sceneDraw, &VMainGraphicsScene::ToggleArcSelection); + connect(this, &MainWindow::EnableElArcSelection, sceneDraw, &VMainGraphicsScene::ToggleElArcSelection); connect(this, &MainWindow::EnableSplineSelection, sceneDraw, &VMainGraphicsScene::ToggleSplineSelection); connect(this, &MainWindow::EnableSplinePathSelection, sceneDraw, &VMainGraphicsScene::ToggleSplinePathSelection); @@ -323,6 +324,7 @@ void MainWindow::InitScenes() connect(this, &MainWindow::EnablePointHover, sceneDraw, &VMainGraphicsScene::TogglePointHover); connect(this, &MainWindow::EnableLineHover, sceneDraw, &VMainGraphicsScene::ToggleLineHover); connect(this, &MainWindow::EnableArcHover, sceneDraw, &VMainGraphicsScene::ToggleArcHover); + connect(this, &MainWindow::EnableElArcHover, sceneDraw, &VMainGraphicsScene::ToggleElArcHover); connect(this, &MainWindow::EnableSplineHover, sceneDraw, &VMainGraphicsScene::ToggleSplineHover); connect(this, &MainWindow::EnableSplinePathHover, sceneDraw, &VMainGraphicsScene::ToggleSplinePathHover); @@ -1973,6 +1975,7 @@ void MainWindow::ArrowTool() emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); emit EnableNodeLabelSelection(true); @@ -1984,6 +1987,7 @@ void MainWindow::ArrowTool() emit EnablePointHover(true); emit EnableLineHover(true); emit EnableArcHover(true); + emit EnableElArcHover(true); emit EnableSplineHover(true); emit EnableSplinePathHover(true); emit EnableNodeLabelHover(true); @@ -4712,6 +4716,7 @@ void MainWindow::ToolSelectPoint() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4720,6 +4725,7 @@ void MainWindow::ToolSelectPoint() const emit EnablePointHover(true); emit EnableLineHover(false); emit EnableArcHover(false); + emit EnableElArcHover(false); emit EnableSplineHover(false); emit EnableSplinePathHover(false); @@ -4748,6 +4754,7 @@ void MainWindow::ToolSelectSpline() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4756,6 +4763,7 @@ void MainWindow::ToolSelectSpline() const emit EnablePointHover(false); emit EnableLineHover(false); emit EnableArcHover(false); + emit EnableElArcHover(false); emit EnableSplineHover(true); emit EnableSplinePathHover(false); @@ -4772,6 +4780,7 @@ void MainWindow::ToolSelectSplinePath() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4780,6 +4789,7 @@ void MainWindow::ToolSelectSplinePath() const emit EnablePointHover(false); emit EnableLineHover(false); emit EnableArcHover(false); + emit EnableElArcHover(false); emit EnableSplineHover(false); emit EnableSplinePathHover(true); @@ -4796,6 +4806,7 @@ void MainWindow::ToolSelectArc() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4804,6 +4815,33 @@ void MainWindow::ToolSelectArc() const emit EnablePointHover(false); emit EnableLineHover(false); emit EnableArcHover(true); + emit EnableElArcHover(false); + emit EnableSplineHover(false); + emit EnableSplinePathHover(false); + + emit ItemsSelection(SelectionType::ByMouseRelease); + + ui->view->AllowRubberBand(false); +} + +//--------------------------------------------------------------------------------------------------------------------- +void MainWindow::ToolSelectElArc() const +{ + // Only true for rubber band selection + emit EnableLabelSelection(false); + emit EnablePointSelection(false); + emit EnableLineSelection(false); + emit EnableArcSelection(false); + emit EnableElArcSelection(false); + emit EnableSplineSelection(false); + emit EnableSplinePathSelection(false); + + // Hovering + emit EnableLabelHover(false); + emit EnablePointHover(false); + emit EnableLineHover(false); + emit EnableArcHover(false); + emit EnableElArcHover(true); emit EnableSplineHover(false); emit EnableSplinePathHover(false); @@ -4820,6 +4858,7 @@ void MainWindow::ToolSelectPointArc() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4828,6 +4867,7 @@ void MainWindow::ToolSelectPointArc() const emit EnablePointHover(true); emit EnableLineHover(false); emit EnableArcHover(true); + emit EnableElArcHover(false); emit EnableSplineHover(false); emit EnableSplinePathHover(false); @@ -4844,6 +4884,7 @@ void MainWindow::ToolSelectCurve() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4852,6 +4893,7 @@ void MainWindow::ToolSelectCurve() const emit EnablePointHover(false); emit EnableLineHover(false); emit EnableArcHover(true); + emit EnableElArcHover(true); emit EnableSplineHover(true); emit EnableSplinePathHover(true); @@ -4868,6 +4910,7 @@ void MainWindow::ToolSelectAllDrawObjects() const emit EnablePointSelection(false); emit EnableLineSelection(false); emit EnableArcSelection(false); + emit EnableElArcSelection(false); emit EnableSplineSelection(false); emit EnableSplinePathSelection(false); @@ -4876,6 +4919,7 @@ void MainWindow::ToolSelectAllDrawObjects() const emit EnablePointHover(true); emit EnableLineHover(false); emit EnableArcHover(true); + emit EnableElArcHover(true); emit EnableSplineHover(true); emit EnableSplinePathHover(true); @@ -4892,6 +4936,7 @@ void MainWindow::ToolSelectOperationObjects() const emit EnablePointSelection(true); emit EnableLineSelection(false); emit EnableArcSelection(true); + emit EnableElArcSelection(true); emit EnableSplineSelection(true); emit EnableSplinePathSelection(true); @@ -4900,6 +4945,7 @@ void MainWindow::ToolSelectOperationObjects() const emit EnablePointHover(true); emit EnableLineHover(false); emit EnableArcHover(true); + emit EnableElArcHover(true); emit EnableSplineHover(true); emit EnableSplinePathHover(true); diff --git a/src/app/valentina/mainwindow.h b/src/app/valentina/mainwindow.h index 1739fdd9c..d7c939a77 100644 --- a/src/app/valentina/mainwindow.h +++ b/src/app/valentina/mainwindow.h @@ -78,6 +78,7 @@ signals: void EnablePointSelection(bool enable) const; void EnableLineSelection(bool enable) const; void EnableArcSelection(bool enable) const; + void EnableElArcSelection(bool enable) const; void EnableSplineSelection(bool enable) const; void EnableSplinePathSelection(bool enable) const; void EnableNodeLabelSelection(bool enable) const; @@ -88,6 +89,7 @@ signals: void EnablePointHover(bool enable) const; void EnableLineHover(bool enable) const; void EnableArcHover(bool enable) const; + void EnableElArcHover(bool enable) const; void EnableSplineHover(bool enable) const; void EnableSplinePathHover(bool enable) const; void EnableNodeLabelHover(bool enable) const; @@ -346,6 +348,7 @@ private: void ToolSelectSpline() const; void ToolSelectSplinePath() const; void ToolSelectArc() const; + void ToolSelectElArc() const; void ToolSelectPointArc() const; void ToolSelectCurve() const; void ToolSelectAllDrawObjects() const; diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp index 4af8fe2bf..0daeac738 100644 --- a/src/libs/vpatterndb/vcontainer.cpp +++ b/src/libs/vpatterndb/vcontainer.cpp @@ -382,24 +382,27 @@ void VContainer::AddLine(const quint32 &firstPointId, const quint32 &secondPoint } //--------------------------------------------------------------------------------------------------------------------- -void VContainer::AddArc(const QSharedPointer &arc, const quint32 &id, const quint32 &parentId) +void VContainer::AddArc(const QSharedPointer &arc, const quint32 &id, const quint32 &parentId) { AddCurve(arc, id, parentId); - VArcRadius *radius = new VArcRadius(id, parentId, arc.data(), *GetPatternUnit()); - AddVariable(radius->GetName(), radius); -} + if (arc->getType() == GOType::Arc) + { + const QSharedPointer casted = arc.staticCast(); -//--------------------------------------------------------------------------------------------------------------------- -void VContainer::AddEllipticalArc(const QSharedPointer &arc, const quint32 &id, const quint32 &parentId) -{ - AddCurve(arc, id, parentId); + VArcRadius *radius = new VArcRadius(id, parentId, casted.data(), *GetPatternUnit()); + AddVariable(radius->GetName(), radius); + } + else if (arc->getType() == GOType::EllipticalArc) + { + const QSharedPointer casted = arc.staticCast(); - VEllipticalArcRadius *radius1 = new VEllipticalArcRadius(id, parentId, arc.data(), 1, *GetPatternUnit()); - AddVariable(radius1->GetName(), radius1); + VEllipticalArcRadius *radius1 = new VEllipticalArcRadius(id, parentId, casted.data(), 1, *GetPatternUnit()); + AddVariable(radius1->GetName(), radius1); - VEllipticalArcRadius *radius2 = new VEllipticalArcRadius(id, parentId, arc.data(), 2, *GetPatternUnit()); - AddVariable(radius2->GetName(), radius2); + VEllipticalArcRadius *radius2 = new VEllipticalArcRadius(id, parentId, casted.data(), 2, *GetPatternUnit()); + AddVariable(radius2->GetName(), radius2); + } } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vpatterndb/vcontainer.h b/src/libs/vpatterndb/vcontainer.h index 94eccfdac..d181677fa 100644 --- a/src/libs/vpatterndb/vcontainer.h +++ b/src/libs/vpatterndb/vcontainer.h @@ -146,9 +146,8 @@ public: quint32 AddGObject(VGObject *obj); quint32 AddDetail(const VDetail &detail); void AddLine(const quint32 &firstPointId, const quint32 &secondPointId); - void AddArc(const QSharedPointer &arc, const quint32 &arcId, const quint32 &parentId = NULL_ID); - void AddEllipticalArc(const QSharedPointer &arc, const quint32 &arcId, - const quint32 &parentId = NULL_ID); + void AddArc(const QSharedPointer &arc, const quint32 &arcId, + const quint32 &parentId = NULL_ID); void AddSpline(const QSharedPointer &curve, quint32 id, quint32 parentId = NULL_ID); void AddCurveWithSegments(const QSharedPointer &curve, const quint32 &id, quint32 parentId = NULL_ID); diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 4e6a92039..c2146dc8b 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -222,9 +222,12 @@ void DialogTool::FillComboBoxCurves(QComboBox *box) const if (i.key() != toolId) { QSharedPointer obj = i.value(); - if ((obj->getType() == GOType::Arc || obj->getType() == GOType::Spline || - obj->getType() == GOType::SplinePath || obj->getType() == GOType::CubicBezier || - obj->getType() == GOType::CubicBezierPath) && obj->getMode() == Draw::Calculation) + if ((obj->getType() == GOType::Arc + || obj->getType() == GOType::EllipticalArc + || obj->getType() == GOType::Spline + || obj->getType() == GOType::SplinePath + || obj->getType() == GOType::CubicBezier + || obj->getType() == GOType::CubicBezierPath) && obj->getMode() == Draw::Calculation) { PrepareList(list, i.key()); } diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp index 8cbd99b95..a5eb68c7d 100644 --- a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp +++ b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp @@ -29,6 +29,7 @@ #include "vabstractflipping.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" #include "../vgeometry/vgobject.h" @@ -77,10 +78,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.append(CreatePoint(id, idObject, fPoint, sPoint, suffix, data)); break; case GOType::Arc: - dest.append(CreateArc(id, idObject, fPoint, sPoint, suffix, data)); + dest.append(CreateArc(id, idObject, fPoint, sPoint, suffix, data)); break; case GOType::EllipticalArc: - //dest.append(CreateItem(id, idObject, fPoint, sPoint, suffix)); + dest.append(CreateArc(id, idObject, fPoint, sPoint, suffix, data)); break; case GOType::Spline: dest.append(CreateCurve(id, idObject, fPoint, sPoint, suffix, data)); @@ -119,10 +120,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.at(i).my); break; case GOType::Arc: - UpdateArc(id, idObject, fPoint, sPoint, suffix, data, dest.at(i).id); + UpdateArc(id, idObject, fPoint, sPoint, suffix, data, dest.at(i).id); break; case GOType::EllipticalArc: - //dest.append(UpdateItem(id, idObject, fPoint, sPoint, suffix, data)); + UpdateArc(id, idObject, fPoint, sPoint, suffix, data, dest.at(i).id); break; case GOType::Spline: UpdateCurve(id, idObject, fPoint, sPoint, suffix, data, dest.at(i).id); @@ -165,11 +166,12 @@ DestinationItem VAbstractFlipping::CreatePoint(quint32 idTool, quint32 idItem, c } //--------------------------------------------------------------------------------------------------------------------- +template DestinationItem VAbstractFlipping::CreateArc(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data) { - const DestinationItem item = CreateItem(idTool, idItem, firstPoint, secondPoint, suffix, data); - data->AddArc(data->GeometricObject(item.id), item.id); + const DestinationItem item = CreateItem(idTool, idItem, firstPoint, secondPoint, suffix, data); + data->AddArc(data->GeometricObject(item.id), item.id); return item; } @@ -187,9 +189,10 @@ void VAbstractFlipping::UpdatePoint(quint32 idTool, quint32 idItem, const QPoint } //--------------------------------------------------------------------------------------------------------------------- +template void VAbstractFlipping::UpdateArc(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data, quint32 id) { - UpdateItem(idTool, idItem, firstPoint, secondPoint, suffix, data, id); - data->AddArc(data->GeometricObject(id), id); + UpdateItem(idTool, idItem, firstPoint, secondPoint, suffix, data, id); + data->AddArc(data->GeometricObject(id), id); } diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.h b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.h index 72bd275d9..b35e6cd24 100644 --- a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.h +++ b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.h @@ -54,6 +54,7 @@ protected: template static DestinationItem CreateItem(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data); + template static DestinationItem CreateArc(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data); template @@ -68,6 +69,7 @@ protected: template static void UpdateItem(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data, quint32 id); + template static void UpdateArc(quint32 idTool, quint32 idItem, const QPointF &firstPoint, const QPointF &secondPoint, const QString &suffix, VContainer *data, quint32 id); template diff --git a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp index 6396bfe0b..ef1ffedd5 100644 --- a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp @@ -329,6 +329,18 @@ void VAbstractOperation::AllowArcSelecting(bool enabled) AllowCurveSelecting(enabled, GOType::Arc); } +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractOperation::AllowElArcHover(bool enabled) +{ + AllowCurveHover(enabled, GOType::EllipticalArc); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractOperation::AllowElArcSelecting(bool enabled) +{ + AllowCurveSelecting(enabled, GOType::EllipticalArc); +} + //--------------------------------------------------------------------------------------------------------------------- void VAbstractOperation::Disable(bool disable, const QString &namePP) { @@ -575,7 +587,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") case GOType::Arc: case GOType::EllipticalArc: { - VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), GOType::Arc); + VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), obj->getType()); connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) { emit ChoosedTool(id, SceneObject::Arc); @@ -585,7 +597,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") case GOType::Spline: case GOType::CubicBezier: { - VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), GOType::Spline); + VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), obj->getType()); connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) { emit ChoosedTool(id, SceneObject::Spline); @@ -595,7 +607,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") case GOType::SplinePath: case GOType::CubicBezierPath: { - VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), GOType::SplinePath); + VSimpleCurve *curve = InitCurve(object.id, &(VAbstractTool::data), obj->getType()); connect(curve, &VSimpleCurve::Choosed, [this](quint32 id) { emit ChoosedTool(id, SceneObject::SplinePath); diff --git a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h index 7af49a93a..2d525f5cb 100644 --- a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h +++ b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h @@ -108,6 +108,9 @@ public slots: void AllowArcHover(bool enabled); void AllowArcSelecting(bool enabled); + void AllowElArcHover(bool enabled); + void AllowElArcSelecting(bool enabled); + virtual void Disable(bool disable, const QString &namePP) Q_DECL_OVERRIDE; void ObjectSelected(bool selected, quint32 objId); void DeleteFromLabel(); @@ -197,6 +200,9 @@ void VAbstractOperation::InitOperationToolConnections(VMainGraphicsScene *scene, QObject::connect(scene, &VMainGraphicsScene::EnableArcItemHover, tool, &T::AllowArcHover); QObject::connect(scene, &VMainGraphicsScene::EnableArcItemSelection, tool, &T::AllowArcSelecting); + + QObject::connect(scene, &VMainGraphicsScene::EnableElArcItemHover, tool, &T::AllowElArcHover); + QObject::connect(scene, &VMainGraphicsScene::EnableElArcItemSelection, tool, &T::AllowElArcSelecting); } #endif // VABSTRACTOPERATION_H diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp index a95f9472c..16cf893f3 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp @@ -48,6 +48,7 @@ #include "../../../visualization/visualization.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" #include "../vgeometry/vgobject.h" @@ -152,10 +153,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.append(CreatePoint(id, idObject, calcAngle, calcLength, suffix, data)); break; case GOType::Arc: - dest.append(CreateArc(id, idObject, calcAngle, calcLength, suffix, data)); + dest.append(CreateArc(id, idObject, calcAngle, calcLength, suffix, data)); break; case GOType::EllipticalArc: - //dest.append(CreateItem(id, idObject, angle, suffix)); + dest.append(CreateArc(id, idObject, calcAngle, calcLength, suffix, data)); break; case GOType::Spline: dest.append(CreateCurve(id, idObject, calcAngle, calcLength, suffix, data)); @@ -196,10 +197,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.at(i).my); break; case GOType::Arc: - UpdateArc(id, idObject, calcAngle, calcLength, suffix, data, dest.at(i).id); + UpdateArc(id, idObject, calcAngle, calcLength, suffix, data, dest.at(i).id); break; case GOType::EllipticalArc: - //dest.append(UpdateItem(id, idObject, oPoint, angle, suffix, data)); + UpdateArc(id, idObject, calcAngle, calcLength, suffix, data, dest.at(i).id); break; case GOType::Spline: UpdateCurve(id, idObject, calcAngle, calcLength, suffix, data, dest.at(i).id); @@ -385,11 +386,12 @@ DestinationItem VToolMove::CreatePoint(quint32 idTool, quint32 idItem, qreal ang } //--------------------------------------------------------------------------------------------------------------------- +template DestinationItem VToolMove::CreateArc(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data) { - const DestinationItem item = CreateItem(idTool, idItem, angle, length, suffix, data); - data->AddArc(data->GeometricObject(item.id), item.id); + const DestinationItem item = CreateItem(idTool, idItem, angle, length, suffix, data); + data->AddArc(data->GeometricObject(item.id), item.id); return item; } @@ -406,11 +408,12 @@ void VToolMove::UpdatePoint(quint32 idTool, quint32 idItem, qreal angle, qreal l } //--------------------------------------------------------------------------------------------------------------------- +template void VToolMove::UpdateArc(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data, quint32 id) { - UpdateItem(idTool, idItem, angle, length, suffix, data, id); - data->AddArc(data->GeometricObject(id), id); + UpdateItem(idTool, idItem, angle, length, suffix, data, id); + data->AddArc(data->GeometricObject(id), id); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolmove.h b/src/libs/vtools/tools/drawTools/operation/vtoolmove.h index 54397e970..faa36bdcc 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolmove.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolmove.h @@ -101,6 +101,7 @@ private: template static DestinationItem CreateItem(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data); + template static DestinationItem CreateArc(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data); template @@ -115,6 +116,7 @@ private: template static void UpdateItem(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data, quint32 id); + template static void UpdateArc(quint32 idTool, quint32 idItem, qreal angle, qreal length, const QString &suffix, VContainer *data, quint32 id); template diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 4dd3e640c..010d961d1 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -48,6 +48,7 @@ #include "../../../visualization/visualization.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" #include "../vgeometry/vgobject.h" @@ -165,10 +166,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.append(CreatePoint(id, idObject, oPoint, calcAngle, suffix, data)); break; case GOType::Arc: - dest.append(CreateArc(id, idObject, oPoint, calcAngle, suffix, data)); + dest.append(CreateArc(id, idObject, oPoint, calcAngle, suffix, data)); break; case GOType::EllipticalArc: - //dest.append(CreateItem(id, idObject, oPoint, angle, suffix)); + dest.append(CreateArc(id, idObject, oPoint, calcAngle, suffix, data)); break; case GOType::Spline: dest.append(CreateCurve(id, idObject, oPoint, calcAngle, suffix, data)); @@ -208,10 +209,10 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") dest.at(i).my); break; case GOType::Arc: - UpdateArc(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); + UpdateArc(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); break; case GOType::EllipticalArc: - //dest.append(UpdateItem(id, idObject, oPoint, angle, suffix, data)); + UpdateArc(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); break; case GOType::Spline: UpdateCurve(id, idObject, oPoint, calcAngle, suffix, data, dest.at(i).id); @@ -376,11 +377,12 @@ DestinationItem VToolRotation::CreateItem(quint32 idTool, quint32 idItem, const } //--------------------------------------------------------------------------------------------------------------------- +template DestinationItem VToolRotation::CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, const QString &suffix, VContainer *data) { - const DestinationItem item = CreateItem(idTool, idItem, origin, angle, suffix, data); - data->AddArc(data->GeometricObject(item.id), item.id); + const DestinationItem item = CreateItem(idTool, idItem, origin, angle, suffix, data); + data->AddArc(data->GeometricObject(item.id), item.id); return item; } @@ -428,11 +430,12 @@ void VToolRotation::UpdateItem(quint32 idTool, quint32 idItem, const QPointF &or } //--------------------------------------------------------------------------------------------------------------------- +template void VToolRotation::UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal angle, const QString &suffix, VContainer *data, quint32 id) { - UpdateItem(idTool, idItem, origin, angle, suffix, data, id); - data->AddArc(data->GeometricObject(id), id); + UpdateItem(idTool, idItem, origin, angle, suffix, data, id); + data->AddArc(data->GeometricObject(id), id); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index 0920158db..f46cbee00 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -98,6 +98,7 @@ private: template static DestinationItem CreateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); + template static DestinationItem CreateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data); template @@ -112,6 +113,7 @@ private: template static void UpdateItem(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); + template static void UpdateArc(quint32 idTool, quint32 idItem, const QPointF &origin, qreal formulaAngle, const QString &suffix, VContainer *data, quint32 id); template diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h index 342d766fb..b72b55fa8 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h @@ -133,6 +133,9 @@ protected: template static void InitArcToolConnections(VMainGraphicsScene *scene, T *tool); + template + static void InitElArcToolConnections(VMainGraphicsScene *scene, T *tool); + private: Q_DISABLE_COPY(VAbstractSpline) }; @@ -212,4 +215,16 @@ void VAbstractSpline::InitArcToolConnections(VMainGraphicsScene *scene, T *tool) QObject::connect(scene, &VMainGraphicsScene::EnableArcItemSelection, tool, &T::AllowSelecting); } +//--------------------------------------------------------------------------------------------------------------------- +template +void VAbstractSpline::InitElArcToolConnections(VMainGraphicsScene *scene, T *tool) +{ + SCASSERT(scene != nullptr); + SCASSERT(tool != nullptr); + + InitDrawToolConnections(scene, tool); + QObject::connect(scene, &VMainGraphicsScene::EnableElArcItemHover, tool, &T::AllowHover); + QObject::connect(scene, &VMainGraphicsScene::EnableElArcItemSelection, tool, &T::AllowSelecting); +} + #endif // VABSTRACTSPLINE_H diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp index 3014fe639..9a03cac98 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp @@ -173,12 +173,12 @@ VToolEllipticalArc* VToolEllipticalArc::Create(const quint32 _id, const quint32 if (typeCreation == Source::FromGui) { id = data->AddGObject(elArc); - data->AddEllipticalArc(data->GeometricObject(id), id); + data->AddArc(data->GeometricObject(id), id); } else { data->UpdateGObject(id, elArc); - data->AddEllipticalArc(data->GeometricObject(id), id); + data->AddArc(data->GeometricObject(id), id); if (parse != Document::FullParse) { doc->UpdateToolData(id, data); @@ -189,7 +189,7 @@ VToolEllipticalArc* VToolEllipticalArc::Create(const quint32 _id, const quint32 { VToolEllipticalArc *toolEllipticalArc = new VToolEllipticalArc(doc, data, id, typeCreation); scene->addItem(toolEllipticalArc); - InitArcToolConnections(scene, toolEllipticalArc); + InitElArcToolConnections(scene, toolEllipticalArc); doc->AddTool(id, toolEllipticalArc); doc->IncrementReferens(c.getIdTool()); return toolEllipticalArc; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.h b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.h index 99ecadda9..8956ed341 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.h @@ -59,8 +59,9 @@ public: virtual void setDialog() Q_DECL_OVERRIDE; static VToolEllipticalArc* Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); - static VToolEllipticalArc* Create(const quint32 _id, const quint32 ¢er, QString &radius1, QString &radius2, QString &f1, QString &f2, QString &rotationAngle, - const QString &color, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, + static VToolEllipticalArc* Create(const quint32 _id, const quint32 ¢er, QString &radius1, QString &radius2, + QString &f1, QString &f2, QString &rotationAngle, const QString &color, + VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation); static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index 54c5d2b7a..4ccbba610 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -49,6 +49,7 @@ #include "../vgeometry/vabstractcubicbezierpath.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" @@ -326,6 +327,49 @@ void VToolCurveIntersectAxis::SetVisualization() } } +//--------------------------------------------------------------------------------------------------------------------- +template +void VToolCurveIntersectAxis::InitArc(VContainer *data, qreal segLength, const VPointF *p, quint32 curveId) +{ + QSharedPointer a1; + QSharedPointer a2; + + const QSharedPointer arc = data->GeometricObject(curveId); + Item arc1; + Item arc2; + + if (not VFuzzyComparePossibleNulls(segLength, -1)) + { + arc->CutArc(segLength, arc1, arc2); + } + else + { + arc->CutArc(0, arc1, arc2); + } + + // Arc highly depend on id. Need for creating the name. + arc1.setId(p->id() + 1); + arc2.setId(p->id() + 2); + + if (not VFuzzyComparePossibleNulls(segLength, -1)) + { + a1 = QSharedPointer(new Item(arc1)); + a2 = QSharedPointer(new Item(arc2)); + } + else + { + a1 = QSharedPointer(new Item()); + a2 = QSharedPointer(new Item()); + + // Take names for empty arcs from donors. + a1->setName(arc1.name()); + a2->setName(arc2.name()); + } + + data->AddArc(a1, arc1.id(), p->id()); + data->AddArc(a2, arc2.id(), p->id()); +} + //--------------------------------------------------------------------------------------------------------------------- QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wswitch-default") @@ -334,47 +378,12 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen { switch(curveType) { - case GOType::Arc: - { - QSharedPointer a1; - QSharedPointer a2; - - const QSharedPointer arc = data->GeometricObject(curveId); - VArc arc1; - VArc arc2; - - if (not VFuzzyComparePossibleNulls(segLength, -1)) - { - arc->CutArc(segLength, arc1, arc2); - } - else - { - arc->CutArc(0, arc1, arc2); - } - - // Arc highly depend on id. Need for creating the name. - arc1.setId(p->id() + 1); - arc2.setId(p->id() + 2); - - if (not VFuzzyComparePossibleNulls(segLength, -1)) - { - a1 = QSharedPointer(new VArc(arc1)); - a2 = QSharedPointer(new VArc(arc2)); - } - else - { - a1 = QSharedPointer(new VArc()); - a2 = QSharedPointer(new VArc()); - - // Take names for empty arcs from donors. - a1->setName(arc1.name()); - a2->setName(arc2.name()); - } - - data->AddArc(a1, arc1.id(), p->id()); - data->AddArc(a2, arc2.id(), p->id()); + case GOType::EllipticalArc: + InitArc(data, segLength, p, curveId); + break; + case GOType::Arc: + InitArc(data, segLength, p, curveId); break; - } case GOType::CubicBezier: case GOType::Spline: { @@ -462,7 +471,6 @@ void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLen data->AddSpline(splP2, NULL_ID, p->id()); break; } - case GOType::EllipticalArc: case GOType::Point: case GOType::Unknown: Q_UNREACHABLE(); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h index 7573a71b9..018d379aa 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h @@ -98,6 +98,8 @@ private: const QString &lineColor, const QString &formulaAngle, const quint32 &basePointId, const quint32 &curveId, const Source &typeCreation, QGraphicsItem * parent = nullptr); + template + static void InitArc(VContainer *data, qreal segLength, const VPointF *p, quint32 curveId); static void InitSegments(const GOType &curveType, qreal segLength, const VPointF *p, quint32 curveId, VContainer *data); }; diff --git a/src/libs/vwidgets/vmaingraphicsscene.cpp b/src/libs/vwidgets/vmaingraphicsscene.cpp index 7f5ddf22c..8bae83fbe 100644 --- a/src/libs/vwidgets/vmaingraphicsscene.cpp +++ b/src/libs/vwidgets/vmaingraphicsscene.cpp @@ -333,6 +333,12 @@ void VMainGraphicsScene::ToggleArcSelection(bool enabled) emit EnableArcItemSelection(enabled); } +//--------------------------------------------------------------------------------------------------------------------- +void VMainGraphicsScene::ToggleElArcSelection(bool enabled) +{ + emit EnableElArcItemSelection(enabled); +} + //--------------------------------------------------------------------------------------------------------------------- void VMainGraphicsScene::ToggleSplineSelection(bool enabled) { @@ -387,6 +393,12 @@ void VMainGraphicsScene::ToggleArcHover(bool enabled) emit EnableArcItemHover(enabled); } +//--------------------------------------------------------------------------------------------------------------------- +void VMainGraphicsScene::ToggleElArcHover(bool enabled) +{ + emit EnableElArcItemHover(enabled); +} + //--------------------------------------------------------------------------------------------------------------------- void VMainGraphicsScene::ToggleSplineHover(bool enabled) { diff --git a/src/libs/vwidgets/vmaingraphicsscene.h b/src/libs/vwidgets/vmaingraphicsscene.h index e7db61531..5cf079636 100644 --- a/src/libs/vwidgets/vmaingraphicsscene.h +++ b/src/libs/vwidgets/vmaingraphicsscene.h @@ -81,6 +81,7 @@ public slots: void TogglePointSelection(bool enabled); void ToggleLineSelection(bool enabled); void ToggleArcSelection(bool enabled); + void ToggleElArcSelection(bool enabled); void ToggleSplineSelection(bool enabled); void ToggleSplinePathSelection(bool enabled); void ToggleNodeLabelSelection(bool enabled); @@ -91,6 +92,7 @@ public slots: void TogglePointHover(bool enabled); void ToggleLineHover(bool enabled); void ToggleArcHover(bool enabled); + void ToggleElArcHover(bool enabled); void ToggleSplineHover(bool enabled); void ToggleSplinePathHover(bool enabled); void ToggleNodeLabelHover(bool enabled); @@ -133,6 +135,7 @@ signals: void EnablePointItemSelection(bool enable); void EnableLineItemSelection(bool enable); void EnableArcItemSelection(bool enable); + void EnableElArcItemSelection(bool enable); void EnableSplineItemSelection(bool enable); void EnableSplinePathItemSelection(bool enable); void EnableNodeLabelItemSelection(bool enabled); @@ -142,6 +145,7 @@ signals: void EnableLabelItemHover(bool enable); void EnablePointItemHover(bool enable); void EnableArcItemHover(bool enable); + void EnableElArcItemHover(bool enable); void EnableSplineItemHover(bool enable); void EnableSplinePathItemHover(bool enable); void EnableNodeLabelItemHover(bool enabled);