]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Add visualization for bounding Box
authorJérôme <jerome.lucas@cesgenslab.fr>
Tue, 24 Nov 2020 10:10:43 +0000 (11:10 +0100)
committerJérôme <jerome.lucas@cesgenslab.fr>
Tue, 24 Nov 2020 10:10:43 +0000 (11:10 +0100)
src/FeaturesAPI/FeaturesAPI_BoundingBox.cpp
src/FeaturesPlugin/CMakeLists.txt
src/FeaturesPlugin/FeaturesPlugin_BoundingBox.cpp
src/FeaturesPlugin/FeaturesPlugin_BoundingBox.h
src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.cpp [new file with mode: 0644]
src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.h [new file with mode: 0644]
src/FeaturesPlugin/FeaturesPlugin_CreateBoundingBox.cpp
src/FeaturesPlugin/FeaturesPlugin_CreateBoundingBox.h
src/FeaturesPlugin/Test/TestBoundingBox.py

index 4d989d0a99a54722690760a33d9f54f10f21ab62..19191a09ba2e45f705cdc12acf0bf41ce21ccb4a 100644 (file)
@@ -28,7 +28,7 @@
 #include <ModelHighAPI_Selection.h>
 #include <ModelHighAPI_Tools.h>
 
-
+//=================================================================================================
 FeaturesAPI_BoundingBox::
           FeaturesAPI_BoundingBox(const std::shared_ptr<ModelAPI_Feature>& theFeature)
   : ModelHighAPI_Interface(theFeature)
@@ -36,6 +36,7 @@ FeaturesAPI_BoundingBox::
   initialize();
 }
 
+//=================================================================================================
 FeaturesAPI_BoundingBox::FeaturesAPI_BoundingBox(
                                     const std::shared_ptr<ModelAPI_Feature>& theFeature,
                                     const ModelHighAPI_Selection& theobject)
@@ -47,11 +48,12 @@ FeaturesAPI_BoundingBox::FeaturesAPI_BoundingBox(
   }
 }
 
-
+//=================================================================================================
 FeaturesAPI_BoundingBox::~FeaturesAPI_BoundingBox()
 {
 }
 
+//=================================================================================================
 void FeaturesAPI_BoundingBox::dump(ModelHighAPI_Dumper& theDumper) const
 {
   FeaturePtr aBase = feature();
@@ -65,6 +67,7 @@ void FeaturesAPI_BoundingBox::dump(ModelHighAPI_Dumper& theDumper) const
   theDumper << ")" << std::endl;
 }
 
