From 473c90c72ce75a4994c3d0711fa7175b8a38c7de Mon Sep 17 00:00:00 2001 From: dismine Date: Fri, 25 Oct 2013 14:10:45 +0300 Subject: [PATCH] Supplement for seams. --HG-- branch : develop --- container/vcontainer.cpp | 54 ++++++++++- container/vcontainer.h | 1 + dialogs/dialogdetail.cpp | 77 +++++++++++++-- dialogs/dialogdetail.h | 23 +++-- dialogs/dialogdetail.ui | 198 ++++++++++++++++++++++++++++++++++----- geometry/vdetail.cpp | 55 ++++++++++- geometry/vdetail.h | 39 +++++--- geometry/vnodedetail.cpp | 37 +++++++- geometry/vnodedetail.h | 30 +++--- tools/vtooldetail.cpp | 71 +++++++++----- xml/vdomdocument.cpp | 13 ++- 11 files changed, 500 insertions(+), 98 deletions(-) diff --git a/container/vcontainer.cpp b/container/vcontainer.cpp index a4d8b8c0f..d53da37d5 100644 --- a/container/vcontainer.cpp +++ b/container/vcontainer.cpp @@ -177,11 +177,18 @@ void VContainer::UpdateId(qint64 newId){ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ VDetail detail = GetDetail(idDetail); QVector points; + QVector pointsEkv; for(qint32 i = 0; i< detail.CountNode(); ++i){ switch(detail[i].getTypeTool()){ case(Tool::NodePoint):{ VPointF point = GetModelingPoint(detail[i].getId()); points.append(point.toQPointF()); + if(detail.getSupplement() == true){ + QPointF pEkv = point.toQPointF(); + pEkv.setX(pEkv.x()+detail[i].getMx()); + pEkv.setY(pEkv.y()+detail[i].getMy()); + pointsEkv.append(pEkv); + } } break; case(Tool::NodeArc):{ @@ -190,8 +197,15 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(arc.GetPoints())); if(len1 <= lenReverse){ points << arc.GetPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(arc.GetPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(arc.GetPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(arc.GetPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; @@ -201,8 +215,15 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(spline.GetPoints())); if(len1 <= lenReverse){ points << spline.GetPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(spline.GetPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(spline.GetPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(spline.GetPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; @@ -212,8 +233,15 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(splinePath.GetPathPoints())); if(len1 <= lenReverse){ points << splinePath.GetPathPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(splinePath.GetPathPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(splinePath.GetPathPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(splinePath.GetPathPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; @@ -224,18 +252,38 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ break; } } - QPainterPath ekv = Equidistant(points, Detail::CloseEquidistant, toPixel(10)); + QPainterPath path; path.moveTo(points[0]); for (qint32 i = 1; i < points.count(); ++i){ path.lineTo(points[i]); } path.lineTo(points[0]); - path.addPath(ekv); - path.setFillRule(Qt::WindingFill); + + if(detail.getSupplement() == true){ + QPainterPath ekv; + if(detail.getClosed() == true){ + ekv = Equidistant(pointsEkv, Detail::CloseEquidistant, toPixel(detail.getWidth())); + } else { + ekv = Equidistant(pointsEkv, Detail::OpenEquidistant, toPixel(detail.getWidth())); + } + path.addPath(ekv); + path.setFillRule(Qt::WindingFill); + } return path; } +QVector VContainer::biasPoints(const QVector &points, const qreal &mx, const qreal &my) const{ + QVector p; + for(qint32 i = 0; i < points.size(); ++i){ + QPointF point = points.at(i); + point.setX(point.x() + mx); + point.setY(point.x() + my); + p.append(point); + } + return p; +} + QPainterPath VContainer::Equidistant(QVector points, const Detail::Equidistant &eqv, const qreal &width) const{ QPainterPath ekv; diff --git a/container/vcontainer.h b/container/vcontainer.h index 235a4243a..4dee1c149 100644 --- a/container/vcontainer.h +++ b/container/vcontainer.h @@ -140,6 +140,7 @@ public: const QHash *DataDetails() const; static void UpdateId(qint64 newId); QPainterPath ContourPath(qint64 idDetail) const; + QVector biasPoints(const QVector &points, const qreal &mx, const qreal &my) const; QPainterPath Equidistant(QVector points, const Detail::Equidistant &eqv, const qreal &width)const; static QLineF ParallelLine(const QLineF &line, qreal width ); diff --git a/dialogs/dialogdetail.cpp b/dialogs/dialogdetail.cpp index 32492ffb3..64fe68fd7 100644 --- a/dialogs/dialogdetail.cpp +++ b/dialogs/dialogdetail.cpp @@ -23,13 +23,24 @@ #include DialogDetail::DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent) : - DialogTool(data, mode, parent), ui(), details(VDetail()){ + DialogTool(data, mode, parent), ui(), details(VDetail()), supplement(true), closed(true){ ui.setupUi(this); + labelEditNamePoint = ui.labelEditNameDetail; bOk = ui.buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogDetail::DialogAccepted); - + flagName = false; + CheckState(); QPushButton *bCansel = ui.buttonBox->button(QDialogButtonBox::Cancel); connect(bCansel, &QPushButton::clicked, this, &DialogDetail::DialogRejected); + + connect(ui.listWidget, &QListWidget::currentRowChanged, this, &DialogDetail::ObjectChanged); + connect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + connect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); + connect(ui.checkBoxSeams, &QCheckBox::clicked, this, &DialogDetail::ClickedSeams); + connect(ui.checkBoxClosed, &QCheckBox::clicked, this, &DialogDetail::ClickedClosed); + connect(ui.lineEditNameDetail, &QLineEdit::textChanged, this, &DialogDetail::NamePointChanged); } void DialogDetail::ChoosedObject(qint64 id, Scene::Scenes type){ @@ -72,12 +83,16 @@ void DialogDetail::DialogAccepted(){ QListWidgetItem *item = ui.listWidget->item(i); details.append( qvariant_cast(item->data(Qt::UserRole))); } + details.setWidth(ui.doubleSpinBoxSeams->value()); details.setName(ui.lineEditNameDetail->text()); + details.setSupplement(supplement); + details.setClosed(closed); emit ToolTip(""); emit DialogClosed(QDialog::Accepted); } -void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode){ +void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, qreal mx, + qreal my){ QString name; switch(typeTool){ case(Tool::NodePoint):{ @@ -127,9 +142,19 @@ void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, No QListWidgetItem *item = new QListWidgetItem(name); item->setFont(QFont("Times", 12, QFont::Bold)); - VNodeDetail node(id, typeTool, mode, typeNode); + VNodeDetail node(id, typeTool, mode, typeNode, mx, my); item->setData(Qt::UserRole, QVariant::fromValue(node)); ui.listWidget->addItem(item); + disconnect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + disconnect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); + ui.doubleSpinBoxBiasX->setValue(toMM(node.getMx())); + ui.doubleSpinBoxBiasY->setValue(toMM(node.getMy())); + connect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + connect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); } VDetail DialogDetail::getDetails() const{ @@ -140,9 +165,49 @@ void DialogDetail::setDetails(const VDetail &value){ details = value; ui.listWidget->clear(); for(qint32 i = 0; i < details.CountNode(); ++i){ - NewItem(details[i].getId(), details[i].getTypeTool(),details[i].getMode(), details[i].getTypeNode()); + NewItem(details[i].getId(), details[i].getTypeTool(), details[i].getMode(), details[i].getTypeNode(), details[i].getMx(), + details[i].getMy()); } - details.setName(ui.lineEditNameDetail->text()); + ui.lineEditNameDetail->setText(details.getName()); + ui.checkBoxSeams->setChecked(details.getSupplement()); + ui.checkBoxClosed->setChecked(details.getClosed()); + ui.doubleSpinBoxSeams->setValue(details.getWidth()); + ui.listWidget->setCurrentRow(0); ui.listWidget->setFocus(Qt::OtherFocusReason); } +void DialogDetail::BiasXChanged(qreal d){ + qint32 row = ui.listWidget->currentRow(); + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + node.setMx(toPixel(d)); + item->setData(Qt::UserRole, QVariant::fromValue(node)); +} + +void DialogDetail::BiasYChanged(qreal d){ + qint32 row = ui.listWidget->currentRow(); + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + node.setMy(toPixel(d)); + item->setData(Qt::UserRole, QVariant::fromValue(node)); +} + +void DialogDetail::ClickedSeams(bool checked){ + supplement = checked; + ui.checkBoxClosed->setEnabled(checked); + ui.doubleSpinBoxSeams->setEnabled(checked); +} + +void DialogDetail::ClickedClosed(bool checked){ + closed = checked; +} + +void DialogDetail::ObjectChanged(int row){ + if(ui.listWidget->count() == 0){ + return; + } + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + ui.doubleSpinBoxBiasX->setValue(toMM(node.getMx())); + ui.doubleSpinBoxBiasY->setValue(toMM(node.getMy())); +} diff --git a/dialogs/dialogdetail.h b/dialogs/dialogdetail.h index 79cc1b55e..efddaf2dc 100644 --- a/dialogs/dialogdetail.h +++ b/dialogs/dialogdetail.h @@ -29,17 +29,24 @@ class DialogDetail : public DialogTool{ Q_OBJECT public: - explicit DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent = 0); - VDetail getDetails() const; - void setDetails(const VDetail &value); - + DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent = 0); + VDetail getDetails() const; + void setDetails(const VDetail &value); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); + void BiasXChanged(qreal d); + void BiasYChanged(qreal d); + void ClickedSeams(bool checked); + void ClickedClosed(bool checked); + void ObjectChanged(int row); private: Ui::DialogDetail ui; - VDetail details; - void NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode); + VDetail details; + bool supplement; + bool closed; + void NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, qreal mx = 0, + qreal my = 0); }; #endif // DIALOGDETAIL_H diff --git a/dialogs/dialogdetail.ui b/dialogs/dialogdetail.ui index 7f1370ed1..08aba5839 100644 --- a/dialogs/dialogdetail.ui +++ b/dialogs/dialogdetail.ui @@ -6,8 +6,8 @@ 0 0 - 340 - 298 + 544 + 327 @@ -20,47 +20,196 @@ - + - + - + - + + + 6 + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + - + + + Bias X + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + 0 0 - - - - Name detail + Bias Y - + + + -10000.000000000000000 + + + 10000.000000000000000 + + - - - - - Closed - - - true - - - - + + + Option + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + + + + Name of detail + + + + + + + + 0 + 0 + + + + + + + + + + Supplement for seams + + + true + + + + + + + + + + 0 + 0 + + + + + + + Width + + + + + + + -10000.000000000000000 + + + 10.000000000000000 + + + + + + + + + Closed + + + true + + + + + @@ -83,7 +232,6 @@ lineEditNameDetail - checkBoxClosed listWidget buttonBox diff --git a/geometry/vdetail.cpp b/geometry/vdetail.cpp index 509fa073d..7e7fdf0c2 100644 --- a/geometry/vdetail.cpp +++ b/geometry/vdetail.cpp @@ -21,14 +21,30 @@ #include "vdetail.h" -VDetail::VDetail():nodes(QVector()),name(QString()), mx(0), my(0){ +VDetail::VDetail():nodes(QVector()),name(QString()), mx(0), my(0), supplement(true), closed(true), + width(10){ } VDetail::VDetail(const QString &name, const QVector &nodes):nodes(QVector()), - name(name), mx(0), my(0){ + name(name), mx(0), my(0), supplement(true), closed(true), width(10){ this->nodes = nodes; } +VDetail::VDetail(const VDetail &detail):nodes(detail.getNodes()), name(detail.getName()), mx(detail.getMx()), + my(detail.getMy()), supplement(detail.getSupplement()), closed(detail.getClosed()), width(detail.getWidth()){ +} + +VDetail &VDetail::operator =(const VDetail &detail){ + nodes = detail.getNodes(); + name = detail.getName(); + mx = detail.getMx(); + my = detail.getMy(); + supplement = detail.getSupplement(); + closed = detail.getClosed(); + width = detail.getWidth(); + return *this; +} + void VDetail::append(const VNodeDetail &node){ nodes.append(node); } @@ -38,6 +54,9 @@ void VDetail::Clear(){ name.clear(); mx = 0; my = 0; + supplement = true; + closed = true; + width = 10; } qint32 VDetail::CountNode() const{ @@ -81,3 +100,35 @@ QString VDetail::getName() const{ void VDetail::setName(const QString &value){ name = value; } + +qreal VDetail::getWidth() const{ + return width; +} + +void VDetail::setWidth(const qreal &value){ + width = value; +} + +bool VDetail::getClosed() const{ + return closed; +} + +void VDetail::setClosed(bool value){ + closed = value; +} + +bool VDetail::getSupplement() const{ + return supplement; +} + +void VDetail::setSupplement(bool value){ + supplement = value; +} + +QVector VDetail::getNodes() const{ + return nodes; +} + +void VDetail::setNodes(const QVector &value){ + nodes = value; +} diff --git a/geometry/vdetail.h b/geometry/vdetail.h index 45cf841fb..5372e219a 100644 --- a/geometry/vdetail.h +++ b/geometry/vdetail.h @@ -39,24 +39,37 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Detail::Equidistants) class VDetail{ public: - VDetail(); - VDetail(const QString &name, const QVector &nodes); - void append(const VNodeDetail &node); - void Clear(); - qint32 CountNode() const; - bool Containes(const qint64 &id)const; + VDetail(); + VDetail(const QString &name, const QVector &nodes); + VDetail(const VDetail &detail); + VDetail &operator=(const VDetail &detail); + void append(const VNodeDetail &node); + void Clear(); + qint32 CountNode() const; + bool Containes(const qint64 &id)const; VNodeDetail & operator[](int indx); QString getName() const; - void setName(const QString &value); - qreal getMx() const; - void setMx(const qreal &value); - qreal getMy() const; - void setMy(const qreal &value); + void setName(const QString &value); + qreal getMx() const; + void setMx(const qreal &value); + qreal getMy() const; + void setMy(const qreal &value); + bool getSupplement() const; + void setSupplement(bool value); + bool getClosed() const; + void setClosed(bool value); + qreal getWidth() const; + void setWidth(const qreal &value); + QVector getNodes() const; + void setNodes(const QVector &value); private: QVector nodes; QString name; - qreal mx; - qreal my; + qreal mx; + qreal my; + bool supplement; + bool closed; + qreal width; }; #endif // VDETAIL_H diff --git a/geometry/vnodedetail.cpp b/geometry/vnodedetail.cpp index e1392e22e..b25c28d92 100644 --- a/geometry/vnodedetail.cpp +++ b/geometry/vnodedetail.cpp @@ -21,16 +21,27 @@ #include "vnodedetail.h" -VNodeDetail::VNodeDetail():id(0), typeTool(Tool::NodePoint), mode(Draw::Calculation), - typeNode(NodeDetail::Contour){ +VNodeDetail::VNodeDetail():id(0), typeTool(Tool::NodePoint), mode(Draw::Modeling), + typeNode(NodeDetail::Contour), mx(0), my(0){ } -VNodeDetail::VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode):id(id), - typeTool(typeTool), mode(mode), typeNode(typeNode){ +VNodeDetail::VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, + qreal mx, qreal my):id(id), typeTool(typeTool), mode(mode), typeNode(typeNode), + mx(mx), my(my){ } VNodeDetail::VNodeDetail(const VNodeDetail &node):id(node.getId()), typeTool(node.getTypeTool()), - mode(node.getMode()), typeNode(node.getTypeNode()){ + mode(node.getMode()), typeNode(node.getTypeNode()), mx(node.getMx()), my(node.getMy()){ +} + +VNodeDetail &VNodeDetail::operator =(const VNodeDetail &node){ + id = node.getId(); + typeTool = node.getTypeTool(); + mode = node.getMode(); + typeNode = node.getTypeNode(); + mx = node.getMx(); + my = node.getMy(); + return *this; } Tool::Tools VNodeDetail::getTypeTool() const{ @@ -64,3 +75,19 @@ NodeDetail::NodeDetails VNodeDetail::getTypeNode() const{ void VNodeDetail::setTypeNode(const NodeDetail::NodeDetails &value){ typeNode = value; } + +qreal VNodeDetail::getMy() const{ + return my; +} + +void VNodeDetail::setMy(const qreal &value){ + my = value; +} + +qreal VNodeDetail::getMx() const{ + return mx; +} + +void VNodeDetail::setMx(const qreal &value){ + mx = value; +} diff --git a/geometry/vnodedetail.h b/geometry/vnodedetail.h index 71763a677..04359f9da 100644 --- a/geometry/vnodedetail.h +++ b/geometry/vnodedetail.h @@ -31,26 +31,32 @@ namespace NodeDetail { } Q_DECLARE_OPERATORS_FOR_FLAGS(NodeDetail::NodeDetails) -class VNodeDetail -{ +class VNodeDetail{ public: - VNodeDetail(); - VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode); - VNodeDetail(const VNodeDetail &node); - qint64 getId() const; - void setId(const qint64 &value); + VNodeDetail(); + VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, + qreal mx = 0, qreal my = 0); + VNodeDetail(const VNodeDetail &node); + VNodeDetail &operator=(const VNodeDetail &node); + qint64 getId() const; + void setId(const qint64 &value); Tool::Tools getTypeTool() const; - void setTypeTool(const Tool::Tools &value); + void setTypeTool(const Tool::Tools &value); Draw::Draws getMode() const; - void setMode(const Draw::Draws &value); + void setMode(const Draw::Draws &value); NodeDetail::NodeDetails getTypeNode() const; - void setTypeNode(const NodeDetail::NodeDetails &value); - + void setTypeNode(const NodeDetail::NodeDetails &value); + qreal getMx() const; + void setMx(const qreal &value); + qreal getMy() const; + void setMy(const qreal &value); private: - qint64 id; + qint64 id; Tool::Tools typeTool; Draw::Draws mode; NodeDetail::NodeDetails typeNode; + qreal mx; + qreal my; }; Q_DECLARE_METATYPE(VNodeDetail) diff --git a/tools/vtooldetail.cpp b/tools/vtooldetail.cpp index 56126fcef..559180c76 100644 --- a/tools/vtooldetail.cpp +++ b/tools/vtooldetail.cpp @@ -192,10 +192,8 @@ VToolDetail::VToolDetail(VDomDocument *doc, VContainer *data, const qint64 &id, void VToolDetail::setDialog(){ Q_ASSERT(!dialogDetail.isNull()); - if(!dialogDetail.isNull()){ - VDetail detail = VAbstractTool::data.GetDetail(id); - dialogDetail->setDetails(detail); - } + VDetail detail = VAbstractTool::data.GetDetail(id); + dialogDetail->setDetails(detail); } void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, @@ -257,7 +255,7 @@ void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScen qWarning()<<"May be wrong tool type!!! Ignoring."<elementById(QString().setNum(id)); + if(domElement.isElement()){ + VDetail det = dialogDetail->getDetails(); + domElement.setAttribute("name", det.getName()); + domElement.setAttribute("supplement", QString().setNum(det.getSupplement())); + domElement.setAttribute("closed", QString().setNum(det.getClosed())); + domElement.setAttribute("width", QString().setNum(det.getWidth())); + if ( domElement.hasChildNodes() ){ + while ( domElement.childNodes().length() >= 1 ){ + domElement.removeChild( domElement.firstChild() ); + } + } + for(qint32 i = 0; i < det.CountNode(); ++i){ + AddNode(domElement, det[i]); + } + emit FullUpdateTree(); + } + } + dialogDetail.clear(); } void VToolDetail::AddToFile(){ @@ -299,8 +316,11 @@ void VToolDetail::AddToFile(){ AddAttribute(domElement, "id", id); AddAttribute(domElement, "name", detail.getName()); - AddAttribute(domElement, "mx", detail.getMx()); - AddAttribute(domElement, "my", detail.getMy()); + AddAttribute(domElement, "mx", toMM(detail.getMx())); + AddAttribute(domElement, "my", toMM(detail.getMy())); + AddAttribute(domElement, "supplement", detail.getSupplement()); + AddAttribute(domElement, "closed", detail.getClosed()); + AddAttribute(domElement, "width", detail.getWidth()); for(qint32 i = 0; i < detail.CountNode(); ++i){ AddNode(domElement, detail[i]); @@ -338,7 +358,7 @@ void VToolDetail::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ QMenu menu; - //QAction *actionOption = menu.addAction(tr("Options")); + QAction *actionOption = menu.addAction(tr("Options")); QAction *actionRemove = menu.addAction(tr("Delete")); if(_referens > 1){ actionRemove->setEnabled(false); @@ -346,21 +366,15 @@ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ actionRemove->setEnabled(true); } QAction *selectedAction = menu.exec(event->screenPos()); -// if(selectedAction == actionOption){ -// dialog = QSharedPointer(new Dialog(getData())); - -// connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), &VMainGraphicsScene::ChoosedObject, -// dialog.data(), &Dialog::ChoosedObject); -// connect(dialog.data(), &Dialog::DialogClosed, tool, -// &Tool::FullUpdateFromGui); -// connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); - -// tool->setDialog(); - -// dialog->show(); -// } + if(selectedAction == actionOption){ + dialogDetail = QSharedPointer(new DialogDetail(getData(), Draw::Modeling)); + connect(qobject_cast< VMainGraphicsScene * >(this->scene()), &VMainGraphicsScene::ChoosedObject, + dialogDetail.data(), &DialogDetail::ChoosedObject); + connect(dialogDetail.data(), &DialogDetail::DialogClosed, this, &VToolDetail::FullUpdateFromGui); + setDialog(); + dialogDetail->show(); + } if(selectedAction == actionRemove){ - //remove form xml file QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ @@ -393,6 +407,8 @@ void VToolDetail::AddNode(QDomElement &domElement, VNodeDetail &node){ QDomElement nod = doc->createElement("node"); AddAttribute(nod, "idObject", node.getId()); + AddAttribute(nod, "mx", toMM(node.getMx())); + AddAttribute(nod, "my", toMM(node.getMy())); if(node.getTypeNode() == NodeDetail::Contour){ AddAttribute(nod, "nodeType", "Contour"); } else { @@ -444,6 +460,15 @@ void VToolDetail::AddNode(QDomElement &domElement, VNodeDetail &node){ case(Tool::SplineTool): AddAttribute(nod, "type", "SplineTool"); break; + case(Tool::Height): + AddAttribute(nod, "type", "Height"); + break; + case(Tool::Triangle): + AddAttribute(nod, "type", "Triangle"); + break; + case(Tool::PointOfIntersection): + AddAttribute(nod, "type", "PointOfIntersection"); + break; default: qWarning()<<"May be wrong tool type!!! Ignoring."<