X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_ResultGroup.cpp;h=87d1620f6b3644f3525ac35273734dda34f595b8;hb=95375993f1f35e4716475c0b0c8e265c082c875d;hp=a0a5922cd056249e7e3fbec64597e0d29d63dd08;hpb=31e91a8d11e03ddce87e8c2aa04695961a266a97;p=modules%2Fshaper.git diff --git a/src/Model/Model_ResultGroup.cpp b/src/Model/Model_ResultGroup.cpp index a0a5922cd..87d1620f6 100644 --- a/src/Model/Model_ResultGroup.cpp +++ b/src/Model/Model_ResultGroup.cpp @@ -1,41 +1,71 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: Model_ResultGroup.cpp -// Created: 08 Jul 2014 -// Author: Mikhail PONIKAROV +// 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 +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include +#include #include -#include #include #include +#include +#include +#include +#include +#include + Model_ResultGroup::Model_ResultGroup(std::shared_ptr theOwnerData) { - setIsConcealed(false); myOwnerData = theOwnerData; } -void Model_ResultGroup::initAttributes() +void Model_ResultGroup::colorConfigInfo(std::string& theSection, std::string& theName, + std::string& theDefault) { - // append the color attribute - DataPtr aData = data(); - aData->addAttribute(COLOR_ID(), ModelAPI_AttributeIntArray::type()); - AttributeIntArrayPtr aColorAttr = aData->intArray(COLOR_ID()); - std::vector aRGB; - aRGB = Config_PropManager::color("Visualization", "result_group_color", DEFAULT_COLOR()); - aColorAttr->setSize(3); - aColorAttr->setValue(0, aRGB[0]); - aColorAttr->setValue(1, aRGB[1]); - aColorAttr->setValue(2, aRGB[2]); + theSection = "Visualization"; + theName = "result_group_color"; + theDefault = DEFAULT_COLOR(); } std::shared_ptr Model_ResultGroup::shape() { std::shared_ptr aResult; - if (myOwnerData) { + // obtain stored shape + std::shared_ptr aData = std::dynamic_pointer_cast(data()); + if (aData && aData->isValid()) { + TDF_Label aShapeLab = aData->shapeLab(); + Handle(TDF_Reference) aRef; + if (aShapeLab.FindAttribute(TDF_Reference::GetID(), aRef)) { + aShapeLab = aRef->Get(); + } + Handle(TNaming_NamedShape) aName; + if (aShapeLab.FindAttribute(TNaming_NamedShape::GetID(), aName)) { + TopoDS_Shape aShape = aName->Get(); + if (!aShape.IsNull()) { + aResult.reset(new GeomAPI_Shape); + aResult->setImpl(new TopoDS_Shape(aShape)); + } + } + } + // collect shapes selected in group + if (!aResult && myOwnerData) { AttributeSelectionListPtr aList = myOwnerData->selectionList("group_list"); if (aList) { std::list > aSubs; @@ -52,3 +82,23 @@ std::shared_ptr Model_ResultGroup::shape() } return aResult; } + +void Model_ResultGroup::store(const GeomShapePtr& theShape) +{ + std::shared_ptr aData = std::dynamic_pointer_cast(data()); + if (aData) { + TDF_Label aShapeLab = aData->shapeLab(); + aShapeLab.ForgetAttribute(TDF_Reference::GetID()); + aShapeLab.ForgetAttribute(TNaming_NamedShape::GetID()); + + if (!theShape) + return; // bad shape + TopoDS_Shape aShape = theShape->impl(); + if (aShape.IsNull()) + return; // null shape inside + + // store the new shape as primitive + TNaming_Builder aBuilder(aShapeLab); + aBuilder.Generated(aShape); + } +}