X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_MacroCircle.cpp;h=0bcabf4ff4731a90b7d26c7f2f34fffe07ca4cc9;hb=4c74e5b864eef28128e27b3ece944990ca8f3fbe;hp=2b6829c729a7f62aa6058e1698f71e9dd6e1ad25;hpb=1c530eba1d76c012cfc61df1c21694e62f203d94;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_MacroCircle.cpp b/src/SketchPlugin/SketchPlugin_MacroCircle.cpp index 2b6829c72..0bcabf4ff 100644 --- a/src/SketchPlugin/SketchPlugin_MacroCircle.cpp +++ b/src/SketchPlugin/SketchPlugin_MacroCircle.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 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,10 +12,9 @@ // // 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 "SketchPlugin_MacroCircle.h" @@ -119,6 +118,7 @@ void SketchPlugin_MacroCircle::execute() Events_Loop::loop()->send(aMessage); } +// LCOV_EXCL_START std::string SketchPlugin_MacroCircle::processEvent( const std::shared_ptr& theMessage) { @@ -168,13 +168,11 @@ std::string SketchPlugin_MacroCircle::processEvent( aRefAttr->setAttr(anAttribute); } else if (anObject.get()) { - // if presentation of previous reentrant macro arc is used, the object is invalid, - // we should use result of previous feature of the message(Arc) - if (!anObject->data()->isValid()) { - FeaturePtr aCreatedFeature = aReentrantMessage->createdFeature(); - anObject = aCreatedFeature->lastResult(); - } - aRefAttr->setObject(anObject); + // if attribute is NULL, only object is defined, it should be processed outside + // the feature because it might be an external feature, that will be + // removed/created again after restart operation + // #2468 - Crash when sketching circles successively on a repetition + aFilledAttributeName = CIRCLE_TYPE(); } } } @@ -182,15 +180,16 @@ std::string SketchPlugin_MacroCircle::processEvent( } return aFilledAttributeName; } +// LCOV_EXCL_STOP void SketchPlugin_MacroCircle::constraintsForCircleByCenterAndPassed(FeaturePtr theCircleFeature) { // Create constraints. - SketchPlugin_Tools::createConstraint( + SketchPlugin_Tools::createCoincidenceOrTangency( this, CENTER_POINT_REF_ID(), theCircleFeature->attribute(SketchPlugin_Circle::CENTER_ID()), ObjectPtr(), false); - SketchPlugin_Tools::createConstraint( + SketchPlugin_Tools::createCoincidenceOrTangency( this, PASSED_POINT_REF_ID(), AttributePtr(), theCircleFeature->lastResult(), true); } @@ -203,8 +202,10 @@ void SketchPlugin_MacroCircle::constraintsForCircleByThreePoints(FeaturePtr theC // Create constraints. ResultPtr aCircleResult = theCircleFeature->lastResult(); - for (int i = 0; i < 3; ++i) - SketchPlugin_Tools::createConstraint(this, aPointRef[i], AttributePtr(), aCircleResult, true); + for (int i = 0; i < 3; ++i) { + SketchPlugin_Tools::createCoincidenceOrTangency( + this, aPointRef[i], AttributePtr(), aCircleResult, true); + } } FeaturePtr SketchPlugin_MacroCircle::createCircleFeature()