-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2020 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
//
// 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<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "ModelHighAPI_Selection.h"
#include <ModelAPI_AttributeSelection.h>
#include <ModelAPI_AttributeSelectionList.h>
#include <ModelAPI_Feature.h>
-#include <ModelAPI_ResultCompSolid.h>
+#include <ModelAPI_ResultBody.h>
+
+
+#include <GeomAPI_Pnt.h>
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
{
}
+ModelHighAPI_Selection::ModelHighAPI_Selection(const std::string& theType,
+ const GeomPointPtr& theSubShapeInnerPoint)
+: myVariantType(VT_TypeInnerPointPair)
+, myTypeInnerPointPair(theType, theSubShapeInnerPoint)
+{
+}
+
+ModelHighAPI_Selection::ModelHighAPI_Selection(const std::string& theType,
+ const std::list<double>& theSubShapeInnerPoint)
+: myVariantType(VT_TypeInnerPointPair)
+{
+ double aCoordinates[3] = { 0.0, 0.0, 0.0 };
+ double* aCIt = aCoordinates;
+ std::list<double>::const_iterator aPIt = theSubShapeInnerPoint.begin();
+ for (; aPIt != theSubShapeInnerPoint.end(); ++aPIt, ++aCIt)
+ *aCIt = *aPIt;
+
+ GeomPointPtr anInnerPoint(new GeomAPI_Pnt(aCoordinates[0], aCoordinates[1], aCoordinates[2]));
+ myTypeInnerPointPair = std::pair<std::string, GeomPointPtr>(theType, anInnerPoint);
+}
+
+ModelHighAPI_Selection::ModelHighAPI_Selection(const std::string& theType,
+ const std::string& theContextName, const int theIndex)
+ : myVariantType(VT_WeakNamingPair)
+ , myWeakNamingPair(theType, std::pair<std::string, int>(theContextName, theIndex))
+{
+}
+
+
ModelHighAPI_Selection::~ModelHighAPI_Selection()
{
}
return;
case VT_TypeSubShapeNamePair:
theAttribute->selectSubShape(myTypeSubShapeNamePair.first, myTypeSubShapeNamePair.second);
- if(theAttribute->isInvalid()) {
- FeaturePtr aFeature = ModelAPI_Feature::feature(theAttribute->owner());
- aFeature->setError(
- std::string("Error: attribute \"") + theAttribute->id() + std::string("\" is invalid."));
- }
+ break;
+ case VT_TypeInnerPointPair:
+ theAttribute->selectSubShape(myTypeInnerPointPair.first, myTypeInnerPointPair.second);
return;
+ case VT_WeakNamingPair:
+ theAttribute->selectSubShape(
+ myWeakNamingPair.first, myWeakNamingPair.second.first, myWeakNamingPair.second.second);
+ break;
+ case VT_Filtering:
+ break; // do nothing [to avoid compilation warning]
+ }
+
+ if (theAttribute->isInvalid()) {
+ FeaturePtr aFeature = ModelAPI_Feature::feature(theAttribute->owner());
+ aFeature->setError(
+ std::string("Error: attribute \"") + theAttribute->id() + std::string("\" is invalid."));
}
}
// Note: the reverse order (first - type, second - sub-shape name)
theAttribute->append(myTypeSubShapeNamePair.second, myTypeSubShapeNamePair.first);
return;
+ case VT_TypeInnerPointPair:
+ // Note: the reverse order (first - type, second - selected point)
+ theAttribute->append(myTypeInnerPointPair.second, myTypeInnerPointPair.first);
+ return;
+ case VT_WeakNamingPair:
+ // Note: the reverse order (first - type, second - selected point)
+ theAttribute->append(
+ myWeakNamingPair.first, myWeakNamingPair.second.first, myWeakNamingPair.second.second);
+ return;
+ case VT_Filtering:
+ theAttribute->setFilters(myFilterFeature);
+ return;
}
}
return myTypeSubShapeNamePair;
}
+//==================================================================================================
+TypeInnerPointPair ModelHighAPI_Selection::typeInnerPointPair() const
+{
+ return myTypeInnerPointPair;
+}
+
+//==================================================================================================
+TypeWeakNamingPair ModelHighAPI_Selection::typeWeakNamingPair() const
+{
+ return myWeakNamingPair;
+}
+
//==================================================================================================
std::string ModelHighAPI_Selection::shapeType() const
{
return myResultSubShapePair.second.get() ? myResultSubShapePair.second->shapeTypeStr() :
myResultSubShapePair.first->shape()->shapeTypeStr();
case VT_TypeSubShapeNamePair: return myTypeSubShapeNamePair.first;
+ case VT_TypeInnerPointPair: return myTypeInnerPointPair.first;
+ default:
+ break; // do nothing [to avoid compilation warning]
}
return "SHAPE";
aDeflectionAttr->setValue(theValue);
}
+// LCOV_EXCL_START
void ModelHighAPI_Selection::setTransparency(double theValue)
{
if (myVariantType != VT_ResultSubShapePair)
aTransparencyAttr->setValue(theValue);
}
+// LCOV_EXCL_STOP
int ModelHighAPI_Selection::numberOfSubs() const
{
if (myVariantType != VT_ResultSubShapePair)
return 0;
- ResultCompSolidPtr aCompSolid =
- std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(myResultSubShapePair.first);
- if (!aCompSolid)
+ ResultBodyPtr aBody = std::dynamic_pointer_cast<ModelAPI_ResultBody>(myResultSubShapePair.first);
+ if (!aBody.get())
return 0;
- return aCompSolid->numberOfSubs();
+ return aBody->numberOfSubs();
}
ModelHighAPI_Selection ModelHighAPI_Selection::subResult(int theIndex) const
if (myVariantType != VT_ResultSubShapePair)
return ModelHighAPI_Selection();
- ResultCompSolidPtr aCompSolid =
- std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(myResultSubShapePair.first);
- if (!aCompSolid)
+ ResultBodyPtr aBody = std::dynamic_pointer_cast<ModelAPI_ResultBody>(myResultSubShapePair.first);
+ if (!aBody)
+ return ModelHighAPI_Selection();
+ if (theIndex >= aBody->numberOfSubs())
return ModelHighAPI_Selection();
- ResultBodyPtr aResult = aCompSolid->subResult(theIndex);
+ ResultBodyPtr aResult = aBody->subResult(theIndex);
return ModelHighAPI_Selection(aResult, aResult->shape());
}