Salome HOME
Task 2.5. Combination operations on Groups (issue #2935)
[modules/shaper.git] / src / GDMLPlugin / GDMLPlugin_Ellipsoid.cpp
index db962dcfefec093245830186f0bb82c44936df49..4f92544391afae0d83f07ccbae8c70c6f8f0a3c3 100644 (file)
@@ -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
 //
 // 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
 {
@@ -46,14 +49,14 @@ void GDMLPlugin_Ellipsoid::initAttributes()
 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.;
@@ -66,13 +69,13 @@ void GDMLPlugin_Ellipsoid::execute()
   } 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;
   }
 
@@ -83,15 +86,15 @@ void GDMLPlugin_Ellipsoid::execute()
     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);
 
@@ -103,18 +106,34 @@ void GDMLPlugin_Ellipsoid::loadNamingDS(std::shared_ptr<GeomAlgoAPI_Ellipsoid> t
 {
   // 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());
+    }
   }
 }