X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_ExternalObjectsMgr.cpp;h=59e6c081129b056a870067ad477bf60d0bf96f96;hb=745c72679f6346375d5e886b25cc3865f3c4daae;hp=793940ccab1e13b733d4cef8ba3c6ab6a40a1d2d;hpb=016814c4673909dcd7fd9591694cf599623dfbc7;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_ExternalObjectsMgr.cpp b/src/PartSet/PartSet_ExternalObjectsMgr.cpp old mode 100755 new mode 100644 index 793940cca..59e6c0811 --- a/src/PartSet/PartSet_ExternalObjectsMgr.cpp +++ b/src/PartSet/PartSet_ExternalObjectsMgr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2021 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 @@ -12,13 +12,14 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "PartSet_ExternalObjectsMgr.h" + +#include "PartSet_CenterPrs.h" #include "PartSet_Tools.h" #include @@ -83,12 +84,40 @@ ObjectPtr PartSet_ExternalObjectsMgr::externalObject(const ObjectPtr& theSelecte return aSelectedObject; } +ObjectPtr PartSet_ExternalObjectsMgr::externalCenterObject(const ModuleBase_ViewerPrsPtr& thePrs, + const CompositeFeaturePtr& theSketch, + const bool theTemporary) +{ + if (!thePrs.get() || thePrs->interactive().IsNull()) + return ObjectPtr(); + + Handle(PartSet_CenterPrs) aAIS = Handle(PartSet_CenterPrs)::DownCast(thePrs->interactive()); + if (aAIS.IsNull()) + return ObjectPtr(); + + gp_Pnt aPntComp = aAIS->Component()->Pnt(); + GeomVertexPtr aVertPtr(new GeomAPI_Vertex(aPntComp.X(), aPntComp.Y(), aPntComp.Z())); + TopoDS_Shape aShape = aVertPtr->impl(); + + ResultPtr aSelectedObject = + PartSet_Tools::findFixedObjectByExternal(aShape, aAIS->object(), theSketch); + if (!aSelectedObject.get()) + { + FeaturePtr aCreatedFeature; + aSelectedObject = PartSet_Tools::createFixedByExternalCenter(aAIS->object(), aAIS->edge(), + aAIS->centerType(), theSketch, theTemporary, aCreatedFeature); + if (aCreatedFeature.get() && theTemporary) + myExternalObjectValidated = aCreatedFeature; + } + return aSelectedObject; +} + void PartSet_ExternalObjectsMgr::getGeomSelection(const ModuleBase_ViewerPrsPtr& thePrs, - ObjectPtr& theObject, - GeomShapePtr& theShape, - ModuleBase_IWorkshop* theWorkshop, - const CompositeFeaturePtr& theSketch, - const bool isInValidate) + ObjectPtr& theObject, + GeomShapePtr& theShape, + ModuleBase_IWorkshop* theWorkshop, + const CompositeFeaturePtr& theSketch, + const bool isInValidate) { FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(theObject); std::shared_ptr aSPFeature = @@ -110,6 +139,9 @@ void PartSet_ExternalObjectsMgr::getGeomSelection(const ModuleBase_ViewerPrsPtr& if (aShape.get() != NULL && !aShape->isNull()) anExternalObject = externalObject(theObject, aShape, theSketch, isInValidate); + if (!anExternalObject.get()) { + anExternalObject = externalCenterObject(thePrs, theSketch, isInValidate); + } } else { /// use objects of found selection anExternalObject = theObject; @@ -135,7 +167,7 @@ void PartSet_ExternalObjectsMgr::removeExternal(const CompositeFeaturePtr& theSk void PartSet_ExternalObjectsMgr::removeExternalObject(const ObjectPtr& theObject, const CompositeFeaturePtr& /*theSketch*/, - const FeaturePtr& theFeature, + const FeaturePtr& /*theFeature*/, ModuleBase_IWorkshop* theWorkshop) { if (theObject.get()) {