X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=26f8f65374be43e28cf5a2853e35c86f50a1da93;hb=f6a26acb1d58b1ccd50c938b785dc39df1877374;hp=1fc77dc99a0cde51a435936f3526479b6e244bce;hpb=976244bad37e04fcebaf8866d7d7a02efd2b7d35;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 1fc77dc99..26f8f6537 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -1,17 +1,20 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: PartSet_WidgetPoint2D.cpp // Created: 25 Apr 2014 // Author: Natalia ERMOLAEVA -#include "PartSet_WidgetPoint2D.h" -#include "PartSet_Tools.h" +#include "PartSet_WidgetPoint2d.h" +#include #include #include #include #include #include +#include +#include -#include #include #include #include @@ -33,6 +36,7 @@ #include #include #include +#include #include #include @@ -56,31 +60,31 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, aGroupLay->setColumnStretch(1, 1); { QLabel* aLabel = new QLabel(myGroupBox); - aLabel->setText("X"); + aLabel->setText(tr("X")); aLabel->setPixmap(QPixmap(":pictures/x_point.png")); aGroupLay->addWidget(aLabel, 0, 0); myXSpin = new ModuleBase_DoubleSpinBox(myGroupBox); myXSpin->setMinimum(-DBL_MAX); myXSpin->setMaximum(DBL_MAX); - myXSpin->setToolTip("X"); + myXSpin->setToolTip(tr("X")); aGroupLay->addWidget(myXSpin, 0, 1); - connect(myXSpin, SIGNAL(valueChanged(double)), this, SIGNAL(valuesChanged())); + connect(myXSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged())); } { QLabel* aLabel = new QLabel(myGroupBox); - aLabel->setText("Y"); + aLabel->setText(tr("Y")); aLabel->setPixmap(QPixmap(":pictures/y_point.png")); aGroupLay->addWidget(aLabel, 1, 0); myYSpin = new ModuleBase_DoubleSpinBox(myGroupBox); myYSpin->setMinimum(-DBL_MAX); myYSpin->setMaximum(DBL_MAX); - myYSpin->setToolTip("X"); + myYSpin->setToolTip(tr("Y")); aGroupLay->addWidget(myYSpin, 1, 1); - connect(myYSpin, SIGNAL(valueChanged(double)), this, SIGNAL(valuesChanged())); + connect(myYSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged())); } } @@ -88,19 +92,15 @@ PartSet_WidgetPoint2D::~PartSet_WidgetPoint2D() { } -bool PartSet_WidgetPoint2D::setValue(ModuleBase_WidgetValue* theValue) +bool PartSet_WidgetPoint2D::setSelection(ModuleBase_ViewerPrs theValue) { + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); bool isDone = false; - if (theValue) { - ModuleBase_WidgetValueFeature* aFeatureValue = - dynamic_cast(theValue); - if (aFeatureValue) { - std::shared_ptr aPoint = aFeatureValue->point(); - if (aPoint) { - setPoint(aPoint->x(), aPoint->y()); - isDone = true; - } - } + TopoDS_Shape aShape = theValue.shape(); + double aX, aY; + if (getPoint2d(aView, aShape, aX, aY)) { + setPoint(aX, aY); + isDone = true; } return isDone; } @@ -109,8 +109,13 @@ void PartSet_WidgetPoint2D::setPoint(double theX, double theY) { bool isBlocked = this->blockSignals(true); + myXSpin->blockSignals(true); myXSpin->setValue(theX); + myXSpin->blockSignals(false); + + myYSpin->blockSignals(true); myYSpin->setValue(theY); + myYSpin->blockSignals(false); this->blockSignals(isBlocked); emit valuesChanged(); @@ -119,6 +124,8 @@ void PartSet_WidgetPoint2D::setPoint(double theX, double theY) bool PartSet_WidgetPoint2D::storeValue() const { std::shared_ptr aData = myFeature->data(); + if (!aData) // can be on abort of sketcher element + return false; std::shared_ptr aPoint = std::dynamic_pointer_cast( aData->attribute(attributeID())); @@ -131,7 +138,8 @@ bool PartSet_WidgetPoint2D::storeValue() const double _Y = myYSpin->value(); #endif aPoint->setValue(myXSpin->value(), myYSpin->value()); - updateObject(myFeature); + // after movement the solver will call the update event: optimization + moveObject(myFeature); aPoint->setImmutable(isImmutable); that->blockSignals(isBlocked); @@ -150,8 +158,13 @@ bool PartSet_WidgetPoint2D::restoreValue() double _Y = aPoint->y(); #endif bool isBlocked = this->blockSignals(true); + myXSpin->blockSignals(true); myXSpin->setValue(aPoint->x()); + myXSpin->blockSignals(false); + + myYSpin->blockSignals(true); myYSpin->setValue(aPoint->y()); + myYSpin->blockSignals(false); this->blockSignals(isBlocked); return true; } @@ -169,25 +182,6 @@ QList PartSet_WidgetPoint2D::getControls() const return aControls; } -//bool PartSet_WidgetPoint2D::initFromPrevious(ObjectPtr theObject) -//{ -// if (myOptionParam.length() == 0) -// return false; -// std::shared_ptr aData = theObject->data(); -// std::shared_ptr aPoint = std::dynamic_pointer_cast( -// aData->attribute(myOptionParam)); -// if (aPoint) { -// bool isBlocked = this->blockSignals(true); -// myXSpin->setValue(aPoint->x()); -// myYSpin->setValue(aPoint->y()); -// this->blockSignals(isBlocked); -// -// emit valuesChanged(); -// emit storedPoint2D(theObject, myOptionParam); -// return true; -// } -// return false; -//} void PartSet_WidgetPoint2D::activate() { @@ -210,6 +204,25 @@ void PartSet_WidgetPoint2D::deactivate() disconnect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)), this, SLOT(onMouseRelease(ModuleBase_IViewWindow*, QMouseEvent*))); myWorkshop->moduleConnector()->deactivateSubShapesSelection(); + myWorkshop->operationMgr()->setLockValidating(false); +} + +bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView, + const TopoDS_Shape& theShape, + double& theX, double& theY) const +{ + if (!theShape.IsNull()) { + if (theShape.ShapeType() == TopAbs_VERTEX) { + const TopoDS_Vertex& aVertex = TopoDS::Vertex(theShape); + if (!aVertex.IsNull()) { + // A case when point is taken from existing vertex + gp_Pnt aPoint = BRep_Tool::Pnt(aVertex); + PartSet_Tools::convertTo2D(aPoint, mySketch, theView, theX, theY); + return true; + } + } + } + return false; } @@ -221,20 +234,14 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous aSelection->selectedShapes(aShapes, aObjects); if (aShapes.Extent() > 0) { TopoDS_Shape aShape = aShapes.First(); - if (!aShape.IsNull()) { - if (aShape.ShapeType() == TopAbs_VERTEX) { - const TopoDS_Vertex& aVertex = TopoDS::Vertex(aShape); - if (!aVertex.IsNull()) { - // A case when point is taken from existing vertex - gp_Pnt aPoint = BRep_Tool::Pnt(aVertex); - double aX, aY; - PartSet_Tools::convertTo2D(aPoint, mySketch, theWnd->v3dView(), aX, aY); - setPoint(aX, aY); - emit vertexSelected(aObjects.front(), aShape); - emit focusOutWidget(this); - return; - } - } + double aX, aY; + if (getPoint2d(theWnd->v3dView(), aShape, aX, aY)) { + setPoint(aX, aY); + + PartSet_Tools::setConstraints(mySketch, feature(), attributeID(),aX, aY); + emit vertexSelected(aObjects.front(), aShape); + emit focusOutWidget(this); + return; } } // A case when point is taken from mouse event @@ -249,6 +256,11 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous void PartSet_WidgetPoint2D::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) { + if (isEditingMode()) + return; + myWorkshop->operationMgr()->setLockValidating(true); + myWorkshop->propertyPanel()->setOkEnabled(false); + gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView()); double aX, anY; @@ -266,3 +278,8 @@ double PartSet_WidgetPoint2D::y() const return myYSpin->value(); } +void PartSet_WidgetPoint2D::onValuesChanged() +{ + myWorkshop->operationMgr()->setLockValidating(false); + emit valuesChanged(); +}