Class visualization for VToolPointOfIntersection.

--HG--
branch : develop
This commit is contained in:
dismine 2014-08-13 14:12:00 +03:00
parent 043b9a4742
commit 8d1b68d448
6 changed files with 187 additions and 10 deletions

View File

@ -45,7 +45,7 @@ DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, con
ui->setupUi(this); ui->setupUi(this);
labelEditNamePoint = ui->labelEditNamePoint; labelEditNamePoint = ui->labelEditNamePoint;
InitOkCancel(ui); InitOkCancelApply(ui);
flagName = false; flagName = false;
CheckState(); CheckState();

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>293</width> <width>285</width>
<height>180</height> <height>180</height>
</rect> </rect>
</property> </property>
@ -23,7 +23,7 @@
<item> <item>
<widget class="QLabel" name="labelEditNamePoint"> <widget class="QLabel" name="labelEditNamePoint">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -71,7 +71,14 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLineEdit" name="lineEditNamePoint"/> <widget class="QLineEdit" name="lineEditNamePoint">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
@ -80,11 +87,17 @@
<item> <item>
<widget class="QLabel" name="labelFirstPoint"> <widget class="QLabel" name="labelFirstPoint">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text"> <property name="text">
<string>vertical point</string> <string>vertical point</string>
</property> </property>
@ -104,7 +117,7 @@
<item> <item>
<widget class="QLabel" name="labelSecondPoint"> <widget class="QLabel" name="labelSecondPoint">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -129,7 +142,7 @@
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -232,7 +232,9 @@ QPointF VisLine::Ray(const QPointF &firstPoint, const qreal &angle) const
{ {
if(this->scene() == nullptr) 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(); QLineF line = QLineF();

View File

@ -0,0 +1,104 @@
/************************************************************************
**
** @file vistoolpointofintersection.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @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
** <https://bitbucket.org/dismine/valentina> 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 <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#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<const VPointF *>(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<const VPointF *>(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);
}
}

View File

@ -0,0 +1,56 @@
/************************************************************************
**
** @file vistoolpointofintersection.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @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
** <https://bitbucket.org/dismine/valentina> 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 <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#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

View File

@ -10,7 +10,8 @@ HEADERS += \
visualization/vistoolbisector.h \ visualization/vistoolbisector.h \
visualization/vistoolshoulderpoint.h \ visualization/vistoolshoulderpoint.h \
visualization/vistoolnormal.h \ visualization/vistoolnormal.h \
visualization/vistoolheight.h visualization/vistoolheight.h \
visualization/vistoolpointofintersection.h
SOURCES += \ SOURCES += \
visualization/vgraphicssimpletextitem.cpp \ visualization/vgraphicssimpletextitem.cpp \
@ -24,4 +25,5 @@ SOURCES += \
visualization/vistoolbisector.cpp \ visualization/vistoolbisector.cpp \
visualization/vistoolshoulderpoint.cpp \ visualization/vistoolshoulderpoint.cpp \
visualization/vistoolnormal.cpp \ visualization/vistoolnormal.cpp \
visualization/vistoolheight.cpp visualization/vistoolheight.cpp \
visualization/vistoolpointofintersection.cpp