X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPartSet%2FPartSet_OverconstraintListener.cpp;h=ba20c82a0ade8d488f8fbf56d69b72ae9ea257f4;hb=72f21152437f7abaddd5fb3f3ccef481c2b713e4;hp=2fd930ca72643356bb5882aed156e81e801d269d;hpb=1f569bab11cf0810960f32e508f24f3cd8deb407;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_OverconstraintListener.cpp b/src/PartSet/PartSet_OverconstraintListener.cpp index 2fd930ca7..ba20c82a0 100755 --- a/src/PartSet/PartSet_OverconstraintListener.cpp +++ b/src/PartSet/PartSet_OverconstraintListener.cpp @@ -1,8 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: SketcherPrs_Angle.cpp -// Created: 20 August 2015 -// Author: Vitaly SMETANNIKOV +// Copyright (C) 2014-2017 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 #include @@ -157,11 +171,13 @@ void PartSet_OverconstraintListener::processEvent( } else if (anEventID == ModelAPI_EventReentrantMessage::eventId() || anEventID == SketchPlugin_MacroArcReentrantMessage::eventId()) { - // the message is sent to sketcher reentrant manager only if the kind of feature - // sender is equal to kind of the current operation. E.g. Horizontal create operation + // the message is sent to sketcher reentrant manager only if the name of feature + // sender is equal to feature name of the current operation. E.g. Horizontal create operation // is active. Sketch Line feature is changed, so execute is called, it will send message // This Line's message should not be processed, as the reentrant operation is not for Line - std::string aCurrentFeatureKind; + // It is not enoght of kind, the name should be used, e.g. restarted Lines on auxiliary + // cirlce sometimes causes previous line change, kind the same, but feature line is different + std::string aCurrentFeatureName; ModuleBase_Operation* anOperation = XGUI_Tools::workshop(myWorkshop)->operationMgr()->currentOperation(); if (anOperation) { @@ -169,8 +185,10 @@ void PartSet_OverconstraintListener::processEvent( (anOperation); if (aFOperation) { FeaturePtr aFeature = aFOperation->feature(); - if (aFeature.get()) - aCurrentFeatureKind = aFeature->getKind(); + // data valid is necessary if the feature has been already deleted + // (e.g. Esc of Lenght if lenght value is modified) + if (aFeature.get() && aFeature->data()->isValid()) + aCurrentFeatureName = aFeature->data()->name(); } } if (theMessage->sender()) { @@ -178,7 +196,7 @@ void PartSet_OverconstraintListener::processEvent( if (aSender) { FeaturePtr aFeatureSender = std::dynamic_pointer_cast(aSender->data()->owner()); - if (aFeatureSender.get() && aFeatureSender->getKind() == aCurrentFeatureKind) { + if (aFeatureSender.get() && aFeatureSender->data()->name() == aCurrentFeatureName) { PartSet_Module* aModule = dynamic_cast(myWorkshop->module()); PartSet_SketcherReentrantMgr* aReentrantMgr = aModule->sketchReentranceMgr(); aReentrantMgr->setReentrantMessage(theMessage);