X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=5baa133e7e279303c0581dfd5c2d065cc1edcc8c;hb=3757459404253d2986fc8faeb9f3f0781768760d;hp=d3f73af250ef9d7a9f9fd420a80df89e1e0876ef;hpb=f1cd93fd02a54259f72e3191d037323a496b2bef;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index d3f73af25..5baa133e7 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include @@ -58,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())); } } @@ -107,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(); @@ -117,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())); @@ -129,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); @@ -148,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; } @@ -167,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() { @@ -208,6 +204,7 @@ 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, @@ -232,33 +229,55 @@ bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView, void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) { XGUI_Selection* aSelection = myWorkshop->selector()->selection(); - NCollection_List aShapes; - std::list aObjects; - aSelection->selectedShapes(aShapes, aObjects); - if (aShapes.Extent() > 0) { - TopoDS_Shape aShape = aShapes.First(); - 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; - } - } + // TODO: This fragment doesn't work because bug in OCC Viewer. It can be used after fixing. + //NCollection_List aShapes; + //std::list aObjects; + //aSelection->selectedShapes(aShapes, aObjects); + //if (aShapes.Extent() > 0) { + // TopoDS_Shape aShape = aShapes.First(); + // 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; + // } + //} + // End of Bug dependent fragment + // A case when point is taken from mouse event gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView()); double aX, anY; - PartSet_Tools::convertTo2D(aPoint, mySketch, theWnd->v3dView(), aX, anY); + Handle(V3d_View) aView = theWnd->v3dView(); + PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, anY); setPoint(aX, anY); + std::shared_ptr aFeaturePoint = std::dynamic_pointer_cast< + GeomDataAPI_Point2D>(feature()->data()->attribute(attributeID())); + QList aIgnore; + aIgnore.append(feature()); + + double aTolerance = aView->Convert(4); + std::shared_ptr aAttrPnt = + PartSet_Tools::findAttributePoint(mySketch, aX, anY, aTolerance, aIgnore); + if (aAttrPnt.get() != NULL) { + + PartSet_Tools::createConstraint(mySketch, aAttrPnt, aFeaturePoint); + emit vertexSelected(); + } emit focusOutWidget(this); } 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; @@ -276,3 +295,8 @@ double PartSet_WidgetPoint2D::y() const return myYSpin->value(); } +void PartSet_WidgetPoint2D::onValuesChanged() +{ + myWorkshop->operationMgr()->setLockValidating(false); + emit valuesChanged(); +}