X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=249fd9a0e7fb2395e44e6f3dfe99aa7117015648;hb=67a7fe404a60e872f2012cfd0e9a621b99d9883a;hp=104c9cfb5db9928eb2a20363cb69146ad6b70d5d;hpb=9b72b6fe0f393c31c397cfb21b541e3b599a62e0;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 104c9cfb5..249fd9a0e 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -60,28 +60,28 @@ 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, 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, SLOT(onValuesChanged())); @@ -138,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); @@ -193,6 +194,12 @@ void PartSet_WidgetPoint2D::activate() QIntList aModes; aModes << TopAbs_VERTEX; myWorkshop->moduleConnector()->activateSubShapesSelection(aModes); + if (!isEditingMode()) { + // the control value is stored to the mode by the focus in on the widget + // we need the value is initialized in order to enable the apply button in the property panel + // it should happens only in the creation mode because during edition all fields are filled + storeValue(); + } } void PartSet_WidgetPoint2D::deactivate() @@ -228,34 +235,56 @@ 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); - setPoint(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(7); + std::shared_ptr aAttrPnt = + PartSet_Tools::findAttributePoint(mySketch, aX, anY, aTolerance, aIgnore); + if (aAttrPnt.get() != NULL) { + aFeaturePoint->setValue(aAttrPnt->pnt()); + 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); + // the Ok button should be disabled in the property panel by moving the mouse point in the viewer + // this leads that the user does not try to click Ok and it avoids an incorrect situation that the + // line is moved to the cursor to the Ok button myWorkshop->propertyPanel()->setOkEnabled(false); gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView());