diff --git a/src/app/dialogs/tools/dialogpointofintersection.cpp b/src/app/dialogs/tools/dialogpointofintersection.cpp index 1cb8dc0e3..a15e56de2 100644 --- a/src/app/dialogs/tools/dialogpointofintersection.cpp +++ b/src/app/dialogs/tools/dialogpointofintersection.cpp @@ -45,7 +45,7 @@ DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, con ui->setupUi(this); labelEditNamePoint = ui->labelEditNamePoint; - InitOkCancel(ui); + InitOkCancelApply(ui); flagName = false; CheckState(); diff --git a/src/app/dialogs/tools/dialogpointofintersection.ui b/src/app/dialogs/tools/dialogpointofintersection.ui index 88e61cdcd..db3a4c052 100644 --- a/src/app/dialogs/tools/dialogpointofintersection.ui +++ b/src/app/dialogs/tools/dialogpointofintersection.ui @@ -6,7 +6,7 @@ 0 0 - 293 + 285 180 @@ -23,7 +23,7 @@ - + 0 0 @@ -71,7 +71,14 @@ - + + + + 0 + 0 + + + @@ -80,11 +87,17 @@ - + 0 0 + + + 0 + 0 + + vertical point @@ -104,7 +117,7 @@ - + 0 0 @@ -129,7 +142,7 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/src/app/visualization/visline.cpp b/src/app/visualization/visline.cpp index a3aff1ad5..7b03dcbd5 100644 --- a/src/app/visualization/visline.cpp +++ b/src/app/visualization/visline.cpp @@ -232,7 +232,9 @@ QPointF VisLine::Ray(const QPointF &firstPoint, const qreal &angle) const { if(this->scene() == nullptr) { - return scenePos;// We can't find ray because item doesn't have scene. We eill return cursor position on scene. + QLineF line = QLineF(firstPoint, scenePos); + line.setAngle(angle); + return line.p2();// We can't find ray because item doesn't have scene. We will return cursor position on scene. } QLineF line = QLineF(); diff --git a/src/app/visualization/vistoolpointofintersection.cpp b/src/app/visualization/vistoolpointofintersection.cpp new file mode 100644 index 000000000..3dde9a150 --- /dev/null +++ b/src/app/visualization/vistoolpointofintersection.cpp @@ -0,0 +1,104 @@ +/************************************************************************ + ** + ** @file vistoolpointofintersection.cpp + ** @author Roman Telezhynskyi + ** @date 13 8, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2014 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vistoolpointofintersection.h" +#include "../geometry/vpointf.h" +#include "../container/vcontainer.h" + +//--------------------------------------------------------------------------------------------------------------------- +VisToolPointOfIntersection::VisToolPointOfIntersection(const VContainer *data, QGraphicsItem *parent) + : VisLine(data, parent), point2Id(0), point(nullptr), axisP1(nullptr), axisP2(nullptr), axis2(nullptr) +{ + axisP1 = InitPoint(supportColor); + axisP2 = InitPoint(supportColor); + axis2 = InitLine(supportColor); + + point = InitPoint(mainColor); +} + +//--------------------------------------------------------------------------------------------------------------------- +VisToolPointOfIntersection::~VisToolPointOfIntersection() +{} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolPointOfIntersection::RefreshGeometry() +{ + if (point1Id > 0) + { + const VPointF *first = data->GeometricObject(point1Id); + DrawPoint(axisP1, first->toQPointF(), supportColor); + + QLineF axisL1 = Axis(first->toQPointF(), 90); + DrawLine(this, axisL1, supportColor, Qt::DashLine); + + QLineF axisL2; + if (point2Id <= 0) + { + DrawPoint(axisP2, scenePos, supportColor); + axisL2 = Axis(scenePos, 180); + } + else + { + const VPointF *second = data->GeometricObject(point2Id); + DrawPoint(axisP2, second->toQPointF(), supportColor); + axisL2 = Axis(second->toQPointF(), 180); + } + DrawLine(axis2, axisL2, supportColor, Qt::DashLine); + ShowIntersection(axisL1, axisL2); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolPointOfIntersection::setPoint2Id(const quint32 &value) +{ + point2Id = value; +} + +//--------------------------------------------------------------------------------------------------------------------- +QLineF VisToolPointOfIntersection::Axis(const QPointF &p, const qreal &angle) const +{ + QPointF endP1 = Ray(p, angle); + QPointF endP2 = Ray(p, angle+180); + return QLineF(endP1, endP2); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VisToolPointOfIntersection::ShowIntersection(const QLineF &axis1, const QLineF &axis2) +{ + QPointF p; + QLineF::IntersectType intersect = axis1.intersect(axis2, &p); + if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) + { + point->setVisible(true); + DrawPoint(point, p, mainColor); + } + else + { + point->setVisible(true); + } +} diff --git a/src/app/visualization/vistoolpointofintersection.h b/src/app/visualization/vistoolpointofintersection.h new file mode 100644 index 000000000..291f7802a --- /dev/null +++ b/src/app/visualization/vistoolpointofintersection.h @@ -0,0 +1,56 @@ +/************************************************************************ + ** + ** @file vistoolpointofintersection.h + ** @author Roman Telezhynskyi + ** @date 13 8, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2014 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VISTOOLPOINTOFINTERSECTION_H +#define VISTOOLPOINTOFINTERSECTION_H + +#include "visline.h" + +class VisToolPointOfIntersection : public VisLine +{ + Q_OBJECT +public: + VisToolPointOfIntersection(const VContainer *data, QGraphicsItem *parent = 0); + virtual ~VisToolPointOfIntersection(); + + virtual void RefreshGeometry(); + + void setPoint2Id(const quint32 &value); +private: + Q_DISABLE_COPY(VisToolPointOfIntersection) + quint32 point2Id; + QGraphicsEllipseItem *point; + QGraphicsEllipseItem *axisP1;//axis1 is class themself + QGraphicsEllipseItem *axisP2; + QGraphicsLineItem *axis2;//axis1 is class themself + + QLineF Axis(const QPointF &p, const qreal &angle) const; + void ShowIntersection(const QLineF &axis1, const QLineF &axis2); +}; + +#endif // VISTOOLPOINTOFINTERSECTION_H diff --git a/src/app/visualization/visualization.pri b/src/app/visualization/visualization.pri index 0c9db6a78..63a4dd5ba 100644 --- a/src/app/visualization/visualization.pri +++ b/src/app/visualization/visualization.pri @@ -10,7 +10,8 @@ HEADERS += \ visualization/vistoolbisector.h \ visualization/vistoolshoulderpoint.h \ visualization/vistoolnormal.h \ - visualization/vistoolheight.h + visualization/vistoolheight.h \ + visualization/vistoolpointofintersection.h SOURCES += \ visualization/vgraphicssimpletextitem.cpp \ @@ -24,4 +25,5 @@ SOURCES += \ visualization/vistoolbisector.cpp \ visualization/vistoolshoulderpoint.cpp \ visualization/vistoolnormal.cpp \ - visualization/vistoolheight.cpp + visualization/vistoolheight.cpp \ + visualization/vistoolpointofintersection.cpp