X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=a27d76f2833a59fc31df48dc0f15f67725a05bd8;hb=7b7572de9532f6f327bdc2a9517d7264500bc91e;hp=0d296dc097204e2aa7804e2f4b51c375af35107b;hpb=1de75803e9baf3de59fa755f9eccb6ef60bb64e4;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 0d296dc09..a27d76f28 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -1,13 +1,28 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: PartSet_WidgetPoint2D.cpp -// Created: 25 Apr 2014 -// Author: Natalia ERMOLAEVA +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "PartSet_WidgetPoint2d.h" #include #include #include +#include +#include #include #include @@ -61,6 +76,7 @@ #include #include #include +#include #include #include @@ -86,59 +102,37 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, // the control should accept the focus, so the boolean flag is corrected to be true myIsObligatory = true; - QString aPageName = QString::fromStdString(theData->getProperty(CONTAINER_PAGE_NAME)); + QString aPageName = translate(theData->getProperty(CONTAINER_PAGE_NAME)); myGroupBox = new QGroupBox(aPageName, theParent); myGroupBox->setFlat(false); - bool aAcceptVariables = theData->getBooleanAttribute(DOUBLE_WDG_ACCEPT_EXPRESSIONS, true); +#ifdef _DEBUG + bool aAcceptVariables = +#endif + theData->getBooleanAttribute(DOUBLE_WDG_ACCEPT_EXPRESSIONS, true); QGridLayout* aGroupLay = new QGridLayout(myGroupBox); ModuleBase_Tools::adjustMargins(aGroupLay); aGroupLay->setSpacing(2); aGroupLay->setColumnStretch(1, 1); - { - QLabel* aLabel = new QLabel(myGroupBox); - - myXSpin = new ModuleBase_LabelValue(myGroupBox, tr("X")); - //ModuleBase_ParamSpinBox(myGroupBox); - //myXSpin->setAcceptVariables(aAcceptVariables); - //myXSpin->setMinimum(-DBL_MAX); - //myXSpin->setMaximum(DBL_MAX); - //myXSpin->setToolTip(tr("X")); - aGroupLay->addWidget(myXSpin, 0, 1); - - //connect(myXSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified())); - //myXSpin->setValueEnabled(isValueEnabled()); - } - { - //QLabel* aLabel = new QLabel(myGroupBox); - //aLabel->setText(tr("Y ")); - //aGroupLay->addWidget(aLabel, 1, 0); - - myYSpin = new ModuleBase_LabelValue(myGroupBox, tr("Y")); - //ModuleBase_ParamSpinBox(myGroupBox); - //myYSpin = new ModuleBase_ParamSpinBox(myGroupBox); - //myYSpin->setAcceptVariables(aAcceptVariables); - //myYSpin->setMinimum(-DBL_MAX); - //myYSpin->setMaximum(DBL_MAX); - //myYSpin->setToolTip(tr("Y")); - aGroupLay->addWidget(myYSpin, 1, 1); - - //connect(myYSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified())); - //myYSpin->setValueEnabled(isValueEnabled()); - } + + myXSpin = new ModuleBase_LabelValue(myGroupBox, tr("X")); + aGroupLay->addWidget(myXSpin, 0, 1); + myYSpin = new ModuleBase_LabelValue(myGroupBox, tr("Y")); + aGroupLay->addWidget(myYSpin, 1, 1); + QVBoxLayout* aLayout = new QVBoxLayout(this); ModuleBase_Tools::zeroMargins(aLayout); aLayout->addWidget(myGroupBox); setLayout(aLayout); myWidgetValidator = new ModuleBase_WidgetValidator(this, myWorkshop); + myExternalObjectMgr = new PartSet_ExternalObjectsMgr(theData->getProperty("use_external"), + theData->getProperty("can_create_external"), true); } bool PartSet_WidgetPoint2D::isValidSelectionCustom(const ModuleBase_ViewerPrsPtr& theValue) { - bool aValid = true; - PartSet_Module* aModule = dynamic_cast(myWorkshop->module()); if (aModule->sketchReentranceMgr()->isInternalEditActive()) return true; /// when internal edit is started a new feature is created. I has not results, AIS @@ -212,6 +206,7 @@ bool PartSet_WidgetPoint2D::isValidSelectionForAttribute_( // restores the current values of the widget attribute myWidgetValidator->restoreAttributeValue(aRefAttr, aValid); + myExternalObjectMgr->removeExternal(sketch(), myFeature, myWorkshop, true); ModuleBase_WidgetValidated::blockFeatureAttribute(aRefAttr, myFeature, false, isFlushesActived, isAttributeSetInitializedBlocked, isAttributeSendUpdatedBlocked); @@ -224,14 +219,14 @@ bool PartSet_WidgetPoint2D::setSelectionCustom(const ModuleBase_ViewerPrsPtr& th GeomShapePtr aShape = theValue->shape(); if (aShape.get() && !aShape->isNull()) { Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); - double aX, aY; const TopoDS_Shape& aTDShape = aShape->impl(); - if (getPoint2d(aView, aTDShape, aX, aY)) { - fillRefAttribute(aX, aY); + GeomPnt2dPtr aPnt = PartSet_Tools::getPnt2d(aView, aTDShape, mySketch); + if (aPnt) { + fillRefAttribute(aPnt->x(), aPnt->y(), theValue); isDone = true; } else if (aTDShape.ShapeType() == TopAbs_EDGE) { - fillRefAttribute(theValue->object()); + fillRefAttribute(theValue); isDone = true; } } @@ -271,6 +266,7 @@ bool PartSet_WidgetPoint2D::resetCustom() PartSet_WidgetPoint2D::~PartSet_WidgetPoint2D() { + delete myExternalObjectMgr; } bool PartSet_WidgetPoint2D::setSelection(QList& theValues, @@ -281,23 +277,29 @@ bool PartSet_WidgetPoint2D::setSelection(QList& theValu return isDone; ModuleBase_ViewerPrsPtr aValue = theValues.takeFirst(); - GeomShapePtr aShape = aValue->shape(); - if (aShape.get() && !aShape->isNull()) { - Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); - double aX, aY; - const TopoDS_Shape& aTDShape = aShape->impl(); - if (getPoint2d(aView, aTDShape, aX, aY)) { - isDone = setPoint(aX, aY); - setConstraintToPoint(aX, aY); + + if (!theToValidate || myWidgetValidator->isValidSelection(aValue)) { + GeomShapePtr aShape = aValue->shape(); + if (aShape.get() && !aShape->isNull()) { + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); + const TopoDS_Shape& aTDShape = aShape->impl(); + GeomPnt2dPtr aPnt = PartSet_Tools::getPnt2d(aView, aTDShape, mySketch); + + if (aPnt) { + //isDone = setPoint(aPnt->x(), aPnt->y()); + //setConstraintToPoint(aPnt->x(), aPnt->y(), aValue); + processSelection(aValue, aPnt->x(), aPnt->y()); + isDone = true; + } } } return isDone; } -void PartSet_WidgetPoint2D::selectContent() -{ - // myXSpin->selectAll(); -} +//void PartSet_WidgetPoint2D::selectContent() +//{ +// // myXSpin->selectAll(); +//} bool PartSet_WidgetPoint2D::setPoint(double theX, double theY) { @@ -319,7 +321,7 @@ bool PartSet_WidgetPoint2D::setPoint(double theX, double theY) bool PartSet_WidgetPoint2D::storeValueCustom() { std::shared_ptr aData = myFeature->data(); - if (!aData) // can be on abort of sketcher element + if (!aData || !aData->isValid()) // can be on abort of sketcher element return false; AttributePoint2DPtr aPoint = std::dynamic_pointer_cast( aData->attribute(attributeID())); @@ -334,10 +336,24 @@ bool PartSet_WidgetPoint2D::storeValueCustom() // myYSpin->hasVariable() ? myYSpin->text().toStdString() : ""); //aPoint->setValue(!myXSpin->hasVariable() ? myXSpin->value() : aPoint->x(), // !myYSpin->hasVariable() ? myYSpin->value() : aPoint->y()); - aPoint->setValue(myXSpin->value(), myYSpin->value()); - // after movement the solver will call the update event: optimization - moveObject(myFeature); + if (myFeature->isMacro()) { + // Moving points of macro-features has been processed directly (without solver) + aPoint->setValue(myXSpin->value(), myYSpin->value()); + updateObject(myFeature); + + } else { + if (!aPoint->isInitialized()) + aPoint->setValue(0., 0.); + + std::shared_ptr aMessage( + new ModelAPI_ObjectMovedMessage(this)); + aMessage->setMovedAttribute(aPoint); + aMessage->setOriginalPosition(aPoint->pnt()); + aMessage->setCurrentPosition(myXSpin->value(), myYSpin->value()); + Events_Loop::loop()->send(aMessage); + } + aPoint->setImmutable(isImmutable); that->blockSignals(isBlocked); @@ -404,14 +420,17 @@ QList PartSet_WidgetPoint2D::getControls() const return aControls; } +//******************************************************************** +void PartSet_WidgetPoint2D::selectionModes(int& theModuleSelectionModes, QIntList& theModes) +{ + theModuleSelectionModes = -1; + theModes << TopAbs_VERTEX; + theModes << TopAbs_EDGE; +} +//******************************************************************** void PartSet_WidgetPoint2D::activateCustom() { - QIntList aModes; - aModes << TopAbs_VERTEX; - aModes << TopAbs_EDGE; - myWorkshop->activateSubShapesSelection(aModes); - if (!isEditingMode()) { FeaturePtr aFeature = feature(); if (aFeature.get() && aFeature->getKind() == SketchPlugin_Point::ID()) @@ -434,32 +453,14 @@ void PartSet_WidgetPoint2D::deactivate() storeValue(); ModuleBase_ModelWidget::deactivate(); - myWorkshop->deactivateSubShapesSelection(); -} - -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; } -bool PartSet_WidgetPoint2D::setConstraintToPoint(double theClickedX, double theClickedY) +bool PartSet_WidgetPoint2D::setConstraintToPoint(double theClickedX, double theClickedY, + const std::shared_ptr& theValue) { AttributeRefAttrPtr aRefAttr = attributeRefAttr(); if (aRefAttr.get()) - fillRefAttribute(theClickedX, theClickedY); + fillRefAttribute(theClickedX, theClickedY, theValue); else { FeaturePtr aFeature = feature(); std::string anAttribute = attributeID(); @@ -480,7 +481,7 @@ bool PartSet_WidgetPoint2D::setConstraintToPoint(double theClickedX, double theC AttributePoint2DPtr aFeaturePoint; if (aFeature->isMacro()) { // the macro feature will be removed after the operation is stopped, so we need to build - // coicidence to possible sub-features + // coincidence to possible sub-features aFeaturePoint = findFirstEqualPointInArgumentFeatures(aFeature, aClickedPoint); } else { @@ -509,7 +510,7 @@ bool PartSet_WidgetPoint2D::setConstraintToObject(const ObjectPtr& theObject) AttributePoint2DPtr anAttrPoint = std::dynamic_pointer_cast(aThisAttr); if (anAttrPoint.get()) { // the macro feature will be removed after the operation is stopped, so we need to build - // coicidence to possible sub-features + // coincidence to possible sub-features aFeaturePoint = findFirstEqualPointInArgumentFeatures(feature(), anAttrPoint->pnt()); } @@ -555,12 +556,37 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo if (!aFirstValue.get() && myPreSelected.get()) { aFirstValue = myPreSelected; } + + double aX=0, aY=0; + bool aHasPoint = false; + if (aFirstValue.get()) { + GeomShapePtr aShape = aFirstValue->shape(); + if (aShape.get() && aShape->shapeType() == GeomAPI_Shape::VERTEX) { + const TopoDS_Shape& aTDShape = aShape->impl(); + GeomPnt2dPtr aPnt = PartSet_Tools::getPnt2d(aView, aTDShape, mySketch); + aX = aPnt->x(); + aY = aPnt->y(); + aHasPoint = true; + } + } + if (!aHasPoint) { + gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView); + PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, aY); + } + processSelection(aFirstValue, aX, aY); +} + +void PartSet_WidgetPoint2D::processSelection(const ModuleBase_ViewerPrsPtr& theValue, + double theX, double theY) +{ + if (!setPoint(theX, theY)) + return; // if we have selection and use it - if (aFirstValue.get() && isValidSelectionCustom(aFirstValue) && - aFirstValue->shape().get()) { /// Trihedron Axis may be selected, but shape is empty - GeomShapePtr aGeomShape = aFirstValue->shape(); + if (theValue.get() && isValidSelectionCustom(theValue) && theValue->shape().get()) { + /// Trihedron Axis may be selected, but shape is empty + GeomShapePtr aGeomShape = theValue->shape(); TopoDS_Shape aShape = aGeomShape->impl(); - ObjectPtr aObject = aFirstValue->object(); + ObjectPtr aObject = theValue->object(); FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(aObject); bool anExternal = false; @@ -578,23 +604,20 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo else { anExternal = true; if (!aFixedObject.get()) - aFixedObject = PartSet_Tools::createFixedObjectByExternal(aShape, aObject, mySketch); + { + FeaturePtr aCreatedFeature; + aFixedObject = PartSet_Tools::createFixedObjectByExternal(aGeomShape, aObject, mySketch, + false, aCreatedFeature); + } } } if (anExternal) { - double aX, aY; - if (getPoint2d(aView, aShape, aX, aY) && isFeatureContainsPoint(myFeature, aX, aY)) { - // do not create a constraint to the point, which already used by the feature - // if the feature contains the point, focus is not switched - setPoint(aX, aY); - } - else { - if (getPoint2d(aView, aShape, aX, aY)) - setPoint(aX, aY); - else + if (!isFeatureContainsPoint(myFeature, theX, theY)) { + if (aShape.ShapeType() == TopAbs_EDGE) { setValueState(Stored); // in case of edge selection, Apply state should also be updated + } bool anOrphanPoint = aShape.ShapeType() == TopAbs_VERTEX || - isOrphanPoint(aSelectedFeature, mySketch, aX, aY); + isOrphanPoint(aSelectedFeature, mySketch, theX, theY); if (anExternal) { // we should not stop reentrant operation on external objects because anOrphanPoint = true; @@ -602,7 +625,7 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo if (aShape.ShapeType() == TopAbs_VERTEX) { FeaturePtr aFixedFeature = ModelAPI_Feature::feature(aFixedObject); if (aFixedFeature.get() && aFixedFeature->getKind() == SketchPlugin_Point::ID()) { - anOrphanPoint = isOrphanPoint(aFixedFeature, mySketch, aX, aY); + anOrphanPoint = isOrphanPoint(aFixedFeature, mySketch, theX, theY); } } } @@ -615,34 +638,25 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo if (!anOrphanPoint) emit vertexSelected(); // it stops the reentrant operation + myPreSelected.reset(); emit focusOutWidget(this); } } - if (!anExternal) { - double aX, aY; - bool isProcessed = false; - if (getPoint2d(aView, aShape, aX, aY) && isFeatureContainsPoint(myFeature, aX, aY)) { - // when the point is selected, the coordinates of the point should be set into the attribute - // if the feature contains the point, focus is not switched - setPoint(aX, aY); - } - else { + else { + if (!isFeatureContainsPoint(myFeature, theX, theY)) { + double aX = 0, aY = 0; bool anOrphanPoint = isOrphanPoint(aSelectedFeature, mySketch, aX, aY); // do not set a coincidence constraint in the attribute if the feature contains a point // with the same coordinates. It is important for line creation in order to do not set // the same constraints for the same points, oterwise the result line has zero length. bool isAuxiliaryFeature = false; - if (getPoint2d(aView, aShape, aX, aY)) { - setPoint(aX, aY); - setConstraintToPoint(aX, aY); + if (aShape.ShapeType() == TopAbs_VERTEX) { + setConstraintToPoint(theX, theY, theValue); } else if (aShape.ShapeType() == TopAbs_EDGE) { // point is taken from mouse event and set in attribute. It should be done before setting // coinident constraint to the external line. If a point is created, it should be in // the mouse clicked point - gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView()); - PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, aY); - setPoint(aX, aY); setConstraintToObject(aObject); setValueState(Stored); // in case of edge selection, Apply state should also be updated isAuxiliaryFeature = PartSet_Tools::isAuxiliarySketchEntity(aObject); @@ -656,21 +670,47 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo updateObject(feature()); if (!anOrphanPoint && !anExternal && !isAuxiliaryFeature) emit vertexSelected(); + myPreSelected.reset(); emit focusOutWidget(this); } } } - // End of Bug dependent fragment + // The selection could be a center of an external circular object + else if (theValue.get() && (!theValue->interactive().IsNull())) { + Handle(PartSet_CenterPrs) aAIS = + Handle(PartSet_CenterPrs)::DownCast(theValue->interactive()); + if (!aAIS.IsNull()) { + gp_Pnt aPntComp = aAIS->Component()->Pnt(); + GeomVertexPtr aVertPtr(new GeomAPI_Vertex(aPntComp.X(), aPntComp.Y(), aPntComp.Z())); + TopoDS_Shape aShape = aVertPtr->impl(); + + ResultPtr aFixedObject = + PartSet_Tools::findFixedObjectByExternal(aShape, aAIS->object(), mySketch); + if (!aFixedObject.get()) + { + FeaturePtr aCreatedFeature; + aFixedObject = PartSet_Tools::createFixedByExternalCenter(aAIS->object(), aAIS->edge(), + aAIS->centerType(), mySketch, false, aCreatedFeature); + } + if (aFixedObject.get()) + setConstraintToObject(aFixedObject); + // fignal updated should be flushed in order to visualize possible created + // external objects e.g. selection of trihedron axis when input end arc point + updateObject(feature()); + + emit vertexSelected(); // it stops the reentrant operation + myPreSelected.reset(); + emit focusOutWidget(this); + } + } else { // A case when point is taken from mouse event - gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView()); - double aX, anY; - PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, anY); // if the feature contains the point, focus is not switched - if (!setPoint(aX, anY) || isFeatureContainsPoint(myFeature, aX, anY)) + if (isFeatureContainsPoint(myFeature, theX, theY)) return; + myPreSelected.reset(); emit focusOutWidget(this); } } @@ -682,7 +722,13 @@ void PartSet_WidgetPoint2D::setPreSelection( { myPreSelected = thePreSelected; mouseReleased(theWnd, theEvent); - myPreSelected = ModuleBase_ViewerPrsPtr(); +} + +void PartSet_WidgetPoint2D::getGeomSelection_(const std::shared_ptr& theValue, + ObjectPtr& theObject, + GeomShapePtr& theShape) +{ + myExternalObjectMgr->getGeomSelection(theValue, theObject, theShape, myWorkshop, sketch(), true); } void PartSet_WidgetPoint2D::mouseMoved(ModuleBase_IViewWindow* theWindow, QMouseEvent* theEvent) @@ -694,13 +740,13 @@ void PartSet_WidgetPoint2D::mouseMoved(ModuleBase_IViewWindow* theWindow, QMouse gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView()); - double aX, anY; - PartSet_Tools::convertTo2D(aPoint, mySketch, theWindow->v3dView(), aX, anY); + double aX = 0, aY = 0; + PartSet_Tools::convertTo2D(aPoint, mySketch, theWindow->v3dView(), aX, aY); if (myState != ModifiedInViewer) storeCurentValue(); // we need to block the value state change bool isBlocked = blockValueState(true); - setPoint(aX, anY); + setPoint(aX, aY); blockValueState(isBlocked); setValueState(ModifiedInViewer); } @@ -811,10 +857,13 @@ bool PartSet_WidgetPoint2D::isOrphanPoint(const FeaturePtr& theFeature, if (aCoincidence.get()) { QList aCoinsideLines; QList aCoins; + QList anIsAttributes; PartSet_Tools::findCoincidences(aCoincidence, aCoinsideLines, aCoins, - SketchPlugin_ConstraintCoincidence::ENTITY_A()); + SketchPlugin_ConstraintCoincidence::ENTITY_A(), + anIsAttributes); PartSet_Tools::findCoincidences(aCoincidence, aCoinsideLines, aCoins, - SketchPlugin_ConstraintCoincidence::ENTITY_B()); + SketchPlugin_ConstraintCoincidence::ENTITY_B(), + anIsAttributes); QList::const_iterator anIt = aCoinsideLines.begin(), aLast = aCoinsideLines.end(); for (; anIt != aLast && anOrphanPoint; anIt++) { @@ -856,7 +905,8 @@ AttributeRefAttrPtr PartSet_WidgetPoint2D::attributeRefAttr() const return std::dynamic_pointer_cast(anAttributeRef); } -void PartSet_WidgetPoint2D::fillRefAttribute(double theClickedX, double theClickedY) +void PartSet_WidgetPoint2D::fillRefAttribute(double theClickedX, double theClickedY, + const std::shared_ptr& theValue) { AttributeRefAttrPtr aRefAttr = attributeRefAttr(); if (!aRefAttr.get()) @@ -872,9 +922,19 @@ void PartSet_WidgetPoint2D::fillRefAttribute(double theClickedX, double theClick aFeature, aClickedPoint); if (aClickedFeaturePoint.get()) aRefAttr->setAttr(aClickedFeaturePoint); + else { + ObjectPtr anObject = getGeomSelection(theValue); + if (anObject.get()) + aRefAttr->setObject(anObject); + } } } +void PartSet_WidgetPoint2D::fillRefAttribute(const ModuleBase_ViewerPrsPtr& theValue) +{ + fillRefAttribute(getGeomSelection(theValue)); +} + void PartSet_WidgetPoint2D::fillRefAttribute(const ObjectPtr& theObject) { AttributeRefAttrPtr aRefAttr = attributeRefAttr(); @@ -959,3 +1019,15 @@ std::shared_ptr PartSet_WidgetPoint2D::findFirstEqualPointI } return aFPoint; } + +ObjectPtr PartSet_WidgetPoint2D::getGeomSelection(const ModuleBase_ViewerPrsPtr& theValue) +{ + ObjectPtr anObject; + GeomShapePtr aShape; + ModuleBase_ISelection* aSelection = myWorkshop->selection(); + anObject = aSelection->getResult(theValue); + aShape = aSelection->getShape(theValue); + myExternalObjectMgr->getGeomSelection(theValue, anObject, aShape, myWorkshop, sketch(), true); + + return anObject; +}