X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintManager.cpp;h=4034c0b7e0558355b0f2f976e6ea753d8b8aa13b;hb=d3883990177d27a12b8a2278cdbb82250ff19b79;hp=d6094199f576d0f12f44be87a050c514606b2051;hpb=ef017929d9fd0f90a8bc7513148e25ce833971ac;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintManager.cpp b/src/SketchSolver/SketchSolver_ConstraintManager.cpp index d6094199f..4034c0b7e 100644 --- a/src/SketchSolver/SketchSolver_ConstraintManager.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintManager.cpp @@ -82,6 +82,9 @@ void SketchSolver_ConstraintManager::processEvent( std::dynamic_pointer_cast(theMessage); std::set aFeatures = anUpdateMsg->objects(); + // Shows the message has at least one feature applicable for solver + bool hasProperFeature = false; + bool isMovedEvt = theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_MOVED); if (isMovedEvt) { @@ -89,8 +92,10 @@ void SketchSolver_ConstraintManager::processEvent( for (aFeatIter = aFeatures.begin(); aFeatIter != aFeatures.end(); aFeatIter++) { std::shared_ptr aSFeature = std::dynamic_pointer_cast(*aFeatIter); - if (aSFeature) + if (aSFeature) { moveEntity(aSFeature); + hasProperFeature = true; + } } } else { std::set::iterator aFeatIter; @@ -103,7 +108,7 @@ void SketchSolver_ConstraintManager::processEvent( if (aFeatureKind.compare(SketchPlugin_Sketch::ID()) == 0) { std::shared_ptr aSketch = std::dynamic_pointer_cast< ModelAPI_CompositeFeature>(aFeature); - changeWorkplane(aSketch); + hasProperFeature = changeWorkplane(aSketch) || hasProperFeature; } } // then get anything but not the sketch @@ -114,13 +119,13 @@ void SketchSolver_ConstraintManager::processEvent( std::dynamic_pointer_cast(*aFeatIter); if (!aFeature) continue; - if (aFeature->getKind() == SketchPlugin_ConstraintFillet::ID() || - aFeature->getKind() == SketchPlugin_ConstraintMirror::ID() || - aFeature->getKind() == SketchPlugin_ConstraintTangent::ID()) { + if (aFeature->getKind() == SketchPlugin_ConstraintFillet::ID()) + continue; // skip Fillet features + if (SketchSolver_Group::isComplexConstraint(aFeature)) { aComplexConstraints.insert(aFeature); continue; } - changeConstraintOrEntity(aFeature); + hasProperFeature = changeConstraintOrEntity(aFeature) || hasProperFeature; } // processing remain constraints aFeatIter = aComplexConstraints.begin(); @@ -129,12 +134,13 @@ void SketchSolver_ConstraintManager::processEvent( std::dynamic_pointer_cast(*aFeatIter); if (!aFeature) continue; - changeConstraintOrEntity(aFeature); + hasProperFeature = changeConstraintOrEntity(aFeature) || hasProperFeature; } } // Solve the set of constraints - resolveConstraints(isMovedEvt); // send update for movement in any case + if (hasProperFeature) + resolveConstraints(isMovedEvt); // send update for movement in any case } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) { std::shared_ptr aDeleteMsg = std::dynamic_pointer_cast(theMessage); @@ -337,7 +343,7 @@ std::shared_ptr SketchSolver_ConstraintManager continue; DataPtr aData = aWP->data(); - if (aData) { + if (aData->isValid()) { std::shared_ptr aWPFeatures = std::dynamic_pointer_cast< ModelAPI_AttributeRefList>(aData->attribute(SketchPlugin_Sketch::FEATURES_ID())); std::list aFeaturesList = aWPFeatures->list();