X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_ResultBody.cpp;h=80bce61ab64f34182544043f4b18c45e0ef3132e;hb=176403004ff97696f3c0b5f8bdf48692177fb34a;hp=9b18bc0469d0bc5492d6e270d84aebd05c3012e9;hpb=61da4e89d2ec63daa429d304f928482a0e6fa0b7;p=modules%2Fshaper.git diff --git a/src/Model/Model_ResultBody.cpp b/src/Model/Model_ResultBody.cpp index 9b18bc046..80bce61ab 100644 --- a/src/Model/Model_ResultBody.cpp +++ b/src/Model/Model_ResultBody.cpp @@ -1,157 +1,76 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: Model_ResultBody.cpp // Created: 08 Jul 2014 // Author: Mikhail PONIKAROV #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +// DEB +//#include +//#include +//#define DEB_IMPORT 1 Model_ResultBody::Model_ResultBody() { - setIsConcealed(false); + myBuilder = new Model_BodyBuilder(this); + myWasConcealed = false; + myConnect = ConnectionNotComputed; } -void Model_ResultBody::store(const boost::shared_ptr& theShape) +void Model_ResultBody::colorConfigInfo(std::string& theSection, std::string& theName, + std::string& theDefault) { - boost::shared_ptr aData = boost::dynamic_pointer_cast(data()); - if (aData) { - TDF_Label& aShapeLab = aData->shapeLab(); - // clean builders - clean(); - // store the new shape as primitive - TNaming_Builder aBuilder(aShapeLab); - if (!theShape) - return; // bad shape - TopoDS_Shape aShape = theShape->impl(); - if (aShape.IsNull()) - return; // null shape inside - - aBuilder.Generated(aShape); - } + theSection = "Visualization"; + theName = "result_body_color"; + theDefault = DEFAULT_COLOR(); } -void Model_ResultBody::storeGenerated(const boost::shared_ptr& theFromShape, - const boost::shared_ptr& theToShape) +bool Model_ResultBody::setDisabled(std::shared_ptr theThis, const bool theFlag) { - boost::shared_ptr aData = boost::dynamic_pointer_cast(data()); - if (aData) { - TDF_Label& aShapeLab = aData->shapeLab(); - // clean builders - clean(); - // store the new shape as primitive - TNaming_Builder aBuilder(aShapeLab); - if (!theFromShape || !theToShape) - return; // bad shape - TopoDS_Shape aShapeBasis = theFromShape->impl(); - if (aShapeBasis.IsNull()) - return; // null shape inside - TopoDS_Shape aShapeNew = theToShape->impl(); - if (aShapeNew.IsNull()) - return; // null shape inside - aBuilder.Generated(aShapeBasis, aShapeNew); + bool aChanged = ModelAPI_ResultBody::setDisabled(theThis, theFlag); + if (aChanged) { // state is changed, so modifications are needed + myBuilder->evolutionToSelection(theFlag); } + return aChanged; } -void Model_ResultBody::storeModified(const boost::shared_ptr& theOldShape, - const boost::shared_ptr& theNewShape) +bool Model_ResultBody::isLatestEqual(const std::shared_ptr& theShape) { - boost::shared_ptr aData = boost::dynamic_pointer_cast(data()); - if (aData) { - TDF_Label& aShapeLab = aData->shapeLab(); - // clean builders - clean(); - // store the new shape as primitive - TNaming_Builder aBuilder(aShapeLab); - if (!theOldShape || !theNewShape) - return; // bad shape - TopoDS_Shape aShapeOld = theOldShape->impl(); - if (aShapeOld.IsNull()) - return; // null shape inside - TopoDS_Shape aShapeNew = theNewShape->impl(); - if (aShapeNew.IsNull()) - return; // null shape inside - aBuilder.Generated(aShapeOld, aShapeNew); - } + return myBuilder->isLatestEqual(theShape); } -boost::shared_ptr Model_ResultBody::shape() +bool Model_ResultBody::isConcealed() { - boost::shared_ptr aData = boost::dynamic_pointer_cast(data()); - if (aData) { - TDF_Label& aShapeLab = aData->shapeLab(); - Handle(TNaming_NamedShape) aName; - if (aShapeLab.FindAttribute(TNaming_NamedShape::GetID(), aName)) { - TopoDS_Shape aShape = aName->Get(); - if (!aShape.IsNull()) { - boost::shared_ptr aRes(new GeomAPI_Shape); - aRes->setImpl(new TopoDS_Shape(aShape)); - return aRes; + bool aResult = false; + if (ModelAPI_ResultBody::isConcealed()) { + aResult = true; + } else { + ResultPtr aThis = std::dynamic_pointer_cast(data()->owner()); + if (aThis.get()) { + ResultCompSolidPtr aParent = ModelAPI_Tools::compSolidOwner(aThis); + if (aParent.get()) { + if (aParent->isConcealed()) + aResult = true; } } } - return boost::shared_ptr(); -} - -boost::shared_ptr Model_ResultBody::owner() -{ - return myOwner; -} - -void Model_ResultBody::clean() -{ - std::vector::iterator aBuilder = myBuilders.begin(); - for(; aBuilder != myBuilders.end(); aBuilder++) - delete *aBuilder; -} - -Model_ResultBody::~Model_ResultBody() -{ - clean(); -} - -TNaming_Builder* Model_ResultBody::builder(const int theTag) -{ - if (myBuilders.size() < (unsigned int)theTag) { - myBuilders.insert(myBuilders.end(), theTag - myBuilders.size() + 1, NULL); - } - if (!myBuilders[theTag]) { - boost::shared_ptr aData = boost::dynamic_pointer_cast(data()); - myBuilders[theTag] = new TNaming_Builder(aData->shapeLab().FindChild(theTag)); + if (myWasConcealed != aResult) { + myWasConcealed = aResult; + if (aResult) { // hidden unit must be redisplayed (hidden) + ModelAPI_EventCreator::get()->sendDeleted(document(), this->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(data()->owner(), EVENT_DISP); + } else { // was not concealed become concealed => delete event + static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED); + ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent); + } } - return myBuilders[theTag]; -} -void Model_ResultBody::generated( - const boost::shared_ptr& theNewShape, const int theTag) -{ - TopoDS_Shape aShape = theNewShape->impl(); - builder(theTag)->Generated(aShape); -} - -void Model_ResultBody::generated(const boost::shared_ptr& theOldShape, - const boost::shared_ptr& theNewShape, const int theTag) -{ - TopoDS_Shape anOldShape = theOldShape->impl(); - TopoDS_Shape aNewShape = theNewShape->impl(); - builder(theTag)->Generated(anOldShape, aNewShape); -} - - -void Model_ResultBody::modified(const boost::shared_ptr& theOldShape, - const boost::shared_ptr& theNewShape, const int theTag) -{ - TopoDS_Shape anOldShape = theOldShape->impl(); - TopoDS_Shape aNewShape = theNewShape->impl(); - builder(theTag)->Modify(anOldShape, aNewShape); -} - -void Model_ResultBody::deleted(const boost::shared_ptr& theOldShape, - const int theTag) -{ - TopoDS_Shape aShape = theOldShape->impl(); - builder(theTag)->Delete(aShape); + return aResult; }