X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Objects.cpp;h=1361a931a49baca81ba39b0b83ee3ac10d237a62;hb=5183e45dbb598541fb76e679b285b1e599916eaa;hp=deadfd2a3c8b686c80147f0f0517e5de4135251f;hpb=b99199dbd1f184ada84a5cab6d5b8b78009a2e99;p=modules%2Fshaper.git diff --git a/src/Model/Model_Objects.cpp b/src/Model/Model_Objects.cpp index deadfd2a3..1361a931a 100644 --- a/src/Model/Model_Objects.cpp +++ b/src/Model/Model_Objects.cpp @@ -339,6 +339,8 @@ ObjectPtr Model_Objects::object(TDF_Label theLabel) ObjectPtr Model_Objects::object(const std::string& theGroupID, const int theIndex) { + if (theIndex == -1) + return ObjectPtr(); createHistory(theGroupID); return myHistory[theGroupID][theIndex]; } @@ -473,7 +475,7 @@ void Model_Objects::synchronizeFeatures( static Events_ID aRedispEvent = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY); static Events_ID aDeleteEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED); static Events_ID aToHideEvent = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY); - aLoop->activateFlushes(false); + bool isActive = aLoop->activateFlushes(false); // update all objects by checking are they on labels or not std::set aNewFeatures, aKeptFeatures; @@ -556,7 +558,7 @@ void Model_Objects::synchronizeFeatures( } anOwner->executeFeatures() = false; - aLoop->activateFlushes(true); + aLoop->activateFlushes(isActive); if (theFlush) { aLoop->flush(aCreateEvent); @@ -813,8 +815,10 @@ void Model_Objects::updateResults(FeaturePtr theFeature) if (aGroup->Get() == ModelAPI_ResultBody::group().c_str()) { aNewBody = createBody(theFeature->data(), aResIndex); } else if (aGroup->Get() == ModelAPI_ResultPart::group().c_str()) { - //aNewBody = createPart(theFeature->data(), aResIndex); - theFeature->execute(); // create the part result + std::shared_ptr aNewP = createPart(theFeature->data(), aResIndex); + theFeature->setResult(aNewP, aResIndex); + if (!aNewP->partDoc().get()) + theFeature->execute(); // create the part result: it is better to restore the previous result if it is possible break; } else if (aGroup->Get() == ModelAPI_ResultConstruction::group().c_str()) { theFeature->execute(); // construction shapes are needed for sketch solver @@ -895,6 +899,20 @@ FeaturePtr Model_Objects::lastFeature() return FeaturePtr(); // no features at all } +std::list > Model_Objects::allFeatures() +{ + std::list > aResult; + Handle(TDataStd_ReferenceArray) aRefs; + if (featuresLabel().FindAttribute(TDataStd_ReferenceArray::GetID(), aRefs)) { + for(int a = aRefs->Lower(); a <= aRefs->Upper(); a++) { + FeaturePtr aFeature = feature(aRefs->Value(a)); + if (aFeature.get()) + aResult.push_back(aFeature); + } + } + return aResult; +} + Standard_Integer HashCode(const TDF_Label& theLab, const Standard_Integer theUpper) { return TDF_LabelMapHasher::HashCode(theLab, theUpper);