X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelHighAPI%2FModelHighAPI_Selection.cpp;h=fb0697635dd2b855552aa3ebd974c3a54e6a6524;hb=2054879244f3323c305222c79c57d2db6a487538;hp=e997aa4e01db5cd53d2304e9e7f9c4de986de32a;hpb=c040abb8ae7ecff3c1b7d0dd97a9bf88972df93c;p=modules%2Fshaper.git diff --git a/src/ModelHighAPI/ModelHighAPI_Selection.cpp b/src/ModelHighAPI/ModelHighAPI_Selection.cpp index e997aa4e0..fb0697635 100644 --- a/src/ModelHighAPI/ModelHighAPI_Selection.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Selection.cpp @@ -1,5 +1,6 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D // Name : ModelHighAPI_Selection.cpp -// Purpose: +// Purpose: // // History: // 06/06/16 - Sergey POKHODENKO - Creation of the file @@ -7,20 +8,29 @@ //-------------------------------------------------------------------------------------- #include "ModelHighAPI_Selection.h" +#include +#include #include #include //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- +ModelHighAPI_Selection::ModelHighAPI_Selection() +: myVariantType(VT_Empty) +{ +} + ModelHighAPI_Selection::ModelHighAPI_Selection(const std::shared_ptr& theContext, const std::shared_ptr& theSubShape) -: myValue(ResultSubShapePair(theContext, theSubShape)) +: myVariantType(VT_ResultSubShapePair) +, myResultSubShapePair(theContext, theSubShape) { } ModelHighAPI_Selection::ModelHighAPI_Selection(const std::string& theType, const std::string& theSubShapeName) -: myValue(TypeSubShapeNamePair(theType, theSubShapeName)) +: myVariantType(VT_TypeSubShapeNamePair) +, myTypeSubShapeNamePair(theType, theSubShapeName) { } @@ -29,40 +39,94 @@ ModelHighAPI_Selection::~ModelHighAPI_Selection() } //-------------------------------------------------------------------------------------- -struct fill_visitor : boost::static_visitor -{ - mutable std::shared_ptr myAttribute; - - fill_visitor(const std::shared_ptr & theAttribute) - : myAttribute(theAttribute) {} - - void operator()(const ResultSubShapePair & thePair) const { myAttribute->setValue(thePair.first, thePair.second); } - void operator()(const TypeSubShapeNamePair & thePair) const { myAttribute->selectSubShape(thePair.first, thePair.second); } -}; - void ModelHighAPI_Selection::fillAttribute( const std::shared_ptr & theAttribute) const { - boost::apply_visitor(fill_visitor(theAttribute), myValue); + switch(myVariantType) { + case VT_Empty: return; + case VT_ResultSubShapePair: + theAttribute->setValue(myResultSubShapePair.first, myResultSubShapePair.second); + return; + case VT_TypeSubShapeNamePair: + theAttribute->selectSubShape(myTypeSubShapeNamePair.first, myTypeSubShapeNamePair.second); + return; + } } //-------------------------------------------------------------------------------------- -struct append_visitor : boost::static_visitor +void ModelHighAPI_Selection::appendToList( + const std::shared_ptr & theAttribute) const +{ + switch(myVariantType) { + case VT_Empty: return; + case VT_ResultSubShapePair: + theAttribute->append(myResultSubShapePair.first, myResultSubShapePair.second); + return; + case VT_TypeSubShapeNamePair: + // Note: the reverse order (first - type, second - sub-shape name) + theAttribute->append(myTypeSubShapeNamePair.second, myTypeSubShapeNamePair.first); + return; + } +} + +//================================================================================================== +ModelHighAPI_Selection::VariantType ModelHighAPI_Selection::variantType() const +{ + return myVariantType; +} + +//================================================================================================== +ResultSubShapePair ModelHighAPI_Selection::resultSubShapePair() const { - mutable std::shared_ptr myAttribute; + return myResultSubShapePair; +} - append_visitor(const std::shared_ptr & theAttribute) - : myAttribute(theAttribute) {} +//================================================================================================== +TypeSubShapeNamePair ModelHighAPI_Selection::typeSubShapeNamePair() const +{ + return myTypeSubShapeNamePair; +} - void operator()(const ResultSubShapePair & thePair) const { myAttribute->append(thePair.first, thePair.second); } - void operator()(const TypeSubShapeNamePair & thePair) const { - // Note: the reverse order (first - type, second - sub-shape name) - myAttribute->append(thePair.second, thePair.first); +//================================================================================================== +std::string ModelHighAPI_Selection::shapeType() const +{ + switch(myVariantType) { + case VT_ResultSubShapePair: + return myResultSubShapePair.second.get() ? myResultSubShapePair.second->shapeTypeStr() : + myResultSubShapePair.first->shape()->shapeTypeStr(); + case VT_TypeSubShapeNamePair: return myTypeSubShapeNamePair.first; } -}; -void ModelHighAPI_Selection::appendToList( - const std::shared_ptr & theAttribute) const + return "SHAPE"; +} + +//================================================================================================== +void ModelHighAPI_Selection::setName(const std::string& theName) { - boost::apply_visitor(append_visitor(theAttribute), myValue); + if (myVariantType == VT_ResultSubShapePair) + myResultSubShapePair.first->data()->setName(theName); +} + +void ModelHighAPI_Selection::setColor(int theRed, int theGreen, int theBlue) +{ + if (myVariantType != VT_ResultSubShapePair) + return; + + AttributeIntArrayPtr aColor = + myResultSubShapePair.first->data()->intArray(ModelAPI_Result::COLOR_ID()); + aColor->setSize(3); + aColor->setValue(0, theRed); + aColor->setValue(1, theGreen); + aColor->setValue(2, theBlue); +} + +void ModelHighAPI_Selection::setDeflection(double theValue) +{ + if (myVariantType != VT_ResultSubShapePair) + return; + + AttributeDoublePtr aDeflectionAttr = + myResultSubShapePair.first->data()->real(ModelAPI_Result::DEFLECTION_ID()); + + aDeflectionAttr->setValue(theValue); }