-// 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
//
// 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 <GDMLPlugin_Ellipsoid.h>
+#include <GeomAPI_ShapeExplorer.h>
+
#include <ModelAPI_Data.h>
#include <ModelAPI_ResultBody.h>
#include <ModelAPI_AttributeDouble.h>
#include <ModelAPI_AttributeString.h>
+#include <sstream>
+
//=================================================================================================
GDMLPlugin_Ellipsoid::GDMLPlugin_Ellipsoid() // Nothing to do during instantiation
{
void GDMLPlugin_Ellipsoid::execute()
{
std::shared_ptr<GeomAlgoAPI_Ellipsoid> anEllipsoidAlgo;
-
+
double aAx = real(AX_ID())->value();
double aBy = real(BY_ID())->value();
double aCz = real(CZ_ID())->value();
-
+
std::string useZCut1 = string(USE_ZCUT1_ID())->value();
std::string useZCut2 = string(USE_ZCUT2_ID())->value();
-
+
double aZCut1 = 0.;
if (useZCut1.empty()) {
aZCut1 = aCz /2.;
} else {
aZCut2 = real(ZCUT2_ID())->value();
}
-
+
anEllipsoidAlgo = std::shared_ptr<GeomAlgoAPI_Ellipsoid>(
new GeomAlgoAPI_Ellipsoid(aAx, aBy, aCz, aZCut1, aZCut2));
-
+
// Check with that the arguments for anEllipsoidAlgo are correct
- if (!anEllipsoidAlgo->check()){
- setError(anEllipsoidAlgo->getError(), false);
+ if (!anEllipsoidAlgo->check()) {
+ setError(anEllipsoidAlgo->getError(), false);
return;
}
setError(anEllipsoidAlgo->getError(), false);
return;
}
-
+
// Check if the created ellipsoid is valid
if (!anEllipsoidAlgo->checkValid("Ellipsoid builder")) {
setError(anEllipsoidAlgo->getError(), false);
return;
}
- int aResultIndex = 0;
- ResultBodyPtr aResultEllipsoid = document()->createBody(data(), aResultIndex);
+ int aResultIndex = 0;
+ ResultBodyPtr aResultEllipsoid = document()->createBody(data(), aResultIndex);
loadNamingDS(anEllipsoidAlgo, aResultEllipsoid);
setResult(aResultEllipsoid, aResultIndex);
{
// Load the result
theResultEllipsoid->store(theEllipsoidAlgo->shape());
-
+
// Prepare the naming
theEllipsoidAlgo->prepareNamingFaces();
-
+
// Insert to faces
- int num = 1;
+ // Naming for faces and edges
std::map< std::string, std::shared_ptr<GeomAPI_Shape> > listOfFaces =
- theEllipsoidAlgo->getCreatedFaces();
- for (std::map< std::string, std::shared_ptr<GeomAPI_Shape> >::iterator
- it=listOfFaces.begin(); it!=listOfFaces.end(); ++it) {
- std::shared_ptr<GeomAPI_Shape> aFace = (*it).second;
- theResultEllipsoid->generated(aFace, (*it).first, num++);
+ theEllipsoidAlgo->getCreatedFaces();
+ for (std::map< std::string, std::shared_ptr<GeomAPI_Shape> >::iterator it = listOfFaces.begin();
+ it!=listOfFaces.end();
+ ++it)
+ {
+ theResultEllipsoid->generated((*it).second, (*it).first);
+ }
+
+ // Naming vertices
+ GeomAPI_DataMapOfShapeShape aVertices;
+ int anIndex = 1;
+ for (GeomAPI_ShapeExplorer aVertExp(theEllipsoidAlgo->shape(), GeomAPI_Shape::VERTEX);
+ aVertExp.more();
+ aVertExp.next())
+ {
+ if (!aVertices.isBound(aVertExp.current())) {
+ std::ostringstream aStream;
+ aStream<<"Vertex_"<<anIndex++;
+ theResultEllipsoid->generated(aVertExp.current(), aStream.str());
+ aVertices.bind(aVertExp.current(), aVertExp.current());
+ }
}
}