X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_ResultCompSolid.cpp;h=687b0ea087c94c4c73b15f4ccab4067a6210a473;hb=176403004ff97696f3c0b5f8bdf48692177fb34a;hp=4b83d3d5941327966c599f75e3bb596e635599d5;hpb=34afe547352180006fee9600173c4dc93dc1f6c3;p=modules%2Fshaper.git diff --git a/src/Model/Model_ResultCompSolid.cpp b/src/Model/Model_ResultCompSolid.cpp index 4b83d3d59..687b0ea08 100755 --- a/src/Model/Model_ResultCompSolid.cpp +++ b/src/Model/Model_ResultCompSolid.cpp @@ -10,8 +10,6 @@ #include #include #include -#include -#include #include #include #include @@ -32,15 +30,10 @@ Model_ResultCompSolid::~Model_ResultCompSolid() updateSubs(std::shared_ptr()); // erase sub-results } -void Model_ResultCompSolid::initAttributes() +void Model_ResultCompSolid::store(const std::shared_ptr& theShape, + const bool theIsStoreSameShapes) { - DataPtr aData = data(); - aData->addAttribute(COLOR_ID(), ModelAPI_AttributeIntArray::typeId()); -} - -void Model_ResultCompSolid::store(const std::shared_ptr& theShape) -{ - ModelAPI_ResultCompSolid::store(theShape); + ModelAPI_ResultCompSolid::store(theShape, theIsStoreSameShapes); updateSubs(theShape); } @@ -60,7 +53,7 @@ void Model_ResultCompSolid::storeModified(const std::shared_ptr& int Model_ResultCompSolid::numberOfSubs(bool forTree) const { - return mySubs.size(); + return int(mySubs.size()); } std::shared_ptr Model_ResultCompSolid::subResult(const int theIndex, @@ -86,7 +79,8 @@ void Model_ResultCompSolid::colorConfigInfo(std::string& theSection, std::string theDefault = DEFAULT_COLOR(); } -bool Model_ResultCompSolid::setDisabled(std::shared_ptr theThis, const bool theFlag) +bool Model_ResultCompSolid::setDisabled(std::shared_ptr theThis, + const bool theFlag) { bool aChanged = ModelAPI_ResultBody::setDisabled(theThis, theFlag); if (aChanged) { // state is changed, so modifications are needed @@ -103,36 +97,58 @@ bool Model_ResultCompSolid::isConcealed() aResult = true; } else { std::vector >::const_iterator aSubIter = mySubs.cbegin(); - for(; aSubIter != mySubs.cend(); aSubIter++) - if ((*aSubIter)->isConcealed()) + for(; aSubIter != mySubs.cend(); aSubIter++) { + if ((*aSubIter)->ModelAPI_ResultBody::isConcealed()) { aResult = true; + break; + } + } } if (myLastConcealed != aResult) { myLastConcealed = aResult; - setIsConcealed(aResult); // set for all subs the same result + //setIsConcealed(aResult); // set for all subs the same result + std::vector >::const_iterator aSubIter = mySubs.cbegin(); + for(; aSubIter != mySubs.cend(); aSubIter++) { // update the visualization status of each sub + if ((*aSubIter)->ModelAPI_ResultBody::isConcealed() != aResult) { + if (aResult) { // hidden unit must be redisplayed (hidden) + ModelAPI_EventCreator::get()->sendDeleted(document(), (*aSubIter)->groupName()); + // redisplay for the viewer (it must be disappeared also) + static Events_ID EVENT_DISP = + Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY); + ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, EVENT_DISP); + } else { // was not concealed become concealed => delete event + static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED); + ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, anEvent); + } + } + } } return aResult; } void Model_ResultCompSolid::setIsConcealed(const bool theValue) { - ModelAPI_ResultCompSolid::setIsConcealed(theValue); - std::vector >::const_iterator aSubIter = mySubs.cbegin(); - for(; aSubIter != mySubs.cend(); aSubIter++) { - if ((*aSubIter)->isConcealed() != theValue) { - (*aSubIter)->setIsConcealed(theValue); - if (theValue) { // hidden unit must be redisplayed (hidden) - ModelAPI_EventCreator::get()->sendDeleted(document(), (*aSubIter)->groupName()); - // redisplay for the viewer (it must be disappeared also) - static Events_ID EVENT_DISP = - Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY); - ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, EVENT_DISP); - } else { // was not concealed become concealed => delete event - static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED); - ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, anEvent); + if (theValue != ModelAPI_ResultCompSolid::isConcealed()) { + std::vector >::const_iterator aSubIter = mySubs.cbegin(); + for(; aSubIter != mySubs.cend(); aSubIter++) { + if ((*aSubIter)->ModelAPI_ResultBody::isConcealed() != theValue) { + if (theValue) { // hidden unit must be redisplayed (hidden) + ModelAPI_EventCreator::get()->sendDeleted(document(), (*aSubIter)->groupName()); + // redisplay for the viewer (it must be disappeared also) + static Events_ID EVENT_DISP = + Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY); + ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, EVENT_DISP); + } else { // was not concealed become concealed => delete event + static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED); + ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, anEvent); + } } } + ModelAPI_ResultCompSolid::setIsConcealed(theValue); + // to set correct myLastConcealed + isConcealed(); } + //myLastConcealed = theValue; } void Model_ResultCompSolid::updateSubs(const std::shared_ptr& theThisShape) @@ -149,10 +165,10 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr& the bool aWasEmpty = mySubs.empty(); Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); unsigned int aSubIndex = 0; - TopExp_Explorer aSolids(aThisShape, TopAbs_SOLID); - for(; aSolids.More(); aSolids.Next(), aSubIndex++) { - std::shared_ptr aSolidShape(new GeomAPI_Shape); - aSolidShape->setImpl(new TopoDS_Shape(aSolids.Current())); + TopoDS_Iterator aShapesIter(aThisShape); + for(; aShapesIter.More(); aShapesIter.Next(), aSubIndex++) { + std::shared_ptr aShape(new GeomAPI_Shape); + aShape->setImpl(new TopoDS_Shape(aShapesIter.Value())); ResultBodyPtr aSub; if (mySubs.size() <= aSubIndex) { // it is needed to create a new sub-result aSub = anObjects->createBody(this->data(), aSubIndex); @@ -160,8 +176,8 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr& the } else { // just update shape of this result aSub = mySubs[aSubIndex]; } - if (!aSolidShape->isEqual(aSub->shape())) { - aSub->store(aSolidShape); + if (!aShape->isEqual(aSub->shape())) { + aSub->store(aShape, false); aECreator->sendUpdated(aSub, EVENT_DISP); aECreator->sendUpdated(aSub, EVENT_UPD); } @@ -191,5 +207,14 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr& the bool Model_ResultCompSolid::isLatestEqual(const std::shared_ptr& theShape) { - return myBuilder->isLatestEqual(theShape); + if (myBuilder->isLatestEqual(theShape)) + return true; + // also check that it is asked for sub-elements + std::vector >::const_iterator aSubIter = mySubs.cbegin(); + for(; aSubIter != mySubs.cend(); aSubIter++) { + if (aSubIter->get() && (*aSubIter)->isLatestEqual(theShape)) { + return true; + } + } + return false; }