+//=================================================================================================
 BoundingBoxPtr getBoundingBox(const std::shared_ptr<ModelAPI_Document>& thePart,
                     const ModelHighAPI_Selection& theobject)
 {
index 0e26bae5d6ff0aac6f076990d85069a36771b556..ec8382c3ed855148fc0d37f10acfaebdbb7cb659 100644 (file)
@@ -73,6 +73,7 @@ SET(PROJECT_HEADERS
     FeaturesPlugin_GeometryCalculation.h
     FeaturesPlugin_BoundingBox.h
     FeaturesPlugin_CreateBoundingBox.h
+    FeaturesPlugin_CommonBoundingBox.h
     FeaturesPlugin_FusionFaces.h
     FeaturesPlugin_RemoveResults.h
     FeaturesPlugin_Chamfer.h
@@ -123,6 +124,7 @@ SET(PROJECT_SOURCES
     FeaturesPlugin_GeometryCalculation.cpp
     FeaturesPlugin_BoundingBox.cpp
     FeaturesPlugin_CreateBoundingBox.cpp
+    FeaturesPlugin_CommonBoundingBox.cpp
     FeaturesPlugin_FusionFaces.cpp
     FeaturesPlugin_RemoveResults.cpp
     FeaturesPlugin_Chamfer.cpp
index fe83ea07d390f1a86494bc18785a3f062bed40ab..0b92fcea4bc85e6e90eb6d437cf7fadc1d8a59e5 100644 (file)
 #include <ModelAPI_AttributeSelection.h>
 #include <ModelAPI_AttributeDoubleArray.h>
 #include <ModelAPI_AttributeBoolean.h>
-#include <GeomAlgoAPI_BoundingBox.h>
 #include <ModelAPI_AttributeString.h>
+
+#include <GeomAlgoAPI_BoundingBox.h>
+
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
-#include <GeomAlgoAPI_PointBuilder.h>
-#include <GeomAPI_Vertex.h>
 #include <Config_PropManager.h>
-#include <ModelAPI_ResultBody.h>
 
 #include <FeaturesPlugin_CreateBoundingBox.h>
 
 #include <iomanip>
 #include <sstream>
-#include <iostream>
 
+//=================================================================================================
 FeaturesPlugin_BoundingBox::FeaturesPlugin_BoundingBox()
 {
 }
 
+//=================================================================================================
 void FeaturesPlugin_BoundingBox::initAttributes()
 {
   // attribute for object selected
@@ -70,17 +70,18 @@ void FeaturesPlugin_BoundingBox::initAttributes()
 
 }
 
+//=================================================================================================
 void FeaturesPlugin_BoundingBox::execute()
 {
   updateValues();
-  if(boolean(CREATEBOX_ID())->value())
-  {
-    if( !myCreateFeature.get() )
+  createBoxByTwoPoints();
+
+  if (boolean(CREATEBOX_ID())->value()) {
+    if (!myCreateFeature.get())
       createBox();
     updateBox();
-  }else{
-    if( myCreateFeature.get() )
-    {
+  } else {
+    if (myCreateFeature.get()) {
       myCreateFeature->eraseResults();
       SessionPtr aSession = ModelAPI_Session::get();
       DocumentPtr aDoc =  aSession->activeDocument();
@@ -90,15 +91,24 @@ void FeaturesPlugin_BoundingBox::execute()
   }
 }
 
+//=================================================================================================
 void FeaturesPlugin_BoundingBox::attributeChanged(const std::string& theID)
 {
   if (theID == OBJECTS_LIST_ID()) {
     updateValues();
-    if( myCreateFeature.get() )
+    createBoxByTwoPoints();
+    if (myCreateFeature.get())
       updateBox();
   }
 }
 
+//=================================================================================================
+AttributePtr FeaturesPlugin_BoundingBox::attributResultValues()
+{
+   return attribute(RESULT_VALUES_ID());
+}
+
+//=================================================================================================
 void FeaturesPlugin_BoundingBox::updateValues()
 {
   AttributeSelectionPtr aSelection = selection(OBJECTS_LIST_ID());
@@ -116,10 +126,10 @@ void FeaturesPlugin_BoundingBox::updateValues()
     if (!aShape && aSelection->context())
       aShape = aSelection->context()->shape();
   }
-  if (aShape){
+  if (aShape) {
     double aXmin, aXmax, aYmin,aYmax,aZmin,aZmax;
           std::string aError;
-    if!GetBoundingBox(aShape,
+    if (!GetBoundingBox(aShape,
                         true,
                         aXmin, aXmax,
                         aYmin,aYmax,
@@ -161,6 +171,7 @@ void FeaturesPlugin_BoundingBox::createBox()
   }
 }
 
+//=================================================================================================
 void FeaturesPlugin_BoundingBox::updateBox()
 {
     myCreateFeature->selection(FeaturesPlugin_CreateBoundingBox::OBJECTS_LIST_ID())
index 0aceb4e4c0ed4dde6468f2270b5ecfbb1a7a9cda..cb1f1aacd967b45eb0e9af530ff7b14cd8a6d99f 100644 (file)
 #ifndef FeaturesPlugin_BoundingBox_H_
 #define FeaturesPlugin_BoundingBox_H_
 
-#include "FeaturesPlugin.h"
-#include <ModelAPI_Feature.h>
-
-#include <GeomAPI_IPresentable.h>
-#include <GeomAPI_IScreenParams.h>
-#include <GeomAlgoAPI_Box.h>
+#include <FeaturesPlugin_CommonBoundingBox.h>
 
 /// \class FeaturesPlugin_BoundingBox
 /// \ingroup Plugins
 /// \brief Feature to view the Bounding Box.
 
-class FeaturesPlugin_BoundingBox : public ModelAPI_Feature
+class FeaturesPlugin_BoundingBox : public FeaturesPlugin_CommonBoundingBox
 {
 public:
    inline static const std::string& ID()
@@ -74,7 +69,7 @@ public:
     return MY_Z_MIN_COOD_ID;
   }
 
-    /// Attribute name for x max coodinate.
+  /// Attribute name for x max coodinate.
   inline static const std::string& X_MAX_COOD_ID()
   {
     static const std::string MY_X_MAX_COOD_ID("xmaxcoordinate");
@@ -126,9 +121,17 @@ public:
   FeaturesPlugin_BoundingBox();
 
   private:
+  /// Return Attribut values of result.
+  virtual AttributePtr attributResultValues();
+
+  /// Update values displayed.
   void updateValues();
+  /// Create Box
   void createBox();
+  /// Update Box
   void updateBox();
+
+  /// Feature to create box
   FeaturePtr myCreateFeature;
 
 };
diff --git a/src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.cpp b/src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.cpp
new file mode 100644 (file)
index 0000000..6edc825
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright (C) 2018-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
+// 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 "FeaturesPlugin_CommonBoundingBox.h"
+
+#include <ModelAPI_AttributeSelection.h>
+#include <ModelAPI_AttributeDoubleArray.h>
+#include <ModelAPI_AttributeBoolean.h>
+#include <ModelAPI_AttributeDouble.h>
+#include <GeomAlgoAPI_BoundingBox.h>
+#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_Data.h>
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Validator.h>
+#include <GeomAlgoAPI_PointBuilder.h>
+#include <GeomAPI_Vertex.h>
+#include <Config_PropManager.h>
+#include <ModelAPI_ResultBody.h>
+#include <GeomAlgoAPI_ShapeTools.h>
+
+#include <PrimitivesPlugin_Box.h>
+
+#include <iomanip>
+#include <sstream>
+#include <iostream>
+
+
+//=================================================================================================
+void FeaturesPlugin_CommonBoundingBox::createBoxByTwoPoints()
+{
+  AttributeDoubleArrayPtr aValues =
+      std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>(attributResultValues());
+
+  SessionPtr aSession = ModelAPI_Session::get();
+
+  DocumentPtr aDoc =  aSession->activeDocument();
+
+  GeomVertexPtr vertexFirst =
+          GeomAlgoAPI_PointBuilder::vertex( aValues->value(0),
+                                            aValues->value(2),
+                                            aValues->value(4));
+
+  GeomVertexPtr  vertexSecond =
+          GeomAlgoAPI_PointBuilder::vertex( aValues->value(1),
+                                            aValues->value(3),
+                                            aValues->value(5));
+
+
+  std::shared_ptr<GeomAlgoAPI_Box> aBoxAlgo;
+
+
+  aBoxAlgo = std::shared_ptr<GeomAlgoAPI_Box>(
+                          new GeomAlgoAPI_Box(vertexFirst->point(),vertexSecond->point()));
+
+
+  // These checks should be made to the GUI for the feature but
+  // the corresponding validator does not exist yet.
+  if (!aBoxAlgo->check()) {
+    setError(aBoxAlgo->getError());
+    return;
+  }
+
+  // Build the box
+  aBoxAlgo->build();
+
+  // Check if the creation of the box
+  if (!aBoxAlgo->isDone()) {
+    // The error is not displayed in a popup window. It must be in the message console.
+    setError(aBoxAlgo->getError());
+    return;
+  }
+  if (!aBoxAlgo->checkValid("Box builder with two points")) {
+    // The error is not displayed in a popup window. It must be in the message console.
+    setError(aBoxAlgo->getError());
+    return;
+  }
+
+  int aResultIndex = 0;
+  ResultBodyPtr aResultBox = document()->createBody(data(), aResultIndex);
+  loadNamingDS(aBoxAlgo, aResultBox);
+  setResult(aResultBox, aResultIndex);
+}
+
+//=================================================================================================
+void FeaturesPlugin_CommonBoundingBox::loadNamingDS(std::shared_ptr<GeomAlgoAPI_Box> theBoxAlgo,
+                                        std::shared_ptr<ModelAPI_ResultBody> theResultBox)
+{
+  // Load the result
+  theResultBox->store(theBoxAlgo->shape());
+
+  // Prepare the naming
+  theBoxAlgo->prepareNamingFaces();
+
+  // Insert to faces
+  std::map< std::string, std::shared_ptr<GeomAPI_Shape> > listOfFaces =
+    theBoxAlgo->getCreatedFaces();
+  for (std::map< std::string, std::shared_ptr<GeomAPI_Shape> >::iterator it = listOfFaces.begin();
+       it != listOfFaces.end();
+       ++it) {
+    theResultBox->generated((*it).second, (*it).first);
+  }
+}
+
diff --git a/src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.h b/src/FeaturesPlugin/FeaturesPlugin_CommonBoundingBox.h
new file mode 100644 (file)
index 0000000..18ba759
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright (C) 2018-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
+// 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
+//
+
+#ifndef FeaturesPlugin_CommonBoundingBox_H_
+#define FeaturesPlugin_CommonBoundingBox_H_
+
+#include "FeaturesPlugin.h"
+#include <ModelAPI_Feature.h>
+
+#include <GeomAPI_IPresentable.h>
+#include <GeomAPI_IScreenParams.h>
+#include <GeomAlgoAPI_Box.h>
+
+#include <ModelAPI_Attribute.h>
+
+/// \class FeaturesPlugin_CommonBoundingBox
+/// \ingroup Plugins
+/// \brief Feature to view the Bounding Box.
+
+class FeaturesPlugin_CommonBoundingBox : public ModelAPI_Feature
+{
+public:
+
+  /// Performs the algorithm and stores results it in the data structure.
+  FEATURESPLUGIN_EXPORT virtual void execute(){};
+
+  /// Return Attribut values of result.
+  virtual AttributePtr attributResultValues() = 0;
+
+  protected:
+  FeaturesPlugin_CommonBoundingBox() {}
+
+  /// Create box with two points
+  void createBoxByTwoPoints();
+
+  /// Create namming
+  void loadNamingDS(std::shared_ptr<GeomAlgoAPI_Box> theBoxAlgo,
+                    std::shared_ptr<ModelAPI_ResultBody> theResultBox);
+
+};
+
+#endif
index 6218cc8e34fc399078f46d2e4247888775169002..df636ce899f220b24b87041f2b7ed3ed6cf3be8a 100644 (file)
 #include <ModelAPI_AttributeSelection.h>
 #include <ModelAPI_AttributeDoubleArray.h>
 #include <ModelAPI_AttributeBoolean.h>
-#include <ModelAPI_AttributeDouble.h>
-#include <GeomAlgoAPI_BoundingBox.h>
 #include <ModelAPI_AttributeString.h>
+
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
-#include <GeomAlgoAPI_PointBuilder.h>
-#include <GeomAPI_Vertex.h>
+
+#include <GeomAlgoAPI_BoundingBox.h>
+
 #include <Config_PropManager.h>
 #include <ModelAPI_ResultBody.h>
-#include <GeomAlgoAPI_ShapeTools.h>
 
 #include <PrimitivesPlugin_Box.h>
 
 #include <iomanip>
 #include <sstream>
-#include <iostream>
 
+//=================================================================================================
 FeaturesPlugin_CreateBoundingBox::FeaturesPlugin_CreateBoundingBox()
 {
 }
 
+//=================================================================================================
 void FeaturesPlugin_CreateBoundingBox::initAttributes()
 {
   // attribute for object selected
@@ -70,12 +70,14 @@ void FeaturesPlugin_CreateBoundingBox::initAttributes()
 
 }
 
+//=================================================================================================
 void FeaturesPlugin_CreateBoundingBox::execute()
 {
     updateValues();
     createBoxByTwoPoints();
 }
 
+//=================================================================================================
 void FeaturesPlugin_CreateBoundingBox::attributeChanged(const std::string& theID)
 {
   if (theID == OBJECTS_LIST_ID()) {
@@ -83,6 +85,7 @@ void FeaturesPlugin_CreateBoundingBox::attributeChanged(const std::string& theID
   }
 }
 
+//=================================================================================================
 void FeaturesPlugin_CreateBoundingBox::updateValues()
 {
   AttributeSelectionPtr aSelection = selection(OBJECTS_LIST_ID());
@@ -134,79 +137,7 @@ void FeaturesPlugin_CreateBoundingBox::updateValues()
 }
 
 //=================================================================================================
-void FeaturesPlugin_CreateBoundingBox::createBoxByTwoPoints()
+AttributePtr FeaturesPlugin_CreateBoundingBox::attributResultValues()
 {
-  AttributeDoubleArrayPtr aValues =
-      std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>(attribute(RESULT_VALUES_ID()));
-
-  SessionPtr aSession = ModelAPI_Session::get();
-
-  DocumentPtr aDoc =  aSession->activeDocument();
-
-  GeomVertexPtr vertexFirst =
-          GeomAlgoAPI_PointBuilder::vertex( aValues->value(0),
-                                            aValues->value(2),
-                                            aValues->value(4));
-
-  GeomVertexPtr  vertexSecond =
-          GeomAlgoAPI_PointBuilder::vertex( aValues->value(1),
-                                            aValues->value(3),
-                                            aValues->value(5));
-
-
-  std::shared_ptr<GeomAlgoAPI_Box> aBoxAlgo;
-
-
-  aBoxAlgo = std::shared_ptr<GeomAlgoAPI_Box>(
-                          new GeomAlgoAPI_Box(vertexFirst->point(),vertexSecond->point()));
-
-
-  // These checks should be made to the GUI for the feature but
-  // the corresponding validator does not exist yet.
-  if (!aBoxAlgo->check()) {
-    setError(aBoxAlgo->getError());
-    return;
-  }
-
-  // Build the box
-  aBoxAlgo->build();
-
-  // Check if the creation of the box
-  if(!aBoxAlgo->isDone()) {
-    // The error is not displayed in a popup window. It must be in the message console.
-    setError(aBoxAlgo->getError());
-    return;
-  }
-  if(!aBoxAlgo->checkValid("Box builder with two points")) {
-    // The error is not displayed in a popup window. It must be in the message console.
-    setError(aBoxAlgo->getError());
-    return;
-  }
-
-  int aResultIndex = 0;
-  ResultBodyPtr aResultBox = document()->createBody(data(), aResultIndex);
-  loadNamingDS(aBoxAlgo, aResultBox);
-  setResult(aResultBox, aResultIndex);
-}
-
-//=================================================================================================
-void FeaturesPlugin_CreateBoundingBox::loadNamingDS(std::shared_ptr<GeomAlgoAPI_Box> theBoxAlgo,
-                                        std::shared_ptr<ModelAPI_ResultBody> theResultBox)
-{
-  // Load the result
-  theResultBox->store(theBoxAlgo->shape());
-
-  // Prepare the naming
-  theBoxAlgo->prepareNamingFaces();
-
-  // Insert to faces
-  std::map< std::string, std::shared_ptr<GeomAPI_Shape> > listOfFaces =
-    theBoxAlgo->getCreatedFaces();
-  for (std::map< std::string, std::shared_ptr<GeomAPI_Shape> >::iterator it = listOfFaces.begin();
-       it != listOfFaces.end();
-       ++it)
-  {
-    theResultBox->generated((*it).second, (*it).first);
-  }
+   return attribute(RESULT_VALUES_ID());
 }
-
index d80cde3aeba1529bb74e20c68d6dd681cd2396cc..d06732c26ffb62aa23bff49973545320f76b5f1c 100644 (file)
 #ifndef FeaturesPlugin_CreateBoundingBox_H_
 #define FeaturesPlugin_CreateBoundingBox_H_
 
-#include "FeaturesPlugin.h"
-#include <ModelAPI_Feature.h>
-
-#include <GeomAPI_IPresentable.h>
-#include <GeomAPI_IScreenParams.h>
-#include <GeomAlgoAPI_Box.h>
+#include <FeaturesPlugin_CommonBoundingBox.h>
 
 /// \class FeaturesPlugin_BoundingBox
 /// \ingroup Plugins
 /// \brief Feature to view the Bounding Box.
 
-class FeaturesPlugin_CreateBoundingBox : public ModelAPI_Feature
+class FeaturesPlugin_CreateBoundingBox : public FeaturesPlugin_CommonBoundingBox
 {
 public:
    inline static const std::string& ID()
@@ -112,14 +107,15 @@ public:
   /// \param theID identifier of changed attribute
   FEATURESPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
 
+  /// Return Attribut values of result.
+  FEATURESPLUGIN_EXPORT virtual AttributePtr attributResultValues();
+
   /// Use plugin manager for features creation
   FeaturesPlugin_CreateBoundingBox();
 
   private:
+  /// Update values displayed.
   void updateValues();
-  void createBoxByTwoPoints();
-  void loadNamingDS(std::shared_ptr<GeomAlgoAPI_Box> theBoxAlgo,
-                    std::shared_ptr<ModelAPI_ResultBody> theResultBox);
 
 };
 
index e3d7d24c96c563a561a12d02550ff361802be8c7..426a6df1652290ee1ed3c00520cae0c16a3d243a 100644 (file)
@@ -24,7 +24,6 @@
 # Initialization of the test
 #=========================================================================
 
-import salome
 
 import os
 import math