X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=5baa133e7e279303c0581dfd5c2d065cc1edcc8c;hb=f94d2fb4ecb53808ddea8a98d38a1d53208edfd8;hp=70b21db9e94daccf88bb3d40b2bcbb107308b0bd;hpb=8320afe7fc596d4ad32c00f59ce83de2039a14e6;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 70b21db9e..5baa133e7 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 @@ -57,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())); } } @@ -89,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; } @@ -110,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(); @@ -120,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())); @@ -132,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); @@ -151,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; } @@ -170,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() { @@ -211,46 +204,80 @@ void PartSet_WidgetPoint2D::deactivate() disconnect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)), this, SLOT(onMouseRelease(ModuleBase_IViewWindow*, QMouseEvent*))); myWorkshop->moduleConnector()->deactivateSubShapesSelection(); + myWorkshop->operationMgr()->setLockValidating(false); } - -void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) +bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView, + const TopoDS_Shape& theShape, + double& theX, double& theY) const { - 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(); - 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); - QApplication::processEvents(); - emit focusOutWidget(this); - return; - } + 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; +} + + +void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) +{ + XGUI_Selection* aSelection = myWorkshop->selector()->selection(); + // 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; @@ -268,3 +295,8 @@ double PartSet_WidgetPoint2D::y() const return myYSpin->value(); } +void PartSet_WidgetPoint2D::onValuesChanged() +{ + myWorkshop->operationMgr()->setLockValidating(false); + emit valuesChanged(); +}