Add tool arc
This commit is contained in:
parent
45856338f9
commit
30ec4ed2f2
|
@ -48,7 +48,9 @@ SOURCES += main.cpp\
|
||||||
geometry/varc.cpp \
|
geometry/varc.cpp \
|
||||||
widgets/vcontrolpointspline.cpp \
|
widgets/vcontrolpointspline.cpp \
|
||||||
tools/vtoolspline.cpp \
|
tools/vtoolspline.cpp \
|
||||||
dialogs/dialogspline.cpp
|
dialogs/dialogspline.cpp \
|
||||||
|
tools/vtoolarc.cpp \
|
||||||
|
dialogs/dialogarc.cpp
|
||||||
|
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
widgets/vmaingraphicsscene.h \
|
widgets/vmaingraphicsscene.h \
|
||||||
|
@ -87,7 +89,9 @@ HEADERS += mainwindow.h \
|
||||||
geometry/varc.h \
|
geometry/varc.h \
|
||||||
widgets/vcontrolpointspline.h \
|
widgets/vcontrolpointspline.h \
|
||||||
tools/vtoolspline.h \
|
tools/vtoolspline.h \
|
||||||
dialogs/dialogspline.h
|
dialogs/dialogspline.h \
|
||||||
|
tools/vtoolarc.h \
|
||||||
|
dialogs/dialogarc.h
|
||||||
|
|
||||||
FORMS += mainwindow.ui \
|
FORMS += mainwindow.ui \
|
||||||
dialogs/dialogsinglepoint.ui \
|
dialogs/dialogsinglepoint.ui \
|
||||||
|
@ -99,7 +103,8 @@ FORMS += mainwindow.ui \
|
||||||
dialogs/dialognormal.ui \
|
dialogs/dialognormal.ui \
|
||||||
dialogs/dialogbisector.ui \
|
dialogs/dialogbisector.ui \
|
||||||
dialogs/dialoglineintersect.ui \
|
dialogs/dialoglineintersect.ui \
|
||||||
dialogs/dialogspline.ui
|
dialogs/dialogspline.ui \
|
||||||
|
dialogs/dialogarc.ui
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
icon.qrc \
|
icon.qrc \
|
||||||
|
|
|
@ -120,6 +120,7 @@ void VContainer::Clear(){
|
||||||
splines.clear();
|
splines.clear();
|
||||||
arcs.clear();
|
arcs.clear();
|
||||||
lengthArcs.clear();
|
lengthArcs.clear();
|
||||||
|
lineArcs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VContainer::ClearIncrementTable(){
|
void VContainer::ClearIncrementTable(){
|
||||||
|
@ -138,6 +139,10 @@ void VContainer::ClearLengthArcs(){
|
||||||
lengthArcs.clear();
|
lengthArcs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VContainer::ClearLineArcs(){
|
||||||
|
lineArcs.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void VContainer::SetSize(qint32 size){
|
void VContainer::SetSize(qint32 size){
|
||||||
base["Сг"] = size;
|
base["Сг"] = size;
|
||||||
}
|
}
|
||||||
|
@ -176,6 +181,14 @@ qreal VContainer::FindVar(const QString &name, bool *ok)const{
|
||||||
*ok = true;
|
*ok = true;
|
||||||
return lengthLines.value(name);
|
return lengthLines.value(name);
|
||||||
}
|
}
|
||||||
|
if(lengthArcs.contains(name)){
|
||||||
|
*ok = true;
|
||||||
|
return lengthArcs.value(name);
|
||||||
|
}
|
||||||
|
if(lineArcs.contains(name)){
|
||||||
|
*ok = true;
|
||||||
|
return lineArcs.value(name);
|
||||||
|
}
|
||||||
*ok = false;
|
*ok = false;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -237,23 +250,26 @@ QString VContainer::GetNameLine(const qint64 &firstPoint, const qint64 &secondPo
|
||||||
return QString("Line_%1_%2").arg(first.name(), second.name());
|
return QString("Line_%1_%2").arg(first.name(), second.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VContainer::GetNameLineArc(const qint64 &firstPoint, const qint64 &secondPoint) const{
|
||||||
|
VPointF first = GetPoint(firstPoint);
|
||||||
|
VPointF second = GetPoint(secondPoint);
|
||||||
|
return QString("ArcLine_%1_%2").arg(first.name(), second.name());
|
||||||
|
}
|
||||||
|
|
||||||
QString VContainer::GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint) const{
|
QString VContainer::GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint) const{
|
||||||
VPointF first = GetPoint(firstPoint);
|
VPointF first = GetPoint(firstPoint);
|
||||||
VPointF second = GetPoint(secondPoint);
|
VPointF second = GetPoint(secondPoint);
|
||||||
return QString("Spl_%1_%2").arg(first.name(), second.name());
|
return QString("Spl_%1_%2").arg(first.name(), second.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VContainer::GetNameArc(const qint64 &firstPoint, const qint64 ¢erPoint,
|
QString VContainer::GetNameArc(const qint64 ¢er, const qint64 &id) const{
|
||||||
const qint64 &secondPoint) const{
|
VPointF centerPoint = GetPoint(center);
|
||||||
VPointF first = GetPoint(firstPoint);
|
return QString ("Arc(%1)%2").arg(centerPoint.name(), id);
|
||||||
VPointF center = GetPoint(centerPoint);
|
|
||||||
VPointF second = GetPoint(secondPoint);
|
|
||||||
return QString("Arc_%1_%2_%3").arg(first.name(), center.name(), second.name());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VContainer::AddLengthLine(const QString &name, const qreal &value){
|
void VContainer::AddLengthLine(const QString &name, const qreal &value){
|
||||||
Q_ASSERT(!name.isEmpty());
|
Q_ASSERT(!name.isEmpty());
|
||||||
lengthLines[name] = value/PrintDPI*25.4;
|
lengthLines[name] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VContainer::AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId){
|
void VContainer::AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId){
|
||||||
|
@ -265,20 +281,21 @@ void VContainer::AddLengthSpline(const qint64 &firstPointId, const qint64 &secon
|
||||||
|
|
||||||
void VContainer::AddLengthSpline(const QString &name, const qreal &value){
|
void VContainer::AddLengthSpline(const QString &name, const qreal &value){
|
||||||
Q_ASSERT(!name.isEmpty());
|
Q_ASSERT(!name.isEmpty());
|
||||||
lengthSplines[name] = value/PrintDPI*25.4;
|
lengthSplines[name] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VContainer::AddLengthArc(const qint64 &firstPointId, const qint64 ¢erPoint,
|
void VContainer::AddLengthArc(const qint64 ¢er, const qint64 &id){
|
||||||
const qint64 &secondPointId){
|
AddLengthArc(GetNameArc(center, id), GetArc(id).GetLength());
|
||||||
QString nameLine = GetNameArc(firstPointId, centerPoint, secondPointId);
|
|
||||||
VPointF firstPoint = GetPoint(firstPointId);
|
|
||||||
VPointF secondPoint = GetPoint(secondPointId);
|
|
||||||
AddLengthArc(nameLine, QLineF(firstPoint.toQPointF(), secondPoint.toQPointF()).length());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VContainer::AddLengthArc(const QString &name, const qreal &value){
|
void VContainer::AddLengthArc(const QString &name, const qreal &value){
|
||||||
Q_ASSERT(!name.isEmpty());
|
Q_ASSERT(!name.isEmpty());
|
||||||
lengthArcs[name] = value/PrintDPI*25.4;
|
lengthArcs[name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VContainer::AddLineArc(const QString &name, const qint32 &value){
|
||||||
|
Q_ASSERT(!name.isEmpty());
|
||||||
|
lineArcs[name] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal VContainer::GetLine(const QString &name) const{
|
qreal VContainer::GetLine(const QString &name) const{
|
||||||
|
@ -287,7 +304,18 @@ qreal VContainer::GetLine(const QString &name) const{
|
||||||
return lengthLines.value(name);
|
return lengthLines.value(name);
|
||||||
} else {
|
} else {
|
||||||
qCritical()<<"Не можу знайти лінію за імям = "<<name<<" в таблиці.";
|
qCritical()<<"Не можу знайти лінію за імям = "<<name<<" в таблиці.";
|
||||||
throw"Не можу знайти лінію таблиці.";
|
throw"Не можу знайти лінію в таблиці.";
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 VContainer::GetLineArc(const QString &name) const{
|
||||||
|
Q_ASSERT(!name.isEmpty());
|
||||||
|
if(lineArcs.contains(name)){
|
||||||
|
return lineArcs.value(name);
|
||||||
|
} else {
|
||||||
|
qCritical()<<"Не можу знайти кут за імям = "<<name<<" в таблиці.";
|
||||||
|
throw"Не можу знайти кут в таблиці.";
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -316,3 +344,7 @@ VArc VContainer::GetArc(qint64 id) const{
|
||||||
const QMap<QString, qreal> *VContainer::DataLengthArcs() const{
|
const QMap<QString, qreal> *VContainer::DataLengthArcs() const{
|
||||||
return &lengthArcs;
|
return &lengthArcs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QMap<QString, qreal> *VContainer::DataLineArcs() const{
|
||||||
|
return &lineArcs;
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ public:
|
||||||
VStandartTableCell GetStandartTableCell(const QString& name) const;
|
VStandartTableCell GetStandartTableCell(const QString& name) const;
|
||||||
VIncrementTableRow GetIncrementTableRow(const QString& name) const;
|
VIncrementTableRow GetIncrementTableRow(const QString& name) const;
|
||||||
qreal GetLine(const QString &name) const;
|
qreal GetLine(const QString &name) const;
|
||||||
|
qint32 GetLineArc(const QString &name) const;
|
||||||
VSpline GetSpline(qint64 id) const;
|
VSpline GetSpline(qint64 id) const;
|
||||||
VArc GetArc(qint64 id) const;
|
VArc GetArc(qint64 id) const;
|
||||||
qint64 getId();
|
qint64 getId();
|
||||||
|
@ -37,15 +38,16 @@ public:
|
||||||
void AddLengthLine(const QString &name, const qreal &value);
|
void AddLengthLine(const QString &name, const qreal &value);
|
||||||
void AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId);
|
void AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId);
|
||||||
void AddLengthSpline(const QString &name, const qreal &value);
|
void AddLengthSpline(const QString &name, const qreal &value);
|
||||||
void AddLengthArc(const qint64 &firstPointId, const qint64 ¢erPoint, const qint64 &secondPointId);
|
void AddLengthArc(const qint64 ¢er, const qint64 &id);
|
||||||
void AddLengthArc(const QString &name, const qreal &value);
|
void AddLengthArc(const QString &name, const qreal &value);
|
||||||
|
void AddLineArc(const QString &name, const qint32 &value);
|
||||||
void AddLine(const qint64 &firstPointId, const qint64 &secondPointId);
|
void AddLine(const qint64 &firstPointId, const qint64 &secondPointId);
|
||||||
qint64 AddSpline(const VSpline& spl);
|
qint64 AddSpline(const VSpline& spl);
|
||||||
qint64 AddArc(const VArc& arc);
|
qint64 AddArc(const VArc& arc);
|
||||||
QString GetNameLine(const qint64 &firstPoint, const qint64 &secondPoint) const;
|
QString GetNameLine(const qint64 &firstPoint, const qint64 &secondPoint) const;
|
||||||
|
QString GetNameLineArc(const qint64 &firstPoint, const qint64 &secondPoint) const;
|
||||||
QString GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint) const;
|
QString GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint) const;
|
||||||
QString GetNameArc(const qint64 &firstPoint, const qint64 ¢erPoint,
|
QString GetNameArc(const qint64 ¢er, const qint64 &id) const;
|
||||||
const qint64 &secondPoint) const;
|
|
||||||
void UpdatePoint(qint64 id, const VPointF& point);
|
void UpdatePoint(qint64 id, const VPointF& point);
|
||||||
void UpdateSpline(qint64 id, const VSpline& spl);
|
void UpdateSpline(qint64 id, const VSpline& spl);
|
||||||
void UpdateArc(qint64 id, const VArc& arc);
|
void UpdateArc(qint64 id, const VArc& arc);
|
||||||
|
@ -58,6 +60,7 @@ public:
|
||||||
void ClearLengthLines();
|
void ClearLengthLines();
|
||||||
void ClearLengthSplines();
|
void ClearLengthSplines();
|
||||||
void ClearLengthArcs();
|
void ClearLengthArcs();
|
||||||
|
void ClearLineArcs();
|
||||||
void SetSize(qint32 size);
|
void SetSize(qint32 size);
|
||||||
void SetGrowth(qint32 growth);
|
void SetGrowth(qint32 growth);
|
||||||
qint32 size() const;
|
qint32 size() const;
|
||||||
|
@ -75,6 +78,7 @@ public:
|
||||||
const QMap<QString, qreal> *DataLengthLines() const;
|
const QMap<QString, qreal> *DataLengthLines() const;
|
||||||
const QMap<QString, qreal> *DataLengthSplines() const;
|
const QMap<QString, qreal> *DataLengthSplines() const;
|
||||||
const QMap<QString, qreal> *DataLengthArcs() const;
|
const QMap<QString, qreal> *DataLengthArcs() const;
|
||||||
|
const QMap<QString, qreal> *DataLineArcs() const;
|
||||||
private:
|
private:
|
||||||
qint64 _id;
|
qint64 _id;
|
||||||
QMap<QString, qint32> base;
|
QMap<QString, qint32> base;
|
||||||
|
@ -82,6 +86,7 @@ private:
|
||||||
QMap<QString, VStandartTableCell> standartTable;
|
QMap<QString, VStandartTableCell> standartTable;
|
||||||
QMap<QString, VIncrementTableRow> incrementTable;
|
QMap<QString, VIncrementTableRow> incrementTable;
|
||||||
QMap<QString, qreal> lengthLines;
|
QMap<QString, qreal> lengthLines;
|
||||||
|
QMap<QString, qreal> lineArcs;
|
||||||
QMap<qint64, VSpline> splines;
|
QMap<qint64, VSpline> splines;
|
||||||
QMap<QString, qreal> lengthSplines;
|
QMap<QString, qreal> lengthSplines;
|
||||||
QMap<qint64, VArc> arcs;
|
QMap<qint64, VArc> arcs;
|
||||||
|
|
|
@ -9,5 +9,6 @@
|
||||||
<file>cursor/bisector_cursor.png</file>
|
<file>cursor/bisector_cursor.png</file>
|
||||||
<file>cursor/intersect_cursor.png</file>
|
<file>cursor/intersect_cursor.png</file>
|
||||||
<file>cursor/spline_cursor.png</file>
|
<file>cursor/spline_cursor.png</file>
|
||||||
|
<file>cursor/arc_cursor.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
BIN
cursor/arc_cursor.png
Normal file
BIN
cursor/arc_cursor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
|
@ -29,7 +29,7 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, QWidget *parent) :
|
||||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogAlongLine::PutVal);
|
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogAlongLine::PutVal);
|
||||||
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogAlongLine::ValChenged);
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogAlongLine::ValChenged);
|
||||||
|
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogAlongLine::SizeGrowth);
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogAlongLine::SizeGrowth);
|
||||||
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogAlongLine::StandartTable);
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogAlongLine::StandartTable);
|
||||||
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogAlongLine::Increments);
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogAlongLine::Increments);
|
||||||
|
|
189
dialogs/dialogarc.cpp
Normal file
189
dialogs/dialogarc.cpp
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
#include "dialogarc.h"
|
||||||
|
#include "ui_dialogarc.h"
|
||||||
|
#include "../container/calculator.h"
|
||||||
|
|
||||||
|
DialogArc::DialogArc(const VContainer *data, QWidget *parent) :
|
||||||
|
DialogTool(data, parent), ui(new Ui::DialogArc)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
flagRadius = false;
|
||||||
|
flagF1 = false;
|
||||||
|
flagF2 = false;
|
||||||
|
|
||||||
|
timerRadius = new QTimer(this);
|
||||||
|
connect(timerRadius, &QTimer::timeout, this, &DialogArc::EvalRadius);
|
||||||
|
|
||||||
|
timerF1 = new QTimer(this);
|
||||||
|
connect(timerF1, &QTimer::timeout, this, &DialogArc::EvalF1);
|
||||||
|
|
||||||
|
timerF2 = new QTimer(this);
|
||||||
|
connect(timerF2, &QTimer::timeout, this, &DialogArc::EvalF2);
|
||||||
|
|
||||||
|
bOk = ui->buttonBox->button(QDialogButtonBox::Ok);
|
||||||
|
connect(bOk, &QPushButton::clicked, this, &DialogArc::DialogAccepted);
|
||||||
|
|
||||||
|
QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel);
|
||||||
|
connect(bCansel, &QPushButton::clicked, this, &DialogArc::DialogRejected);
|
||||||
|
FillComboBoxPoints(ui->comboBoxBasePoint);
|
||||||
|
|
||||||
|
CheckState();
|
||||||
|
|
||||||
|
listWidget = ui->listWidget;
|
||||||
|
labelDescription = ui->labelDescription;
|
||||||
|
radioButtonSizeGrowth = ui->radioButtonSizeGrowth;
|
||||||
|
radioButtonStandartTable = ui->radioButtonStandartTable;
|
||||||
|
radioButtonIncrements = ui->radioButtonIncrements;
|
||||||
|
radioButtonLengthLine = ui->radioButtonLengthLine;
|
||||||
|
|
||||||
|
connect(ui->toolButtonPutHereRadius, &QPushButton::clicked, this, &DialogArc::PutRadius);
|
||||||
|
connect(ui->toolButtonPutHereF1, &QPushButton::clicked, this, &DialogArc::PutF1);
|
||||||
|
connect(ui->toolButtonPutHereF1, &QPushButton::clicked, this, &DialogArc::PutF1);
|
||||||
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogArc::ValChenged);
|
||||||
|
|
||||||
|
ShowVariable(data->DataBase());
|
||||||
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogArc::SizeGrowth);
|
||||||
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogArc::StandartTable);
|
||||||
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogArc::Increments);
|
||||||
|
connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogArc::LengthLines);
|
||||||
|
connect(ui->radioButtonLineArcs, &QRadioButton::clicked, this, &DialogArc::LineArcs);
|
||||||
|
|
||||||
|
connect(ui->toolButtonEqualRadius, &QPushButton::clicked, this, &DialogArc::EvalRadius);
|
||||||
|
connect(ui->toolButtonEqualF1, &QPushButton::clicked, this, &DialogArc::EvalF1);
|
||||||
|
connect(ui->toolButtonEqualF2, &QPushButton::clicked, this, &DialogArc::EvalF2);
|
||||||
|
|
||||||
|
connect(ui->lineEditRadius, &QLineEdit::textChanged, this, &DialogArc::RadiusChanged);
|
||||||
|
connect(ui->lineEditF1, &QLineEdit::textChanged, this, &DialogArc::F1Changed);
|
||||||
|
connect(ui->lineEditF2, &QLineEdit::textChanged, this, &DialogArc::F2Changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 DialogArc::GetCenter() const{
|
||||||
|
return center;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::GetCenter(const qint64 &value){
|
||||||
|
center = value;
|
||||||
|
ChangeCurrentData(ui->comboBoxBasePoint, center);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DialogArc::GetF2() const{
|
||||||
|
return f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::GetF2(const QString &value){
|
||||||
|
f2 = value;
|
||||||
|
ui->lineEditF2->setText(f2);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DialogArc::GetF1() const{
|
||||||
|
return f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::GetF1(const QString &value){
|
||||||
|
f1 = value;
|
||||||
|
ui->lineEditF1->setText(f1);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DialogArc::GetRadius() const{
|
||||||
|
return radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::GetRadius(const QString &value){
|
||||||
|
radius = value;
|
||||||
|
ui->lineEditRadius->setText(radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
DialogArc::~DialogArc(){
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::ChoosedObject(qint64 id, Scene::Type type){
|
||||||
|
if(type == Scene::Point){
|
||||||
|
VPointF point = data->GetPoint(id);
|
||||||
|
ChangeCurrentText(ui->comboBoxBasePoint, point.name());
|
||||||
|
this->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::DialogAccepted(){
|
||||||
|
radius = ui->lineEditRadius->text();
|
||||||
|
f1 = ui->lineEditF1->text();
|
||||||
|
f2 = ui->lineEditF2->text();
|
||||||
|
qint32 index = ui->comboBoxBasePoint->currentIndex();
|
||||||
|
center = qvariant_cast<qint64>(ui->comboBoxBasePoint->itemData(index));
|
||||||
|
emit DialogClosed(QDialog::Accepted);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::ValChenged(int row){
|
||||||
|
if(ui->listWidget->count() == 0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QListWidgetItem *item = ui->listWidget->item( row );
|
||||||
|
if(ui->radioButtonLineArcs->isChecked()){
|
||||||
|
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLineArc(item->text()))
|
||||||
|
.arg("Значення кута лінії.");
|
||||||
|
ui->labelDescription->setText(desc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DialogTool::ValChenged(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::PutRadius(){
|
||||||
|
PutValHere(ui->lineEditRadius, ui->listWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::PutF1(){
|
||||||
|
PutValHere(ui->lineEditF1, ui->listWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::PutF2(){
|
||||||
|
PutValHere(ui->lineEditF2, ui->listWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::LineArcs(){
|
||||||
|
ShowLineArcs();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::RadiusChanged(){
|
||||||
|
ValFormulaChanged(flagRadius, ui->lineEditRadius, timerRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::F1Changed(){
|
||||||
|
ValFormulaChanged(flagF1, ui->lineEditF1, timerF1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::F2Changed(){
|
||||||
|
ValFormulaChanged(flagF2, ui->lineEditF2, timerF2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::CheckState(){
|
||||||
|
Q_CHECK_PTR(bOk);
|
||||||
|
bOk->setEnabled(flagRadius & flagF1 & flagF2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::EvalRadius(){
|
||||||
|
Eval(ui->lineEditRadius, flagRadius, timerRadius, ui->labelResultRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::EvalF1(){
|
||||||
|
Eval(ui->lineEditF1, flagF1, timerF1, ui->labelResultF1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::EvalF2(){
|
||||||
|
Eval(ui->lineEditF2, flagF2, timerF2, ui->labelResultF2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogArc::ShowLineArcs(){
|
||||||
|
disconnect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogArc::ValChenged);
|
||||||
|
ui->listWidget->clear();
|
||||||
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogArc::ValChenged);
|
||||||
|
const QMap<QString, qreal> *lineArcsTable = data->DataLineArcs();
|
||||||
|
QMapIterator<QString, qreal> i(*lineArcsTable);
|
||||||
|
while (i.hasNext()) {
|
||||||
|
i.next();
|
||||||
|
QListWidgetItem *item = new QListWidgetItem(i.key());
|
||||||
|
|
||||||
|
item->setFont(QFont("Times", 12, QFont::Bold));
|
||||||
|
ui->listWidget->addItem(item);
|
||||||
|
}
|
||||||
|
ui->listWidget->setCurrentRow (0);
|
||||||
|
}
|
60
dialogs/dialogarc.h
Normal file
60
dialogs/dialogarc.h
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#ifndef DIALOGARC_H
|
||||||
|
#define DIALOGARC_H
|
||||||
|
|
||||||
|
#include "dialogtool.h"
|
||||||
|
#include "../container/vcontainer.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class DialogArc;
|
||||||
|
}
|
||||||
|
|
||||||
|
class DialogArc : public DialogTool
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DialogArc(const VContainer *data, QWidget *parent = 0);
|
||||||
|
~DialogArc();
|
||||||
|
qint64 GetCenter() const;
|
||||||
|
void GetCenter(const qint64 &value);
|
||||||
|
|
||||||
|
QString GetRadius() const;
|
||||||
|
void GetRadius(const QString &value);
|
||||||
|
|
||||||
|
QString GetF1() const;
|
||||||
|
void GetF1(const QString &value);
|
||||||
|
|
||||||
|
QString GetF2() const;
|
||||||
|
void GetF2(const QString &value);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void ChoosedObject(qint64 id, Scene::Type type);
|
||||||
|
virtual void DialogAccepted();
|
||||||
|
virtual void ValChenged(int row);
|
||||||
|
void PutRadius();
|
||||||
|
void PutF1();
|
||||||
|
void PutF2();
|
||||||
|
void LineArcs();
|
||||||
|
void RadiusChanged();
|
||||||
|
void F1Changed();
|
||||||
|
void F2Changed();
|
||||||
|
protected:
|
||||||
|
virtual void CheckState();
|
||||||
|
private:
|
||||||
|
Ui::DialogArc *ui;
|
||||||
|
bool flagRadius;
|
||||||
|
bool flagF1;
|
||||||
|
bool flagF2;
|
||||||
|
QTimer *timerRadius;
|
||||||
|
QTimer *timerF1;
|
||||||
|
QTimer *timerF2;
|
||||||
|
qint64 center;
|
||||||
|
QString radius;
|
||||||
|
QString f1;
|
||||||
|
QString f2;
|
||||||
|
void EvalRadius();
|
||||||
|
void EvalF1();
|
||||||
|
void EvalF2();
|
||||||
|
void ShowLineArcs();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DIALOGARC_H
|
419
dialogs/dialogarc.ui
Normal file
419
dialogs/dialogarc.ui
Normal file
|
@ -0,0 +1,419 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>DialogArc</class>
|
||||||
|
<widget class="QDialog" name="DialogArc">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>501</width>
|
||||||
|
<height>448</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Радіус</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEditRadius">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonPutHereRadius">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/putHereLeft.png</normaloff>:/icon/24x24/putHereLeft.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonEqualRadius">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/equal.png</normaloff>:/icon/24x24/equal.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelResultRadius">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>87</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>_</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Перший кут градус</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEditF1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonPutHereF1">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/putHereLeft.png</normaloff>:/icon/24x24/putHereLeft.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonEqualF1">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/equal.png</normaloff>:/icon/24x24/equal.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelResultF1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>87</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>_</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Другий кут градус</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEditF2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonPutHereF2">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/putHereLeft.png</normaloff>:/icon/24x24/putHereLeft.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButtonEqualF2">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icon.qrc">
|
||||||
|
<normaloff>:/icon/24x24/equal.png</normaloff>:/icon/24x24/equal.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelResultF2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>87</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>_</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Центр</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBoxBasePoint"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Вхідні данні</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonSizeGrowth">
|
||||||
|
<property name="text">
|
||||||
|
<string>Розмір і зріст</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonStandartTable">
|
||||||
|
<property name="text">
|
||||||
|
<string>Стандартна таблиця</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonIncrements">
|
||||||
|
<property name="text">
|
||||||
|
<string>Прибавки</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonLengthLine">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Довжини ліній</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonLengthArc">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Довжини дуг</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonLengthSpline">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Довжини сплайнів</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButtonLineArcs">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Кути ліній</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelDescription">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="../icon.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>DialogArc</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>DialogArc</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -30,7 +30,7 @@ DialogBisector::DialogBisector(const VContainer *data, QWidget *parent) :
|
||||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogBisector::PutVal);
|
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogBisector::PutVal);
|
||||||
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogBisector::ValChenged);
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogBisector::ValChenged);
|
||||||
|
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogBisector::SizeGrowth);
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogBisector::SizeGrowth);
|
||||||
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogBisector::StandartTable);
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogBisector::StandartTable);
|
||||||
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogBisector::Increments);
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogBisector::Increments);
|
||||||
|
|
|
@ -49,7 +49,7 @@ DialogEndLine::DialogEndLine(const VContainer *data, QWidget *parent) :
|
||||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogEndLine::PutVal);
|
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogEndLine::PutVal);
|
||||||
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogEndLine::ValChenged);
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogEndLine::ValChenged);
|
||||||
|
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogEndLine::SizeGrowth);
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogEndLine::SizeGrowth);
|
||||||
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogEndLine::StandartTable);
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogEndLine::StandartTable);
|
||||||
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogEndLine::Increments);
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogEndLine::Increments);
|
||||||
|
|
|
@ -47,7 +47,7 @@ DialogNormal::DialogNormal(const VContainer *data, QWidget *parent) :
|
||||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogNormal::PutVal);
|
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogNormal::PutVal);
|
||||||
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogNormal::ValChenged);
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogNormal::ValChenged);
|
||||||
|
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogNormal::SizeGrowth);
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogNormal::SizeGrowth);
|
||||||
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogNormal::StandartTable);
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogNormal::StandartTable);
|
||||||
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogNormal::Increments);
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogNormal::Increments);
|
||||||
|
|
|
@ -30,7 +30,7 @@ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, QWidget *parent
|
||||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogShoulderPoint::PutVal);
|
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogShoulderPoint::PutVal);
|
||||||
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogShoulderPoint::ValChenged);
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogShoulderPoint::ValChenged);
|
||||||
|
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogShoulderPoint::SizeGrowth);
|
connect(ui->radioButtonSizeGrowth, &QRadioButton::clicked, this, &DialogShoulderPoint::SizeGrowth);
|
||||||
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogShoulderPoint::StandartTable);
|
connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogShoulderPoint::StandartTable);
|
||||||
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogShoulderPoint::Increments);
|
connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogShoulderPoint::Increments);
|
||||||
|
|
|
@ -24,8 +24,7 @@ DialogTool::DialogTool(const VContainer *data, QWidget *parent):QDialog(parent){
|
||||||
radioButtonLengthLine = 0;
|
radioButtonLengthLine = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogTool::~DialogTool()
|
DialogTool::~DialogTool(){
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::closeEvent(QCloseEvent *event){
|
void DialogTool::closeEvent(QCloseEvent *event){
|
||||||
|
@ -38,12 +37,9 @@ void DialogTool::showEvent(QShowEvent *event){
|
||||||
if( event->spontaneous() ){
|
if( event->spontaneous() ){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isInitialized){
|
if(isInitialized){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// do your init stuff here
|
|
||||||
isInitialized = true;//перший показ вікна вже відбувся
|
isInitialized = true;//перший показ вікна вже відбувся
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,70 +67,6 @@ QString DialogTool::GetTypeLine(const QComboBox *box) const{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::ShowBase(){
|
|
||||||
Q_CHECK_PTR(listWidget);
|
|
||||||
disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
listWidget->clear();
|
|
||||||
connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
const QMap<QString, qint32> *base = data->DataBase();
|
|
||||||
QMapIterator<QString, qint32> i(*base);
|
|
||||||
while (i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
QListWidgetItem *item = new QListWidgetItem(i.key());
|
|
||||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
|
||||||
listWidget->addItem(item);
|
|
||||||
}
|
|
||||||
listWidget->setCurrentRow (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogTool::ShowStandartTable(){
|
|
||||||
Q_CHECK_PTR(listWidget);
|
|
||||||
disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
listWidget->clear();
|
|
||||||
connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
const QMap<QString, VStandartTableCell> *standartTable = data->DataStandartTable();
|
|
||||||
QMapIterator<QString, VStandartTableCell> i(*standartTable);
|
|
||||||
while (i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
QListWidgetItem *item = new QListWidgetItem(i.key());
|
|
||||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
|
||||||
listWidget->addItem(item);
|
|
||||||
}
|
|
||||||
listWidget->setCurrentRow (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogTool::ShowIncrementTable(){
|
|
||||||
Q_CHECK_PTR(listWidget);
|
|
||||||
disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
listWidget->clear();
|
|
||||||
connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
const QMap<QString, VIncrementTableRow> *incrementTable = data->DataIncrementTable();
|
|
||||||
QMapIterator<QString, VIncrementTableRow> i(*incrementTable);
|
|
||||||
while (i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
QListWidgetItem *item = new QListWidgetItem(i.key());
|
|
||||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
|
||||||
listWidget->addItem(item);
|
|
||||||
}
|
|
||||||
listWidget->setCurrentRow (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogTool::ShowLengthLines(){
|
|
||||||
Q_CHECK_PTR(listWidget);
|
|
||||||
disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
listWidget->clear();
|
|
||||||
connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
|
||||||
const QMap<QString, qreal> *linesTable = data->DataLengthLines();
|
|
||||||
QMapIterator<QString, qreal> i(*linesTable);
|
|
||||||
while (i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
QListWidgetItem *item = new QListWidgetItem(i.key());
|
|
||||||
item->setFont(QFont("Times", 12, QFont::Bold));
|
|
||||||
listWidget->addItem(item);
|
|
||||||
}
|
|
||||||
listWidget->setCurrentRow (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogTool::SetupTypeLine(QComboBox *box, const QString &value){
|
void DialogTool::SetupTypeLine(QComboBox *box, const QString &value){
|
||||||
if(value == "hair"){
|
if(value == "hair"){
|
||||||
qint32 index = box->findText("Лінія");
|
qint32 index = box->findText("Лінія");
|
||||||
|
@ -164,6 +96,47 @@ void DialogTool::ChangeCurrentData(QComboBox *box, const qint64 &value){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DialogTool::PutValHere(QLineEdit *lineEdit, QListWidget *listWidget){
|
||||||
|
Q_CHECK_PTR(lineEdit);
|
||||||
|
Q_CHECK_PTR(listWidget);
|
||||||
|
QListWidgetItem *item = listWidget->currentItem();
|
||||||
|
QString val = item->text();
|
||||||
|
lineEdit->setText(lineEdit->text().append(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer){
|
||||||
|
Q_CHECK_PTR(edit);
|
||||||
|
Q_CHECK_PTR(timer);
|
||||||
|
if(edit->text().isEmpty()){
|
||||||
|
flag = false;
|
||||||
|
CheckState();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
timer->start(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label){
|
||||||
|
Q_CHECK_PTR(edit);
|
||||||
|
Q_CHECK_PTR(timer);
|
||||||
|
Q_CHECK_PTR(label);
|
||||||
|
if(edit->text().isEmpty()){
|
||||||
|
flag = false;
|
||||||
|
} else {
|
||||||
|
Calculator cal(data);
|
||||||
|
QString errorMsg;
|
||||||
|
qreal result = cal.eval(edit->text(),&errorMsg);
|
||||||
|
if(!errorMsg.isEmpty()){
|
||||||
|
label->setText("Помилка.");
|
||||||
|
flag = false;
|
||||||
|
} else {
|
||||||
|
label->setText(QString().setNum(result));
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CheckState();
|
||||||
|
timer->stop();
|
||||||
|
}
|
||||||
|
|
||||||
void DialogTool::CheckState(){
|
void DialogTool::CheckState(){
|
||||||
Q_CHECK_PTR(bOk);
|
Q_CHECK_PTR(bOk);
|
||||||
bOk->setEnabled(flagFormula & flagName);
|
bOk->setEnabled(flagFormula & flagName);
|
||||||
|
@ -199,12 +172,7 @@ void DialogTool::DialogRejected(){
|
||||||
void DialogTool::FormulaChanged(){
|
void DialogTool::FormulaChanged(){
|
||||||
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
||||||
if(edit){
|
if(edit){
|
||||||
if(edit->text().isEmpty()){
|
ValFormulaChanged(flagFormula, edit, timerFormula);
|
||||||
flagFormula = false;
|
|
||||||
CheckState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
timerFormula->start(1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,46 +219,27 @@ void DialogTool::ArrowRightDown(){
|
||||||
void DialogTool::EvalFormula(){
|
void DialogTool::EvalFormula(){
|
||||||
Q_CHECK_PTR(lineEditFormula);
|
Q_CHECK_PTR(lineEditFormula);
|
||||||
Q_CHECK_PTR(labelResultCalculation);
|
Q_CHECK_PTR(labelResultCalculation);
|
||||||
if(lineEditFormula->text().isEmpty()){
|
Eval(lineEditFormula, flagFormula, timerFormula, labelResultCalculation);
|
||||||
flagFormula = false;
|
|
||||||
} else {
|
|
||||||
Calculator cal(data);
|
|
||||||
QString errorMsg;
|
|
||||||
qreal result = cal.eval(lineEditFormula->text(),&errorMsg);
|
|
||||||
if(!errorMsg.isEmpty()){
|
|
||||||
labelResultCalculation->setText("Помилка.");
|
|
||||||
flagFormula = false;
|
|
||||||
} else {
|
|
||||||
labelResultCalculation->setText(QString().setNum(result));
|
|
||||||
flagFormula = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CheckState();
|
|
||||||
timerFormula->stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::SizeGrowth(){
|
void DialogTool::SizeGrowth(){
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::StandartTable(){
|
void DialogTool::StandartTable(){
|
||||||
ShowStandartTable();
|
ShowVariable(data->DataStandartTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::LengthLines(){
|
void DialogTool::LengthLines(){
|
||||||
ShowLengthLines();
|
ShowVariable(data->DataLengthLines());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::Increments(){
|
void DialogTool::Increments(){
|
||||||
ShowIncrementTable();
|
ShowVariable(data->DataIncrementTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::PutHere(){
|
void DialogTool::PutHere(){
|
||||||
Q_CHECK_PTR(lineEditFormula);
|
PutValHere(lineEditFormula, listWidget);
|
||||||
Q_CHECK_PTR(listWidget);
|
|
||||||
QListWidgetItem *item = listWidget->currentItem();
|
|
||||||
QString val = item->text();
|
|
||||||
lineEditFormula->setText(lineEditFormula->text().append(val));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogTool::PutVal(QListWidgetItem *item){
|
void DialogTool::PutVal(QListWidgetItem *item){
|
||||||
|
@ -305,6 +254,7 @@ void DialogTool::ValChenged(int row){
|
||||||
Q_CHECK_PTR(radioButtonSizeGrowth);
|
Q_CHECK_PTR(radioButtonSizeGrowth);
|
||||||
Q_CHECK_PTR(radioButtonStandartTable);
|
Q_CHECK_PTR(radioButtonStandartTable);
|
||||||
Q_CHECK_PTR(radioButtonIncrements);
|
Q_CHECK_PTR(radioButtonIncrements);
|
||||||
|
Q_CHECK_PTR(radioButtonLengthLine);
|
||||||
if(listWidget->count() == 0){
|
if(listWidget->count() == 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -318,23 +268,27 @@ void DialogTool::ValChenged(int row){
|
||||||
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->size()).arg("Розмір");
|
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->size()).arg("Розмір");
|
||||||
labelDescription->setText(desc);
|
labelDescription->setText(desc);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if(radioButtonStandartTable->isChecked()){
|
if(radioButtonStandartTable->isChecked()){
|
||||||
VStandartTableCell stable = data->GetStandartTableCell(item->text());
|
VStandartTableCell stable = data->GetStandartTableCell(item->text());
|
||||||
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueStandartTableCell(item->text()))
|
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueStandartTableCell(item->text()))
|
||||||
.arg(stable.GetDescription());
|
.arg(stable.GetDescription());
|
||||||
labelDescription->setText(desc);
|
labelDescription->setText(desc);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if(radioButtonIncrements->isChecked()){
|
if(radioButtonIncrements->isChecked()){
|
||||||
VIncrementTableRow itable = data->GetIncrementTableRow(item->text());
|
VIncrementTableRow itable = data->GetIncrementTableRow(item->text());
|
||||||
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueIncrementTableRow(item->text()))
|
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueIncrementTableRow(item->text()))
|
||||||
.arg(itable.getDescription());
|
.arg(itable.getDescription());
|
||||||
labelDescription->setText(desc);
|
labelDescription->setText(desc);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if(radioButtonLengthLine->isChecked()){
|
if(radioButtonLengthLine->isChecked()){
|
||||||
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLine(item->text()))
|
QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLine(item->text()))
|
||||||
.arg("Довжина лінії");
|
.arg("Довжина лінії");
|
||||||
labelDescription->setText(desc);
|
labelDescription->setText(desc);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,12 +297,28 @@ void DialogTool::UpdateList(){
|
||||||
Q_CHECK_PTR(radioButtonStandartTable);
|
Q_CHECK_PTR(radioButtonStandartTable);
|
||||||
Q_CHECK_PTR(radioButtonIncrements);
|
Q_CHECK_PTR(radioButtonIncrements);
|
||||||
if(radioButtonSizeGrowth->isChecked()){
|
if(radioButtonSizeGrowth->isChecked()){
|
||||||
ShowBase();
|
ShowVariable(data->DataBase());
|
||||||
}
|
}
|
||||||
if(radioButtonStandartTable->isChecked()){
|
if(radioButtonStandartTable->isChecked()){
|
||||||
ShowStandartTable();
|
ShowVariable(data->DataStandartTable());
|
||||||
}
|
}
|
||||||
if(radioButtonIncrements->isChecked()){
|
if(radioButtonIncrements->isChecked()){
|
||||||
ShowIncrementTable();
|
ShowVariable(data->DataIncrementTable());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export template <class key, class val>
|
||||||
|
void DialogTool::ShowVariable(const QMap<key, val> *var){
|
||||||
|
Q_CHECK_PTR(listWidget);
|
||||||
|
disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
||||||
|
listWidget->clear();
|
||||||
|
connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged);
|
||||||
|
QMapIterator<key, val> i(*var);
|
||||||
|
while (i.hasNext()) {
|
||||||
|
i.next();
|
||||||
|
QListWidgetItem *item = new QListWidgetItem(i.key());
|
||||||
|
item->setFont(QFont("Times", 12, QFont::Bold));
|
||||||
|
listWidget->addItem(item);
|
||||||
|
}
|
||||||
|
listWidget->setCurrentRow (0);
|
||||||
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public slots:
|
||||||
void Increments();
|
void Increments();
|
||||||
void PutHere();
|
void PutHere();
|
||||||
void PutVal(QListWidgetItem * item);
|
void PutVal(QListWidgetItem * item);
|
||||||
void ValChenged(int row);
|
virtual void ValChenged(int row);
|
||||||
void UpdateList();
|
void UpdateList();
|
||||||
protected:
|
protected:
|
||||||
const VContainer *data;
|
const VContainer *data;
|
||||||
|
@ -66,13 +66,13 @@ protected:
|
||||||
void FillComboBoxTypeLine(QComboBox *box) const;
|
void FillComboBoxTypeLine(QComboBox *box) const;
|
||||||
virtual void CheckState();
|
virtual void CheckState();
|
||||||
QString GetTypeLine(const QComboBox *box)const;
|
QString GetTypeLine(const QComboBox *box)const;
|
||||||
void ShowBase();
|
template <class key, class val> void ShowVariable(const QMap<key, val> *var);
|
||||||
void ShowStandartTable();
|
|
||||||
void ShowIncrementTable();
|
|
||||||
void ShowLengthLines();
|
|
||||||
void SetupTypeLine(QComboBox *box, const QString &value);
|
void SetupTypeLine(QComboBox *box, const QString &value);
|
||||||
void ChangeCurrentText(QComboBox *box, const QString &value);
|
void ChangeCurrentText(QComboBox *box, const QString &value);
|
||||||
void ChangeCurrentData(QComboBox *box, const qint64 &value);
|
void ChangeCurrentData(QComboBox *box, const qint64 &value);
|
||||||
|
void PutValHere(QLineEdit *lineEdit, QListWidget *listWidget);
|
||||||
|
void ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer * timer);
|
||||||
|
void Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DIALOGTOOL_H
|
#endif // DIALOGTOOL_H
|
||||||
|
|
|
@ -5,36 +5,55 @@
|
||||||
|
|
||||||
VArc::VArc (){
|
VArc::VArc (){
|
||||||
f1 = 0;
|
f1 = 0;
|
||||||
|
formulaF1 = QString();
|
||||||
f2 = 0;
|
f2 = 0;
|
||||||
length = 0;
|
formulaF2 = QString();
|
||||||
radius = 0;
|
radius = 0;
|
||||||
|
formulaRadius = QString();
|
||||||
center = 0;
|
center = 0;
|
||||||
p1 = QPointF( 0, 0 );
|
|
||||||
p2 = QPointF( 0, 0 );
|
|
||||||
points = 0;
|
points = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
VArc::VArc (const QMap<qint64, VPointF> *points, qint64 center, qreal radius, qreal f1, qreal f2 ){
|
VArc::VArc (const QMap<qint64, VPointF> *points, qint64 center, qreal radius, QString formulaRadius,
|
||||||
|
qreal f1, QString formulaF1, qreal f2, QString formulaF2 ){
|
||||||
this->points = points;
|
this->points = points;
|
||||||
ModifiArc( center, radius, f1, f2 );
|
this->f1 = f1;
|
||||||
|
this->formulaF1 = formulaF1;
|
||||||
|
this->f2 = f2;
|
||||||
|
this->formulaF2 = formulaF2;
|
||||||
|
this->radius = radius;
|
||||||
|
this->formulaRadius = formulaRadius;
|
||||||
|
this->center = center;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal VArc::GetF1 () const{
|
qreal VArc::GetF1() const{
|
||||||
return f1;
|
return f1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal VArc::GetF2 () const{
|
QString VArc::GetFormulaF1() const{
|
||||||
|
return formulaF1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qreal VArc::GetF2() const{
|
||||||
return f2;
|
return f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal VArc::GetLength () const{
|
QString VArc::GetFormulaF2() const{
|
||||||
return length;
|
return formulaF2;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal VArc::GetRadius () const{
|
qreal VArc::GetLength () const{
|
||||||
|
return M_PI * radius/180 * (f2-f1);
|
||||||
|
}
|
||||||
|
|
||||||
|
qreal VArc::GetRadius() const{
|
||||||
return radius;
|
return radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VArc::GetFormulaRadius() const{
|
||||||
|
return formulaRadius;
|
||||||
|
}
|
||||||
|
|
||||||
qint64 VArc::GetCenter() const{
|
qint64 VArc::GetCenter() const{
|
||||||
return center;
|
return center;
|
||||||
}
|
}
|
||||||
|
@ -50,245 +69,30 @@ QPointF VArc::GetCenterPoint() const{
|
||||||
}
|
}
|
||||||
|
|
||||||
QPointF VArc::GetP1() const{
|
QPointF VArc::GetP1() const{
|
||||||
return p1;
|
QPointF p1 ( GetCenterPoint().x () + radius, GetCenterPoint().y () );
|
||||||
|
QLineF centerP1(GetCenterPoint(), p1);
|
||||||
|
centerP1.setAngle(f1);
|
||||||
|
return centerP1.p2();
|
||||||
}
|
}
|
||||||
|
|
||||||
QPointF VArc::GetP2 () const{
|
QPointF VArc::GetP2 () const{
|
||||||
return p2;
|
QPointF p2 ( GetCenterPoint().x () + radius, GetCenterPoint().y () );
|
||||||
|
QLineF centerP2(GetCenterPoint(), p2);
|
||||||
|
centerP2.setAngle(f2);
|
||||||
|
return centerP2.p2();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QMap<qint64, VPointF> *VArc::GetDataPoints() const{
|
const QMap<qint64, VPointF> *VArc::GetDataPoints() const{
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VArc::ModifiArc (qint64 center, qreal radius, qreal f1, qreal f2 ){
|
|
||||||
this->f1 = f1;
|
|
||||||
this->f2 = f2;
|
|
||||||
this->radius = radius;
|
|
||||||
this->center = center;
|
|
||||||
QPointF p1 ( GetCenterPoint().x () + radius, GetCenterPoint().y () );
|
|
||||||
QLineF centerP1(GetCenterPoint(), p1);
|
|
||||||
centerP1.setAngle(f1);
|
|
||||||
p1 = centerP1.p2();
|
|
||||||
QPointF p2 ( GetCenterPoint().x () + radius, GetCenterPoint().y () );
|
|
||||||
QLineF centerP2(GetCenterPoint(), p2);
|
|
||||||
centerP2.setAngle(f2);
|
|
||||||
p2 = centerP2.p2();
|
|
||||||
this->p1 = p1;
|
|
||||||
this->p2 = p2;
|
|
||||||
// визначимо довжину дуги за формулою.
|
|
||||||
// МОЖЛИВО НЕ ПРАВИЛЬНО. ПОТРІБНО ПЕРЕВІРИТИ ФОРМУЛУ, ОСКІЛЬКИ КУТ ПОВЕРТАЄТЬСЯ В ГРАДУСАХ!!!!!
|
|
||||||
//qreal ang = AngleArc ( f1, f2 ) ;
|
|
||||||
qreal ang = centerP1.angleTo(centerP2);
|
|
||||||
this->length = ang * radius * M_PI/180;
|
|
||||||
//qDebug()<<"ang = "<<ang<<"length ="<<length;
|
|
||||||
}
|
|
||||||
|
|
||||||
//void VArc::BiasArc ( qreal mx, qreal my ){
|
|
||||||
// this->center = QPointF( center.x()+mx, center.y()+my );
|
|
||||||
// this->p1 = QPointF( p1.x()+mx, p1.y()+my );
|
|
||||||
// this->p2 = QPointF( p2.x()+mx, p2.y()+my );
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void VArc::RotationArc (QPointF pRotate, qreal angle ){
|
|
||||||
// QLineF pRotateCenter( pRotate, center );
|
|
||||||
// pRotateCenter.setAngle( angle );
|
|
||||||
// center = pRotateCenter.p2();
|
|
||||||
// QLineF pRotateP1( pRotate, p1 );
|
|
||||||
// pRotateP1.setAngle( angle );
|
|
||||||
// p1 = pRotateP1.p2();
|
|
||||||
// QLineF pRotateP2( pRotate, p2 );
|
|
||||||
// pRotateP2.setAngle( angle );
|
|
||||||
// p2 = pRotateP2.p2();
|
|
||||||
// QLineF centerP1 ( center, p1 );
|
|
||||||
// QLineF centerP2 ( center, p2 );
|
|
||||||
// f1 = centerP1.angle();
|
|
||||||
// f2 = centerP2.angle();
|
|
||||||
//}
|
|
||||||
|
|
||||||
VSpline VArc::SplOfArc ( qint32 number ) const{
|
|
||||||
qint32 n = NumberSplOfArc ();
|
|
||||||
if( number > n ){
|
|
||||||
throw "Дуга не складається з такої кількості сплайнів.";
|
|
||||||
}
|
|
||||||
qreal f1 = GetF1 ();
|
|
||||||
qreal f2 = GetF2 ();
|
|
||||||
qint32 i;
|
|
||||||
for ( i = 0; i < n; ++i ){
|
|
||||||
if ( i == n - 1 ){
|
|
||||||
f2 = GetF2 ();
|
|
||||||
} else {
|
|
||||||
if ( f1 + 90 > 360 ){
|
|
||||||
f2 = f1 + 90 - 360;
|
|
||||||
} else {
|
|
||||||
f2 = f1 + 90;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qreal anglF1, anglF2;
|
|
||||||
if ( f1 + 90 > 360 ){
|
|
||||||
anglF1 = f1 + 90 - 360 ;
|
|
||||||
} else {
|
|
||||||
anglF1 = f1 + 90 ;
|
|
||||||
}
|
|
||||||
if ( f2 - 90 < 0 ){
|
|
||||||
anglF2 = 360 + f2 - 90 ;
|
|
||||||
} else {
|
|
||||||
anglF2 = f2 - 90 ;
|
|
||||||
}
|
|
||||||
if ( i + 1 == number ){
|
|
||||||
// return VSpline (GetDataPoints(), GetP1 (), GetP2 (), anglF1, anglF2, 1., 1., 1. );
|
|
||||||
f1 = f2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return VSpline();
|
|
||||||
}
|
|
||||||
|
|
||||||
//void VArc::CutArc ( qreal length, VArc &arcFir, VArc &arcSec ) const{
|
|
||||||
// if ( length > GetLength () ){
|
|
||||||
// qDebug()<<"Не правильна довжина дуги/n";
|
|
||||||
// exit(-1);
|
|
||||||
// }
|
|
||||||
// qreal angle;
|
|
||||||
// angle = GetF1 () + (length * 180) / (radius * M_PI);
|
|
||||||
// arcFir.ModifiArc ( GetCenter (), GetRadius (), GetF1 (), angle );
|
|
||||||
// arcSec.ModifiArc ( GetCenter (), GetRadius (), angle, GetF2 () );
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void VArc::CutArc ( QPointF point, VArc &arcFir, VArc &arcSec ) const{
|
|
||||||
// VArc arc = VArc(center,radius, f1, QLineF(center, point).angle());
|
|
||||||
// if(this->length<arc.GetLength()){
|
|
||||||
// throw"Не можу розрізати дугу. Не правильна точка.";
|
|
||||||
// } else {
|
|
||||||
// CutArc ( arc.GetLength(), arcFir, arcSec );
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
QLineF::IntersectType VArc::CrossingArcLine ( const QLineF &line, QPointF *intersectionPoint ) const{
|
|
||||||
qint32 i, n;
|
|
||||||
QLineF::IntersectType type = QLineF::NoIntersection;
|
|
||||||
n = NumberSplOfArc ();
|
|
||||||
for ( i = 0; i < n; ++i ){
|
|
||||||
VSpline curve = SplOfArc ( i + 1 );
|
|
||||||
QPointF crosPoint;
|
|
||||||
type = curve.CrossingSplLine ( line, &crosPoint );
|
|
||||||
if ( type == QLineF::BoundedIntersection ){
|
|
||||||
*intersectionPoint = crosPoint;
|
|
||||||
return type;
|
|
||||||
} else{
|
|
||||||
if ( type == QLineF::NoIntersection || type == QLineF::UnboundedIntersection ){
|
|
||||||
throw "Не можу знайти точку перетину сплайну з лінією.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qint32 VArc::NumberSplOfArc () const{
|
|
||||||
qint32 angArc = ( qint32 ) AngleArc ( GetF1 (), GetF2 () );
|
|
||||||
switch( angArc ){
|
|
||||||
case 0:
|
|
||||||
throw "Кут дуги не може бути 0 градусів.";
|
|
||||||
break;
|
|
||||||
case 90:
|
|
||||||
return 1;
|
|
||||||
case 180:
|
|
||||||
return 2;
|
|
||||||
case 270:
|
|
||||||
return 3;
|
|
||||||
case 360:
|
|
||||||
return 4;
|
|
||||||
default :
|
|
||||||
return ( qint32 ) AngleArc ( GetF1 (), GetF2 () ) / 90 + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qreal VArc::AngleArc( qreal f1, qreal f2 ) const{
|
|
||||||
QLineF normal = QLineF( 0, 0, 100, 0 );
|
|
||||||
normal.setAngle(f1);
|
|
||||||
QLineF normal2 = QLineF( 0, 0, 100, 0 );
|
|
||||||
normal2.setAngle(f2);
|
|
||||||
return normal.angleTo(normal2);
|
|
||||||
}
|
|
||||||
|
|
||||||
QPainterPath VArc::GetPath() const{
|
QPainterPath VArc::GetPath() const{
|
||||||
QPainterPath Path;
|
QPainterPath Path;
|
||||||
qint32 numberSpl = NumberSplOfArc();
|
QPointF center = GetCenterPoint();
|
||||||
for(qint32 i = 1; i <= numberSpl; ++i){
|
QRectF rect(center.x()-radius, center.y()-radius, radius*2, radius*2);
|
||||||
VSpline spl = SplOfArc ( i );
|
Path.moveTo(GetP1());
|
||||||
Path.addPath( spl.GetPath() );
|
qreal angle = QLineF(center, GetP1()).angleTo(QLineF(center, GetP2()));
|
||||||
}
|
Path.arcTo(rect, GetF1(), angle);
|
||||||
return Path;
|
return Path;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<QPointF> VArc::GetPoints () const{
|
|
||||||
QVector<QPointF> points;
|
|
||||||
qint32 numberSpl = NumberSplOfArc();
|
|
||||||
for(qint32 i = 1; i <= numberSpl; ++i){
|
|
||||||
VSpline spl = SplOfArc ( i );
|
|
||||||
points<<spl.GetPoints();
|
|
||||||
}
|
|
||||||
return points;
|
|
||||||
}
|
|
||||||
|
|
||||||
QPointF VArc::Tangent(const QPointF P, Tangent_e tan)const{
|
|
||||||
QLineF CP = QLineF(GetCenterPoint(),P);
|
|
||||||
CP.setLength(CP.length()/2);
|
|
||||||
QPointF O = CP.p2();
|
|
||||||
QLineF CO = QLineF(GetCenterPoint(),O);
|
|
||||||
qreal d = CO.length();
|
|
||||||
if ( d > GetRadius() + CO.length() ){
|
|
||||||
throw"Немає перетину кіл для знаходження дотичних.";
|
|
||||||
}
|
|
||||||
if ( d < qAbs(GetRadius() - CO.length()) ){
|
|
||||||
throw"Не можу знайти дотичну. Одне коло знаходиться в іншому.";
|
|
||||||
}
|
|
||||||
qreal a = (pow(GetRadius(),2) - pow(CO.length(),2) + pow(d,2) ) / (2*d);
|
|
||||||
qreal h = sqrt(pow(GetRadius(),2) - pow(a,2));
|
|
||||||
qreal x2 = GetCenterPoint().x() + a * (O.x() - GetCenterPoint().x())/d;
|
|
||||||
qreal y2 = GetCenterPoint().y() + a * (O.y() - GetCenterPoint().y())/d;
|
|
||||||
if(tan == VArc::FirstTangent){
|
|
||||||
qreal x3 = x2 - h * ( O.y() - GetCenterPoint().y() ) / d;
|
|
||||||
qreal y3 = y2 + h * ( O.x() - GetCenterPoint().x() ) / d;
|
|
||||||
return QPointF(x3,y3);
|
|
||||||
} else {
|
|
||||||
qreal x3 = x2 + h * ( O.y() - GetCenterPoint().y() ) / d;
|
|
||||||
qreal y3 = y2 - h * ( O.x() - GetCenterPoint().x() ) / d;
|
|
||||||
return QPointF(x3,y3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VArc::Contains(const QPointF P)const{
|
|
||||||
QVector<QPointF> points = GetPoints ();
|
|
||||||
for(qint32 i=0; i< points.size();++i){
|
|
||||||
if((qint32)points[i].x()==(qint32)P.x() && (qint32)points[i].y()==(qint32)P.y()){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QPointF VArc::PutAlongArc(qreal length) const{
|
|
||||||
if(GetLength()<length){
|
|
||||||
throw"Довжина дуги менше заданої довжини";
|
|
||||||
} else {
|
|
||||||
qreal n = (length*180)/(M_PI*GetRadius());
|
|
||||||
QLineF CP1 = QLineF(GetCenterPoint(),GetP1());
|
|
||||||
CP1.setAngle(CP1.angle()+n);
|
|
||||||
return CP1.p2();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//void VArc::Mirror(const QPointF Pmirror){
|
|
||||||
// QPointF Center = center;
|
|
||||||
// Center = QPointF(Center.x() - Pmirror.x(), Center.y() - Pmirror.y());
|
|
||||||
// Center = QPointF(Center.x() * -1.0, Center.y() * 1.0);
|
|
||||||
// Center = QPointF(Center.x() + Pmirror.x(), Center.y() + Pmirror.y());
|
|
||||||
// QPointF P1 = p1;
|
|
||||||
// P1 = QPointF(P1.x() - Pmirror.x(), P1.y() - Pmirror.y());
|
|
||||||
// P1 = QPointF(P1.x() * -1.0, P1.y() * 1.0);
|
|
||||||
// P1 = QPointF(P1.x() + Pmirror.x(), P1.y() + Pmirror.y());
|
|
||||||
// QPointF P2 = p2;
|
|
||||||
// P2 = QPointF(P2.x() - Pmirror.x(), P2.y() - Pmirror.y());
|
|
||||||
// P2 = QPointF(P2.x() * -1.0, P2.y() * 1.0);
|
|
||||||
// P2 = QPointF(P2.x() + Pmirror.x(), P2.y() + Pmirror.y());
|
|
||||||
// this->ModifiArc ( Center, radius, QLineF(Center,P2).angle(), QLineF(Center,P1).angle() );
|
|
||||||
//}
|
|
||||||
|
|
113
geometry/varc.h
113
geometry/varc.h
|
@ -1,7 +1,6 @@
|
||||||
#ifndef VARC_H
|
#ifndef VARC_H
|
||||||
#define VARC_H
|
#define VARC_H
|
||||||
|
|
||||||
#include "vspline.h"
|
|
||||||
#include <QPainterPath>
|
#include <QPainterPath>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
@ -12,7 +11,6 @@
|
||||||
*/
|
*/
|
||||||
class VArc{
|
class VArc{
|
||||||
public:
|
public:
|
||||||
enum Tangent_e { FirstTangent, SecondTangent };
|
|
||||||
/**
|
/**
|
||||||
* @brief VArc конструктор по замовчуванню.
|
* @brief VArc конструктор по замовчуванню.
|
||||||
*/
|
*/
|
||||||
|
@ -24,17 +22,19 @@ public:
|
||||||
* @param f1 початковий кут в градусах.
|
* @param f1 початковий кут в градусах.
|
||||||
* @param f2 кінцевий кут в градусах.
|
* @param f2 кінцевий кут в градусах.
|
||||||
*/
|
*/
|
||||||
VArc ( const QMap<qint64, VPointF> *points, qint64 center, qreal radius, qreal f1,
|
VArc (const QMap<qint64, VPointF> *points, qint64 center, qreal radius, QString formulaRadius,
|
||||||
qreal f2 );
|
qreal f1, QString formulaF1, qreal f2 , QString formulaF2);
|
||||||
/**
|
/**
|
||||||
* @brief GetF1 повертає початковий кут дуги.
|
* @brief GetF1 повертає початковий кут дуги.
|
||||||
* @return повертає кут в градусах.
|
* @return повертає кут в градусах.
|
||||||
*/
|
*/
|
||||||
|
QString GetFormulaF1 () const;
|
||||||
qreal GetF1 () const;
|
qreal GetF1 () const;
|
||||||
/**
|
/**
|
||||||
* @brief GetF2 повертає кінцевий кут дуги.
|
* @brief GetF2 повертає кінцевий кут дуги.
|
||||||
* @return повертає кут в градусах.
|
* @return повертає кут в градусах.
|
||||||
*/
|
*/
|
||||||
|
QString GetFormulaF2 () const;\
|
||||||
qreal GetF2 () const;
|
qreal GetF2 () const;
|
||||||
/**
|
/**
|
||||||
* @brief GetLength повертає довжину дуги.
|
* @brief GetLength повертає довжину дуги.
|
||||||
|
@ -45,6 +45,7 @@ public:
|
||||||
* @brief GetRadius повертає радіус дуги.
|
* @brief GetRadius повертає радіус дуги.
|
||||||
* @return повертає радіус дуги.
|
* @return повертає радіус дуги.
|
||||||
*/
|
*/
|
||||||
|
QString GetFormulaRadius () const;
|
||||||
qreal GetRadius () const;
|
qreal GetRadius () const;
|
||||||
/**
|
/**
|
||||||
* @brief GetCenter повертає точку центра дуги.
|
* @brief GetCenter повертає точку центра дуги.
|
||||||
|
@ -63,130 +64,32 @@ public:
|
||||||
*/
|
*/
|
||||||
QPointF GetP2 () const;
|
QPointF GetP2 () const;
|
||||||
const QMap<qint64, VPointF> *GetDataPoints() const;
|
const QMap<qint64, VPointF> *GetDataPoints() const;
|
||||||
/**
|
|
||||||
* @brief ModifiArc змінює параметри дуги.
|
|
||||||
* @param center новий центр дуги.
|
|
||||||
* @param radius новий радіус дуги.
|
|
||||||
* @param f1 новий початковий кут в градусах.
|
|
||||||
* @param f2 новий кінцевий кут в градусах.
|
|
||||||
*/
|
|
||||||
void ModifiArc (qint64 center, qreal radius, qreal f1, qreal f2 );
|
|
||||||
/**
|
|
||||||
* @brief BiasArc зміщує дугу.
|
|
||||||
* @param mx зміщення по х координаті.
|
|
||||||
* @param my зміщення по у координаті.
|
|
||||||
*/
|
|
||||||
// void BiasArc ( qreal mx, qreal my );
|
|
||||||
/**
|
|
||||||
* @brief RotationArc повертає дугу на кут проти годиникової стрілки відносно точки.
|
|
||||||
* @param pRotate точка відносно якої повертається.
|
|
||||||
* @param angle кут в градусах на який повертається в градусах.
|
|
||||||
*/
|
|
||||||
// void RotationArc ( QPointF pRotate, qreal angle );
|
|
||||||
/**
|
|
||||||
* @brief SplOfArc повертає сплайн дуги за номером.
|
|
||||||
* @param number номер сплайна в дузі.
|
|
||||||
* @return сплайн.
|
|
||||||
*/
|
|
||||||
VSpline SplOfArc ( qint32 number ) const;
|
|
||||||
/**
|
|
||||||
* @brief CutArc розрізає дугу на дві дуги.
|
|
||||||
* @param length довжина першої дуги.
|
|
||||||
* @param arcFir перша дуга.
|
|
||||||
* @param arcSec друга дуга.
|
|
||||||
*/
|
|
||||||
// void CutArc ( qreal length, VArc &arcFir, VArc &arcSec ) const;
|
|
||||||
/**
|
|
||||||
* @brief CutArc розрізає дугу на дві дуги.
|
|
||||||
* @param point точка яка ділить дугу.
|
|
||||||
* @param arcFir перша дуга.
|
|
||||||
* @param arcSec друга дуга.
|
|
||||||
*/
|
|
||||||
// void CutArc ( QPointF point, VArc &arcFir, VArc &arcSec ) const;
|
|
||||||
/**
|
|
||||||
* @brief CrossingArcLine перевіряє перетин дуги і лінії.
|
|
||||||
* @param line лінія з якою шукаємо перетин.
|
|
||||||
* @param intersectionPoint точка перетину.
|
|
||||||
* @return результат перевірки на перетин.
|
|
||||||
*/
|
|
||||||
QLineF::IntersectType CrossingArcLine(const QLineF &line, QPointF *intersectionPoint) const;
|
|
||||||
/**
|
|
||||||
* @brief NumberSplOfArc метод шукає кілкість сплайнів які необхідні для відтворення такої дуги.
|
|
||||||
* @return кількість сплайнів.
|
|
||||||
*/
|
|
||||||
qint32 NumberSplOfArc () const;
|
|
||||||
/**
|
/**
|
||||||
* @brief GetPath будує шлях по даній дузі.
|
* @brief GetPath будує шлях по даній дузі.
|
||||||
* @return повертає шлях.
|
* @return повертає шлях.
|
||||||
*/
|
*/
|
||||||
QPainterPath GetPath() const;
|
QPainterPath GetPath() const;
|
||||||
/**
|
|
||||||
* @brief GetPoints повертає набір точок по яких можна побудувати дугу.
|
|
||||||
* @return набір точок дуги.
|
|
||||||
*/
|
|
||||||
QVector<QPointF>
|
|
||||||
GetPoints () const;
|
|
||||||
/**
|
|
||||||
* @brief Tangent розраховує дотичну до дуги.
|
|
||||||
* @param P точка через, що не належить дузі, через яку проходить дотична.
|
|
||||||
* @param tan перша чи друга дотична.
|
|
||||||
* @return точку дотичної на дузі.
|
|
||||||
*/
|
|
||||||
QPointF Tangent(const QPointF P,VArc::Tangent_e tan = VArc::FirstTangent)const;
|
|
||||||
/**
|
|
||||||
* @brief Contains перевіряє чи точка належить дузі.
|
|
||||||
* @param P точка що перевіряється.
|
|
||||||
* @return true - належить дузі, false - не належить дузі.
|
|
||||||
*/
|
|
||||||
bool Contains(const QPointF P)const;
|
|
||||||
/**
|
|
||||||
* @brief PutAlongArc розміщує точку на дузі.
|
|
||||||
* @param length довжина від початку дуги.
|
|
||||||
* @return точка що лежить на дузі.
|
|
||||||
*/
|
|
||||||
QPointF PutAlongArc(qreal length) const;
|
|
||||||
/**
|
|
||||||
* @brief Mirror дзеркальне відображення дуги.
|
|
||||||
* @param Pmirror точка відносно якої відбувається дзеркалення.
|
|
||||||
*/
|
|
||||||
// void Mirror(const QPointF Pmirror);
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief f1 початковий кут в градусах
|
* @brief f1 початковий кут в градусах
|
||||||
*/
|
*/
|
||||||
qreal f1; // початковий кут нахилу дуги (градуси)
|
qreal f1; // початковий кут нахилу дуги (градуси)
|
||||||
|
QString formulaF1;
|
||||||
/**
|
/**
|
||||||
* @brief f2 кінцевий кут в градусах
|
* @brief f2 кінцевий кут в градусах
|
||||||
*/
|
*/
|
||||||
qreal f2; // кінцевий кут нахилу дуги (градуси)
|
qreal f2; // кінцевий кут нахилу дуги (градуси)
|
||||||
/**
|
QString formulaF2;
|
||||||
* @brief length довжина дуги.
|
|
||||||
*/
|
|
||||||
qreal length; // довжина дуги
|
|
||||||
/**
|
/**
|
||||||
* @brief radius радіус дуги.
|
* @brief radius радіус дуги.
|
||||||
*/
|
*/
|
||||||
qreal radius;
|
qreal radius;
|
||||||
|
QString formulaRadius;
|
||||||
/**
|
/**
|
||||||
* @brief center центральна точка дуги.
|
* @brief center центральна точка дуги.
|
||||||
*/
|
*/
|
||||||
qint64 center;
|
qint64 center;
|
||||||
/**
|
|
||||||
* @brief p1 точка початку побудови дуги.
|
|
||||||
*/
|
|
||||||
QPointF p1;
|
|
||||||
/**
|
|
||||||
* @brief p2 кінцева точка побудови дуги.
|
|
||||||
*/
|
|
||||||
QPointF p2;
|
|
||||||
const QMap<qint64, VPointF> *points;
|
const QMap<qint64, VPointF> *points;
|
||||||
/**
|
|
||||||
* @brief AngleArc визначає кут дуги.
|
|
||||||
* @param f1 початковий кут дуги в градусах.
|
|
||||||
* @param f2 кінцевий кут в градусах.
|
|
||||||
* @return повертає кут в градусах.
|
|
||||||
*/
|
|
||||||
qreal AngleArc(qreal f1, qreal f2 ) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VARC_H
|
#endif // VARC_H
|
||||||
|
|
2
icon.qrc
2
icon.qrc
|
@ -26,5 +26,7 @@
|
||||||
<file>icon/32x32/bisector.png</file>
|
<file>icon/32x32/bisector.png</file>
|
||||||
<file>icon/32x32/intersect.png</file>
|
<file>icon/32x32/intersect.png</file>
|
||||||
<file>icon/32x32/spline.png</file>
|
<file>icon/32x32/spline.png</file>
|
||||||
|
<file>icon/32x32/arc.png</file>
|
||||||
|
<file>icon/24x24/putHereLeft.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
BIN
icon/24x24/putHereLeft.png
Normal file
BIN
icon/24x24/putHereLeft.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
icon/32x32/arc.png
Normal file
BIN
icon/32x32/arc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 441 B |
|
@ -19,6 +19,7 @@
|
||||||
#include "tools/vtoolbisector.h"
|
#include "tools/vtoolbisector.h"
|
||||||
#include "tools/vtoollineintersect.h"
|
#include "tools/vtoollineintersect.h"
|
||||||
#include "tools/vtoolspline.h"
|
#include "tools/vtoolspline.h"
|
||||||
|
#include "tools/vtoolarc.h"
|
||||||
#include "geometry/vspline.h"
|
#include "geometry/vspline.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
|
@ -65,6 +66,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
&MainWindow::ToolLineIntersect);
|
&MainWindow::ToolLineIntersect);
|
||||||
connect(ui->toolButtonSpline, &QToolButton::clicked, this,
|
connect(ui->toolButtonSpline, &QToolButton::clicked, this,
|
||||||
&MainWindow::ToolSpline);
|
&MainWindow::ToolSpline);
|
||||||
|
connect(ui->toolButtonArc, &QToolButton::clicked, this,
|
||||||
|
&MainWindow::ToolArc);
|
||||||
|
|
||||||
data = new VContainer;
|
data = new VContainer;
|
||||||
CreateManTableIGroup ();
|
CreateManTableIGroup ();
|
||||||
|
@ -530,6 +533,62 @@ void MainWindow::ClosedDialogSpline(int result){
|
||||||
ArrowTool();
|
ArrowTool();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::ToolArc(bool checked){
|
||||||
|
if(checked){
|
||||||
|
CanselTool();
|
||||||
|
tool = Tools::ArcTool;
|
||||||
|
QPixmap pixmap(":/cursor/arc_cursor.png");
|
||||||
|
QCursor cur(pixmap, 2, 3);
|
||||||
|
ui->graphicsView->setCursor(cur);
|
||||||
|
helpLabel->setText("Виберіть точку центру.");
|
||||||
|
dialogArc = new DialogArc(data, this);
|
||||||
|
connect(scene, &VMainGraphicsScene::ChoosedObject, dialogArc,
|
||||||
|
&DialogArc::ChoosedObject);
|
||||||
|
connect(dialogArc, &DialogArc::DialogClosed, this,
|
||||||
|
&MainWindow::ClosedDialogArc);
|
||||||
|
} else {
|
||||||
|
ui->toolButtonSpline->setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::ClosedDialogArc(int result){
|
||||||
|
if(result == QDialog::Accepted){
|
||||||
|
qint64 center = dialogArc->GetCenter();
|
||||||
|
QString radius = dialogArc->GetRadius();
|
||||||
|
QString f1 = dialogArc->GetF1();
|
||||||
|
QString f2 = dialogArc->GetF2();
|
||||||
|
|
||||||
|
qreal calcRadius, calcF1, calcF2;
|
||||||
|
|
||||||
|
Calculator cal(data);
|
||||||
|
QString errorMsg;
|
||||||
|
qreal result = cal.eval(radius, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcRadius = result*PrintDPI/25.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorMsg.clear();
|
||||||
|
result = cal.eval(f1, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcF1 = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorMsg.clear();
|
||||||
|
result = cal.eval(f2, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcF2 = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
VArc arc = VArc(data->DataPoints(), center, calcRadius, radius, calcF1, f1, calcF2, f2 );
|
||||||
|
qint64 id = data->AddArc(arc);
|
||||||
|
data->AddLengthArc(data->GetNameArc(center,id), arc.GetLength());
|
||||||
|
VToolArc *toolArc = new VToolArc(doc, data, id, Tool::FromGui);
|
||||||
|
scene->addItem(toolArc);
|
||||||
|
connect(toolArc, &VToolArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
|
||||||
|
}
|
||||||
|
ArrowTool();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::showEvent( QShowEvent *event ){
|
void MainWindow::showEvent( QShowEvent *event ){
|
||||||
QMainWindow::showEvent( event );
|
QMainWindow::showEvent( event );
|
||||||
if( event->spontaneous() ){
|
if( event->spontaneous() ){
|
||||||
|
@ -686,6 +745,12 @@ void MainWindow::CanselTool(){
|
||||||
scene->setFocus(Qt::OtherFocusReason);
|
scene->setFocus(Qt::OtherFocusReason);
|
||||||
scene->clearSelection();
|
scene->clearSelection();
|
||||||
break;
|
break;
|
||||||
|
case Tools::ArcTool:
|
||||||
|
delete dialogArc;
|
||||||
|
ui->toolButtonArc->setChecked(false);
|
||||||
|
scene->setFocus(Qt::OtherFocusReason);
|
||||||
|
scene->clearSelection();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -949,6 +1014,7 @@ void MainWindow::SetEnableTool(bool enable){
|
||||||
ui->toolButtonBisector->setEnabled(enable);
|
ui->toolButtonBisector->setEnabled(enable);
|
||||||
ui->toolButtonLineIntersect->setEnabled(enable);
|
ui->toolButtonLineIntersect->setEnabled(enable);
|
||||||
ui->toolButtonSpline->setEnabled(enable);
|
ui->toolButtonSpline->setEnabled(enable);
|
||||||
|
ui->toolButtonArc->setEnabled(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow(){
|
MainWindow::~MainWindow(){
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "dialogs/dialogbisector.h"
|
#include "dialogs/dialogbisector.h"
|
||||||
#include "dialogs/dialoglineintersect.h"
|
#include "dialogs/dialoglineintersect.h"
|
||||||
#include "dialogs/dialogspline.h"
|
#include "dialogs/dialogspline.h"
|
||||||
|
#include "dialogs/dialogarc.h"
|
||||||
#include "tools/vtoolsinglepoint.h"
|
#include "tools/vtoolsinglepoint.h"
|
||||||
#include "xml/vdomdocument.h"
|
#include "xml/vdomdocument.h"
|
||||||
#include "container/vcontainer.h"
|
#include "container/vcontainer.h"
|
||||||
|
@ -38,7 +39,8 @@ namespace Tools{
|
||||||
NormalTool,
|
NormalTool,
|
||||||
BisectorTool,
|
BisectorTool,
|
||||||
LineIntersectTool,
|
LineIntersectTool,
|
||||||
SplineTool
|
SplineTool,
|
||||||
|
ArcTool
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +85,8 @@ public slots:
|
||||||
void ClosedDialogLineIntersect(int result);
|
void ClosedDialogLineIntersect(int result);
|
||||||
void ToolSpline(bool checked);
|
void ToolSpline(bool checked);
|
||||||
void ClosedDialogSpline(int result);
|
void ClosedDialogSpline(int result);
|
||||||
|
void ToolArc(bool checked);
|
||||||
|
void ClosedDialogArc(int result);
|
||||||
protected:
|
protected:
|
||||||
virtual void keyPressEvent ( QKeyEvent * event );
|
virtual void keyPressEvent ( QKeyEvent * event );
|
||||||
virtual void showEvent( QShowEvent *event );
|
virtual void showEvent( QShowEvent *event );
|
||||||
|
@ -103,6 +107,7 @@ private:
|
||||||
DialogBisector *dialogBisector;
|
DialogBisector *dialogBisector;
|
||||||
DialogLineIntersect *dialogLineIntersect;
|
DialogLineIntersect *dialogLineIntersect;
|
||||||
DialogSpline *dialogSpline;
|
DialogSpline *dialogSpline;
|
||||||
|
DialogArc *dialogArc;
|
||||||
VDomDocument *doc;
|
VDomDocument *doc;
|
||||||
VContainer *data;
|
VContainer *data;
|
||||||
QComboBox *comboBoxDraws;
|
QComboBox *comboBoxDraws;
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>2</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page">
|
<widget class="QWidget" name="page">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>154</width>
|
<width>154</width>
|
||||||
<height>45</height>
|
<height>58</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -355,9 +355,25 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QPushButton" name="pushButton_8">
|
<widget class="QToolButton" name="toolButtonArc">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>PushButton</string>
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="icon.qrc">
|
||||||
|
<normaloff>:/icon/32x32/arc.png</normaloff>:/icon/32x32/arc.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
114
tools/vtoolarc.cpp
Normal file
114
tools/vtoolarc.cpp
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
#include "vtoolarc.h"
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
VToolArc::VToolArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Enum typeCreation,
|
||||||
|
QGraphicsItem *parent):VAbstractTool(doc, data, id), QGraphicsPathItem(parent){
|
||||||
|
VArc arc = data->GetArc(id);
|
||||||
|
QPainterPath path;
|
||||||
|
path.addPath(arc.GetPath());
|
||||||
|
path.setFillRule( Qt::WindingFill );
|
||||||
|
this->setPath(path);
|
||||||
|
this->setPen(QPen(Qt::black, widthHairLine));
|
||||||
|
this->setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||||
|
this->setAcceptHoverEvents(true);
|
||||||
|
|
||||||
|
if(typeCreation == Tool::FromGui){
|
||||||
|
AddToFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::FullUpdateFromFile(){
|
||||||
|
RefreshGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::FullUpdateFromGui(int result){
|
||||||
|
if(result == QDialog::Accepted){
|
||||||
|
QDomElement domElement = doc->elementById(QString().setNum(id));
|
||||||
|
if(domElement.isElement()){
|
||||||
|
domElement.setAttribute("center", QString().setNum(dialogArc->GetCenter()));
|
||||||
|
domElement.setAttribute("radius", dialogArc->GetRadius());
|
||||||
|
domElement.setAttribute("angle1", dialogArc->GetF1());
|
||||||
|
domElement.setAttribute("angle2", dialogArc->GetF2());
|
||||||
|
emit FullUpdateTree();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dialogArc.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::ChangedActivDraw(const QString newName){
|
||||||
|
if(nameActivDraw == newName){
|
||||||
|
this->setPen(QPen(Qt::black, widthHairLine));
|
||||||
|
this->setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||||
|
this->setAcceptHoverEvents(true);
|
||||||
|
VAbstractTool::ChangedActivDraw(newName);
|
||||||
|
} else {
|
||||||
|
this->setPen(QPen(Qt::gray, widthHairLine));
|
||||||
|
this->setFlag(QGraphicsItem::ItemIsSelectable, false);
|
||||||
|
this->setAcceptHoverEvents (false);
|
||||||
|
VAbstractTool::ChangedActivDraw(newName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){
|
||||||
|
if(!ignoreContextMenuEvent){
|
||||||
|
QMenu menu;
|
||||||
|
QAction *actionOption = menu.addAction("Властивості");
|
||||||
|
QAction *selectedAction = menu.exec(event->screenPos());
|
||||||
|
if(selectedAction == actionOption){
|
||||||
|
dialogArc = QSharedPointer<DialogArc>(new DialogArc(VAbstractTool::data));
|
||||||
|
|
||||||
|
connect(qobject_cast< VMainGraphicsScene * >(this->scene()), &VMainGraphicsScene::ChoosedObject,
|
||||||
|
dialogArc.data(), &DialogArc::ChoosedObject);
|
||||||
|
connect(dialogArc.data(), &DialogArc::DialogClosed, this,
|
||||||
|
&VToolArc::FullUpdateFromGui);
|
||||||
|
|
||||||
|
VArc arc = VAbstractTool::data->GetArc(id);
|
||||||
|
|
||||||
|
dialogArc->GetCenter(arc.GetCenter());
|
||||||
|
dialogArc->GetRadius(arc.GetFormulaRadius());
|
||||||
|
dialogArc->GetF1(arc.GetFormulaF1());
|
||||||
|
dialogArc->GetF2(arc.GetFormulaF2());
|
||||||
|
|
||||||
|
dialogArc->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::AddToFile(){
|
||||||
|
VArc arc = VAbstractTool::data->GetArc(id);
|
||||||
|
QDomElement domElement = doc->createElement("arc");
|
||||||
|
|
||||||
|
AddAttribute(domElement, "id", id);
|
||||||
|
AddAttribute(domElement, "type", "simple");
|
||||||
|
AddAttribute(domElement, "center", arc.GetCenter());
|
||||||
|
AddAttribute(domElement, "radius", arc.GetFormulaRadius());
|
||||||
|
AddAttribute(domElement, "angle1", arc.GetFormulaF1());
|
||||||
|
AddAttribute(domElement, "angle2", arc.GetFormulaF2());
|
||||||
|
|
||||||
|
AddToCalculation(domElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
|
||||||
|
if(event->button() == Qt::LeftButton){
|
||||||
|
emit ChoosedTool(id, Scene::Arc);
|
||||||
|
}
|
||||||
|
QGraphicsItem::mouseReleaseEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::hoverMoveEvent(QGraphicsSceneHoverEvent *event){
|
||||||
|
Q_UNUSED(event);
|
||||||
|
this->setPen(QPen(Qt::black, widthMainLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){
|
||||||
|
Q_UNUSED(event);
|
||||||
|
this->setPen(QPen(Qt::black, widthHairLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
void VToolArc::RefreshGeometry(){
|
||||||
|
VArc arc = VAbstractTool::data->GetArc(id);
|
||||||
|
QPainterPath path;
|
||||||
|
path.addPath(arc.GetPath());
|
||||||
|
path.setFillRule( Qt::WindingFill );
|
||||||
|
this->setPath(path);
|
||||||
|
}
|
32
tools/vtoolarc.h
Normal file
32
tools/vtoolarc.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef VTOOLARC_H
|
||||||
|
#define VTOOLARC_H
|
||||||
|
|
||||||
|
#include "vabstracttool.h"
|
||||||
|
#include "../container/vcontainer.h"
|
||||||
|
#include "../xml/vdomdocument.h"
|
||||||
|
#include <QGraphicsPathItem>
|
||||||
|
#include "../dialogs/dialogarc.h"
|
||||||
|
#include "../widgets/vcontrolpointspline.h"
|
||||||
|
|
||||||
|
class VToolArc :public VAbstractTool, public QGraphicsPathItem
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
VToolArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Enum typeCreation,
|
||||||
|
QGraphicsItem * parent = 0);
|
||||||
|
public slots:
|
||||||
|
virtual void FullUpdateFromFile();
|
||||||
|
virtual void FullUpdateFromGui(int result);
|
||||||
|
virtual void ChangedActivDraw(const QString newName);
|
||||||
|
protected:
|
||||||
|
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
|
||||||
|
virtual void AddToFile();
|
||||||
|
virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event );
|
||||||
|
virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event );
|
||||||
|
virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );
|
||||||
|
private:
|
||||||
|
QSharedPointer<DialogArc> dialogArc;
|
||||||
|
void RefreshGeometry();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VTOOLARC_H
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../tools/vtoolbisector.h"
|
#include "../tools/vtoolbisector.h"
|
||||||
#include "../tools/vtoollineintersect.h"
|
#include "../tools/vtoollineintersect.h"
|
||||||
#include "../tools/vtoolspline.h"
|
#include "../tools/vtoolspline.h"
|
||||||
|
#include "../tools/vtoolarc.h"
|
||||||
#include "../options.h"
|
#include "../options.h"
|
||||||
#include "../container/calculator.h"
|
#include "../container/calculator.h"
|
||||||
|
|
||||||
|
@ -228,6 +229,7 @@ void VDomDocument::Parse(Document::Enum parse, VMainGraphicsScene *scene, QCombo
|
||||||
data->ClearLengthLines();
|
data->ClearLengthLines();
|
||||||
data->ClearLengthArcs();
|
data->ClearLengthArcs();
|
||||||
data->ClearLengthSplines();
|
data->ClearLengthSplines();
|
||||||
|
data->ClearLineArcs();
|
||||||
}
|
}
|
||||||
QDomElement rootElement = this->documentElement();
|
QDomElement rootElement = this->documentElement();
|
||||||
QDomNode domNode = rootElement.firstChild();
|
QDomNode domNode = rootElement.firstChild();
|
||||||
|
@ -351,6 +353,9 @@ void VDomDocument::ParseCalculationElement(VMainGraphicsScene *scene, const QDom
|
||||||
if(domElement.tagName() == "spline"){
|
if(domElement.tagName() == "spline"){
|
||||||
ParseSplineElement(scene, domElement, parse, domElement.attribute("type", ""));
|
ParseSplineElement(scene, domElement, parse, domElement.attribute("type", ""));
|
||||||
}
|
}
|
||||||
|
if(domElement.tagName() == "arc"){
|
||||||
|
ParseArcElement(scene, domElement, parse, domElement.attribute("type", ""));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -673,6 +678,54 @@ void VDomDocument::ParseSplineElement(VMainGraphicsScene *scene, const QDomEleme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VDomDocument::ParseArcElement(VMainGraphicsScene *scene, const QDomElement &domElement,
|
||||||
|
Document::Enum parse, const QString &type){
|
||||||
|
if(type == "simple"){
|
||||||
|
if(!domElement.isNull()){
|
||||||
|
QString radius, f1, f2;
|
||||||
|
qint64 id, center;
|
||||||
|
if(!domElement.isNull()){
|
||||||
|
id = domElement.attribute("id", "").toLongLong();
|
||||||
|
center = domElement.attribute("center", "").toLongLong();
|
||||||
|
radius = domElement.attribute("radius", "");
|
||||||
|
f1 = domElement.attribute("angle1", "");
|
||||||
|
f2 = domElement.attribute("angle2","");
|
||||||
|
|
||||||
|
qreal calcRadius = 0, calcF1 = 0, calcF2 = 0;
|
||||||
|
|
||||||
|
Calculator cal(data);
|
||||||
|
QString errorMsg;
|
||||||
|
qreal result = cal.eval(radius, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcRadius = result*PrintDPI/25.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorMsg.clear();
|
||||||
|
result = cal.eval(f1, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcF1 = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorMsg.clear();
|
||||||
|
result = cal.eval(f2, &errorMsg);
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
calcF2 = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
VArc arc = VArc(data->DataPoints(), center, calcRadius, radius, calcF1, f1, calcF2, f2 );
|
||||||
|
data->UpdateArc(id, arc);
|
||||||
|
data->AddLengthArc(data->GetNameArc(center,id), arc.GetLength());
|
||||||
|
if(parse == Document::FullParse){
|
||||||
|
VToolArc *toolArc = new VToolArc(this, data, id, Tool::FromFile);
|
||||||
|
scene->addItem(toolArc);
|
||||||
|
connect(toolArc, &VToolArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VDomDocument::FullUpdateTree(){
|
void VDomDocument::FullUpdateTree(){
|
||||||
VMainGraphicsScene *scene = new VMainGraphicsScene();
|
VMainGraphicsScene *scene = new VMainGraphicsScene();
|
||||||
QComboBox *comboBoxDraws = new QComboBox();
|
QComboBox *comboBoxDraws = new QComboBox();
|
||||||
|
|
|
@ -61,6 +61,8 @@ private:
|
||||||
Document::Enum parse);
|
Document::Enum parse);
|
||||||
void ParseSplineElement(VMainGraphicsScene *scene, const QDomElement& domElement,
|
void ParseSplineElement(VMainGraphicsScene *scene, const QDomElement& domElement,
|
||||||
Document::Enum parse, const QString& type);
|
Document::Enum parse, const QString& type);
|
||||||
|
void ParseArcElement(VMainGraphicsScene *scene, const QDomElement& domElement,
|
||||||
|
Document::Enum parse, const QString& type);
|
||||||
void ParseIncrementsElement(const QDomNode& node);
|
void ParseIncrementsElement(const QDomNode& node);
|
||||||
void AddNewDraw(const QDomElement &node, QComboBox *comboBoxDraws)const;
|
void AddNewDraw(const QDomElement &node, QComboBox *comboBoxDraws)const;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user