X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_ResultPart.cpp;h=7bbadba0dc02d707400574092a5cd23bdafb39df;hb=8d04b5f4360b23cf376beff9c5e7c12d0e6a5f1e;hp=ddac1acb2a1099999b4d4ce7e31f281b7e5ac011;hpb=8e97f0514a5e19febf05a98077f84f63756f169f;p=modules%2Fshaper.git diff --git a/src/Model/Model_ResultPart.cpp b/src/Model/Model_ResultPart.cpp index ddac1acb2..7bbadba0d 100644 --- a/src/Model/Model_ResultPart.cpp +++ b/src/Model/Model_ResultPart.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 @@ -54,8 +53,9 @@ void Model_ResultPart::initAttributes() data()->addAttribute(COLOR_ID(), ModelAPI_AttributeIntArray::typeId()); data()->addAttribute(BASE_REF_ID(), ModelAPI_AttributeReference::typeId()); data()->addAttribute(DEFLECTION_ID(), ModelAPI_AttributeDouble::typeId()); + data()->addAttribute(TRANSPARENCY_ID(), ModelAPI_AttributeDouble::typeId()); - if (aDocRef->isInitialized() && // initialized immideately means already exist and will be loaded + if (aDocRef->isInitialized() && // initialized immediately means already exist and will be loaded !Model_Application::getApplication()->hasDocument(aDocRef->docId())) Model_Application::getApplication()->setLoadByDemand(data()->name(), aDocRef->docId()); } @@ -65,6 +65,8 @@ std::shared_ptr Model_ResultPart::partDoc() if (myTrsf.get() && baseRef().get()) { // the second condition is due to #2035 return baseRef()->partDoc(); } + if (!data()->isValid()) + return DocumentPtr(); DocumentPtr aRes = data()->document(DOC_REF())->value(); return aRes; } @@ -138,7 +140,7 @@ bool Model_ResultPart::setDisabled(std::shared_ptr theThis, if (!myTrsf.get()) { // disable of base result part DocumentPtr aDoc = Model_ResultPart::partDoc(); if (aDoc.get() && aDoc->isOpened()) { - // make the current feature the last in any case: to update shapes defore deactivation too + // make the current feature the last in any case: to update shapes before deactivation too int aSize = aDoc->size(ModelAPI_Feature::group()); FeaturePtr aLastFeature; if (aSize) @@ -168,6 +170,8 @@ std::shared_ptr Model_ResultPart::shape() { std::shared_ptr aResult(new GeomAPI_Shape); if (myShape.IsNull()) { // shape is not produced yet, create it + SessionPtr aMgr = ModelAPI_Session::get(); + bool aToSendUpdate = aMgr->isOperation(); // inside of operation may send an update event if (myTrsf.get()) { // get shape of the base result and apply the transformation ResultPtr anOrigResult = baseRef(); std::shared_ptr anOrigShape = anOrigResult->shape(); @@ -179,6 +183,10 @@ std::shared_ptr Model_ResultPart::shape() aResult->setImpl(new TopoDS_Shape(aShape)); } } + if (!myShape.IsNull() && aToSendUpdate) { + static const Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED); + ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent); + } return aResult; } else { DocumentPtr aDoc = Model_ResultPart::partDoc(); @@ -204,9 +212,14 @@ std::shared_ptr Model_ResultPart::shape() } } } + if (!myShape.IsNull() && aToSendUpdate) { + static const Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED); + ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent); + } } - if (!myShape.IsNull()) + if (!myShape.IsNull()) { aResult->setImpl(new TopoDS_Shape(myShape)); + } return aResult; } @@ -272,7 +285,7 @@ std::string Model_ResultPart::nameInPart(const std::shared_ptr& t TopoDS_Shape aBodyShape = *(aBody->shape()->implPtr()); // check is body contain the selected sub-shape for(TopExp_Explorer anExp(aBodyShape, aShape.ShapeType()); anExp.More(); anExp.Next()) { - if (aShape.IsEqual(anExp.Current())) { + if (aShape.IsSame(anExp.Current())) { aContext = aBody; break; } @@ -311,6 +324,24 @@ gp_Trsf Model_ResultPart::sumTrsf() { return aResult; } +bool Model_ResultPart::combineGeometrical(const int theIndex, std::string& theNewName) +{ + std::shared_ptr aDoc = std::dynamic_pointer_cast(partDoc()); + if (aDoc.get()) { + AttributeSelectionListPtr aSelAttr = aDoc->selectionInPartFeature(); + AttributeSelectionPtr aThisAttr = aSelAttr->value(theIndex - 1); + if (aThisAttr.get()) { + aThisAttr->combineGeometrical(); + if (aThisAttr->value().get()) { + int anIndex; + theNewName = nameInPart(aThisAttr->value(), anIndex); + return true; + } + } + } + return false; // something is wrong +} + std::shared_ptr Model_ResultPart::shapeInPart( const std::string& theName, const std::string& theType, int& theIndex) { @@ -384,3 +415,10 @@ void Model_ResultPart::setTrsf(std::shared_ptr theThis, static Events_ID EVENT_DISP = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY); ModelAPI_EventCreator::get()->sendUpdated(theThis, EVENT_DISP); // flush is in preview-update } + +std::shared_ptr Model_ResultPart::summaryTrsf() +{ + GeomTrsfPtr aResult(new GeomAPI_Trsf); + aResult->setImpl(new gp_Trsf(sumTrsf())); + return aResult; +}