]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
#20500 : Update Geometry calculation and fix translation
authorlucasjerome <jerome.lucas@cegsenslab.fr>
Wed, 23 Dec 2020 11:38:23 +0000 (12:38 +0100)
committerlucasjerome <jerome.lucas@cegsenslab.fr>
Wed, 23 Dec 2020 11:38:23 +0000 (12:38 +0100)
31 files changed:
src/FeaturesAPI/FeaturesAPI_GeometryCalculation.cpp
src/FeaturesAPI/FeaturesAPI_GeometryCalculation.h
src/FeaturesPlugin/Bounding_Box_widget.xml
src/FeaturesPlugin/CMakeLists.txt
src/FeaturesPlugin/Create_Bounding_Box_widget.xml
src/FeaturesPlugin/FeaturesPlugin_BoundingBox.cpp
src/FeaturesPlugin/FeaturesPlugin_BoundingBox.h
src/FeaturesPlugin/FeaturesPlugin_CreateBoundingBox.cpp
src/FeaturesPlugin/FeaturesPlugin_CreateBoundingBox.h
src/FeaturesPlugin/FeaturesPlugin_GeometryCalculation.cpp
src/FeaturesPlugin/FeaturesPlugin_GeometryCalculation.h
src/FeaturesPlugin/FeaturesPlugin_msg_fr.ts
src/FeaturesPlugin/Test/TestBoundingBox.py
src/FeaturesPlugin/Test/TestGeometryCalculation.py [new file with mode: 0644]
src/FeaturesPlugin/doc/FeaturesPlugin.rst
src/FeaturesPlugin/doc/TUI_geometry_calculation.rst [new file with mode: 0644]
src/FeaturesPlugin/doc/examples/geometry_calculation.py [new file with mode: 0644]
src/FeaturesPlugin/doc/geometryCalculationFeature.rst [new file with mode: 0644]
src/FeaturesPlugin/doc/images/geometryCalculation.png [new file with mode: 0644]
src/FeaturesPlugin/doc/images/geometryCalculationPropertyPanel.png [new file with mode: 0644]
src/FeaturesPlugin/geometry_calculation_widget.xml [new file with mode: 0644]
src/FeaturesPlugin/icons/geometryCalculation.png [new file with mode: 0644]
src/FeaturesPlugin/plugin-Features.xml
src/GeomAlgoAPI/CMakeLists.txt
src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.cpp [new file with mode: 0644]
src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.h [new file with mode: 0644]
src/ModuleBase/ModuleBase_WidgetLabel.cpp
src/ModuleBase/ModuleBase_WidgetLabel.h
src/PythonAPI/model/features/__init__.py

index 9bf0ae406efa5f14ee05b58801207124588bbbf3..666489e0ad0276bf63c146b61c8a2bea7692f01a 100644 (file)
@@ -24,8 +24,9 @@
 #include <ModelHighAPI_Services.h>
 #include <ModelHighAPI_Tools.h>
 
-std::list<double>  getBasicProperties(const std::shared_ptr<ModelAPI_Document>& thePart,
-                                      const ModelHighAPI_Selection& theObject)
+//=================================================================================================
+std::list<double> getGeometryCalculation(const std::shared_ptr<ModelAPI_Document>& thePart,
+                                         const ModelHighAPI_Selection& theObject)
 {
   FeaturePtr aPointCoodFeat = thePart->addFeature(FeaturesPlugin_GeometryCalculation::ID());
 
@@ -37,8 +38,8 @@ std::list<double>  getBasicProperties(const std::shared_ptr<ModelAPI_Document>&
   AttributeDoubleArrayPtr aResult = std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>(
       aPointCoodFeat->attribute(FeaturesPlugin_GeometryCalculation::RESULT_VALUES_ID()));
 
-  for ( int i : {0, 1, 2})
-    res.push_back( aResult->value(i));
+  for (int i : {0, 1, 2})
+    res.push_back(aResult->value(i));
 
   return res;
 }
index abed69276ba35c7bd31eccccf2b6201b7b541410..b1b6cb3122db4726a10d4ea4b618711cdef03b49 100644 (file)
@@ -29,9 +29,9 @@ class ModelAPI_Document;
 class ModelHighAPI_Selection;
 
 /// \ingroup CPPHighAPI
-/// \brief get the basic properties (lenght, Surface area, volume)
+/// \brief get the geometry calculation (length, Surface area, volume)
 FEATURESAPI_EXPORT
-std::list<double>  getBasicProperties(const std::shared_ptr<ModelAPI_Document>& thePart,
-                                      const ModelHighAPI_Selection& theObject);
+std::list<double> getGeometryCalculation(const std::shared_ptr<ModelAPI_Document>& thePart,
+                                         const ModelHighAPI_Selection& theObject);
 
 #endif // FeaturesAPI_GeometryCalculation_H_
\ No newline at end of file
index 0dc8a0d1296279434d09a5fe63474828462b3f46..b9a5e6f5abb81641e0f19e5fd42aa9e4b244ac47 100644 (file)
@@ -1,5 +1,5 @@
 <source>
-  <shape_selector id="main_objects"
+  <shape_selector id="main_object"
                   label="Object"
                   tooltip="Select a object"
                   shape_types="vertex edge face solid compsolid compound object"
index 446b32b9dee40008804fb29368be77bdd01a1f7a..ea702997e7c78df63f01409734aed5b6f7cff367 100644 (file)
@@ -162,7 +162,7 @@ SET(XML_RESOURCES
   fillet_widget.xml
   fillet1d_widget.xml
   measurement_widget.xml
-  GeometryCalculation_widget.xml
+  geometry_calculation_widget.xml
   Bounding_Box_widget.xml
   Create_Bounding_Box_widget.xml
   fusion_faces_widget.xml
@@ -708,5 +708,6 @@ ADD_UNIT_TESTS(TestExtrusion.py
                TestFillet1D_Wire_3.py
                TestFillet1D_Wire_4.py
                TestFillet1D_Wire_5.py
+               TestGeometryCalculation.py
                TestBoundingBox.py
 )
index 02cb6484ed892d3f34b93ffd7181557c8791b1ca..a59ecfb6317c22f2643389787ef3819e4ed247a8 100644 (file)
@@ -1,5 +1,5 @@
 <source>
-  <shape_selector id="main_objects"
+  <shape_selector id="main_object"
                   label="Object"
                   tooltip="Select a object"
                   shape_types="vertex edge face solid compsolid compound object"
index b2a3c1580ac3b17c7a06bf1223ba15078bd51833..323c6fa9c8f0f0fdbb8d88622868e90898ac08db 100644 (file)
@@ -177,9 +177,10 @@ void FeaturesPlugin_BoundingBox::updateBox()
     myCreateFeature->selection(FeaturesPlugin_CreateBoundingBox::OBJECTS_LIST_ID())
                           ->setValue( selection(OBJECTS_LIST_ID())->context(),
                                       selection(OBJECTS_LIST_ID())->value() );
-    
+
     AttributeDoubleArrayPtr aValuesFeatures =
-      std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>(myCreateFeature->attribute(RESULT_VALUES_ID()));
+      std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>
+                                (myCreateFeature->attribute(RESULT_VALUES_ID()));
     AttributeDoubleArrayPtr aValues =
       std::dynamic_pointer_cast<ModelAPI_AttributeDoubleArray>(attribute(RESULT_VALUES_ID()));
     for (int anI=0; anI < 6; anI++)
index cb1f1aacd967b45eb0e9af530ff7b14cd8a6d99f..509df64e6d50e4ae15be73798e0b00a1a00abfa7 100644 (file)
@@ -44,7 +44,7 @@ public:
   /// Attribute name for object selected.
   inline static const std::string& OBJECTS_LIST_ID()
   {
-    static const std::string MY_OBJECTS_LIST_ID("main_objects");
+    static const std::string MY_OBJECTS_LIST_ID("main_object");
     return MY_OBJECTS_LIST_ID;
   }
 
index fc5f5cf642768c980227456880477f1b7f82d163..9baee5543ff58df2e4ccd57643bb979460eeb6bd 100644 (file)
@@ -106,7 +106,7 @@ void FeaturesPlugin_CreateBoundingBox::updateValues()
     if (!anIsCompute->value()) {
       myShape = aShape;
       anIsCompute->setValue(true);
-    } 
+    }
 
     if (aShape && !aShape->isEqual(myShape)) {
       double aXmin, aXmax, aYmin,aYmax,aZmin,aZmax;
index cac4347eaa4c8082decba69167c767d6c5893429..fd942b9f46f63faf4789dfad75f51dfa03e6f202 100644 (file)
@@ -44,7 +44,7 @@ public:
   /// Attribute name for object selected.
   inline static const std::string& OBJECTS_LIST_ID()
   {
-    static const std::string MY_OBJECTS_LIST_ID("main_objects");
+    static const std::string MY_OBJECTS_LIST_ID("main_object");
     return MY_OBJECTS_LIST_ID;
   }
 
index c16bc78a3285cbfff38de03c90c611e86d5a4d49..6a349920b79cda9517e312aa864c73c0fa79a23e 100644 (file)
 #include <Config_PropManager.h>
 
 #include <GeomAPI_Shape.h>
-#include <GeomAPI_Pnt.h>
-#include <GeomAPI_Vertex.h>
-#include <GeomAlgoAPI_BasicProperties.h>
+#include <GeomAlgoAPI_GeometryCalculation.h>
 
 
 #include <iomanip>
 #include <sstream>
 
+//=================================================================================================
 FeaturesPlugin_GeometryCalculation::FeaturesPlugin_GeometryCalculation()
 {
 }
 
+//=================================================================================================
 void FeaturesPlugin_GeometryCalculation::initAttributes()
 {
   // attribute for point selected
   data()->addAttribute(OBJECT_SELECTED_ID(), ModelAPI_AttributeSelection::typeId());
   // attributes for result message and values
-  data()->addAttribute(LENGHT_ID(), ModelAPI_AttributeString::typeId());
+  data()->addAttribute(LENGTH_ID(), ModelAPI_AttributeString::typeId());
   data()->addAttribute(AREA_ID(), ModelAPI_AttributeString::typeId());
   data()->addAttribute(VOLUME_ID(), ModelAPI_AttributeString::typeId());
 
   data()->addAttribute(RESULT_VALUES_ID(), ModelAPI_AttributeDoubleArray::typeId());
-
   data()->realArray(RESULT_VALUES_ID())->setSize(3);
 
 }
 
+//=================================================================================================
 void FeaturesPlugin_GeometryCalculation::execute()
 {
 }
 
+//=================================================================================================
 void FeaturesPlugin_GeometryCalculation::attributeChanged(const std::string& theID)
 {
   if (theID == OBJECT_SELECTED_ID()) {
@@ -77,18 +78,18 @@ void FeaturesPlugin_GeometryCalculation::attributeChanged(const std::string& the
       if (!aShape && aSelection->context())
         aShape = aSelection->context()->shape();
     }
-    if (aShape){
+    if (aShape) {
       double aTolerance = 0.0001;
       double aLength;
       double aSurfArea;
       double aVolume;
       std::string aError;
-      if( !GetBasicProperties( aShape,
-                              aTolerance,
-                              aLength,
-                              aSurfArea,
-                              aVolume,
-                              aError) )
+      if (!getGeometryCalculation(aShape,
+                                  aTolerance,
+                                  aLength,
+                                  aSurfArea,
+                                  aVolume,
+                                  aError))
          setError("Error in Geometry calculation :" +  aError);
 
       streamL << std::setprecision(14) << aLength;
@@ -99,9 +100,9 @@ void FeaturesPlugin_GeometryCalculation::attributeChanged(const std::string& the
       aValues->setValue(2, aVolume);
     }
 
-    string(LENGHT_ID() )->setValue( "Lenght = " +  streamL.str() );
-    string(AREA_ID() )->setValue( "Area = " +  streamA.str() );
-    string(VOLUME_ID() )->setValue( "Volume = " +  streamV.str() );
+    string(LENGTH_ID())->setValue(streamL.str());
+    string(AREA_ID())->setValue(streamA.str());
+    string(VOLUME_ID())->setValue(streamV.str());
   }
 }
 
index a41e853652340a390d8cf21e2245db3e3acae634..bd90966f88fe5a2bff8b3b31cd900b326a3be160 100644 (file)
@@ -33,7 +33,7 @@
 class FeaturesPlugin_GeometryCalculation : public ModelAPI_Feature
 {
 public:
-   inline static const std::string& ID()
+  inline static const std::string& ID()
   {
     static const std::string MY_ID("GeometryCalculation");
     return MY_ID;
@@ -52,11 +52,11 @@ public:
     return MY_OBJECT_SELECTED_ID;
   }
 
-  /// Attribute name for lenght
-  inline static const std::string& LENGHT_ID()
+  /// Attribute name for length
+  inline static const std::string& LENGTH_ID()
   {
-    static const std::string MY_LENGHT_ID("lenght");
-    return MY_LENGHT_ID;
+    static const std::string MY_LENGTH_ID("length");
+    return MY_LENGTH_ID;
   }
 
   /// Attribute name for area
@@ -73,7 +73,7 @@ public:
     return MY_VOLUME_ID;
   }
 
-   /// Attribute name for values of result.
+  /// Attribute name for values of result.
   inline static const std::string& RESULT_VALUES_ID()
   {
     static const std::string MY_RESULT_VALUES_ID("result_values");
index 6f821a2e2fa1c59eadfbf68ab80c4f2e9fbd427a..46fd40148863f9bdbce8f2303cd52450c4f0d6cc 100644 (file)
       <source>Angular Copy</source>
       <translation>Copie angulaire</translation>
     </message>
+    <message>
+      <source>Bounding box</source>
+      <translation>Boite englobante</translation>
+    </message>
+    <message>
+      <source>Geometry calculation</source>
+      <translation>Calcul de la géométrie</translation>
+    </message>
     <message>
       <source>Linear copy</source>
       <translation>Copie linéaire</translation>
       <translation>Translation</translation>
     </message>
   </context>
-
+  
+  <!-- Bounding Box -->
+  <context>
+    <name>BoundingBox</name>
+    <message>
+      <source>BoundingBox</source>
+      <translation>Boite englobante</translation>
+    </message>
+    <message>
+      <source>Create box</source>
+      <translation>Créer la boite</translation>
+    </message>
+  </context>
+  <context>
+    <name>BoundingBoxMacro</name>
+    <message>
+      <source>BoundingBox</source>
+      <translation>Boite englobante</translation>
+    </message>
+    <message>
+      <source>Create box</source>
+      <translation>Créer la boite</translation>
+    </message>
+  </context>
   <!-- Chamfer -->
   <context>
     <name>Chamfer</name>
       <translation>Pas pour la direction angulaire</translation>
     </message>
   </context>
+  <!--Bounding box-->
+  <context>
+    <name>BoundingBoxMacro</name>
+    <message>
+      <source>Bounding box</source>
+      <translation>Boîte englobante</translation>
+    </message>
+  </context>
+  <context>
+    <name>BoundingBoxMacro:main_object</name>
+    <message>
+      <source>Object</source>
+      <translation>Objet</translation>
+    </message>
+  </context>
+  <context>
+  <name>BoundingBoxMacro:createbox</name>
+    <message>
+      <source>Create box</source>
+      <translation>Créer la boite</translation>
+    </message>
+  </context>
+  <context>
+    <name>BoundingBox</name>
+    <message>
+      <source>Bounding box</source>
+      <translation>Boîte englobante</translation>
+    </message>
+  </context>
+  <context>
+    <name>BoundingBox:main_object</name>
+    <message>
+      <source>Object</source>
+      <translation>Objet</translation>
+    </message>
+  </context>
 
+  <!--Geometry calculation-->
+  <context>
+    <name>GeometryCalculation</name>
+    <message>
+      <source>Geometry calculation</source>
+      <translation>Calcul de la géometrie</translation>
+    </message>
+  </context>
+  <context>
+    <name>GeometryCalculation:main_object</name>
+    <message>
+      <source>Object</source>
+      <translation>Objet</translation>
+    </message>
+  </context>
+  <context>
+  <name>GeometryCalculation</name>
+    <message>
+      <source>Length = </source>
+      <translation>Longueur = </translation>
+    </message>
+    <message>
+      <source>Area = </source>
+      <translation>Surface = </translation>
+    </message>
+    <message>
+      <source>Volume = </source>
+      <translation>Volume = </translation>
+    </message>
+  </context>
   <!-- LinearCopy -->
   <context>
     <name>LinearCopy</name>
index 426a6df1652290ee1ed3c00520cae0c16a3d243a..673445e8641e016a3ef9be1ca9ba6a5c82c3be76 100644 (file)
@@ -52,7 +52,7 @@ def test_Bounding_Box():
     model.end()
 
     myDelta = 1e-6
-    Props = model.getBasicProperties(Part_1_doc,model.selection("SOLID", "BoundingBox_1_1"))
+    Props = model.getGeometryCalculation(Part_1_doc,model.selection("SOLID", "BoundingBox_1_1"))
 
     print(" Basic Properties:")
     print(" Wires length: ", Props[0])
diff --git a/src/FeaturesPlugin/Test/TestGeometryCalculation.py b/src/FeaturesPlugin/Test/TestGeometryCalculation.py
new file mode 100644 (file)
index 0000000..a3e1f1e
--- /dev/null
@@ -0,0 +1,80 @@
+# 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
+# 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
+#
+
+"""
+      Unit test of ...
+"""
+#=========================================================================
+# Initialization of the test
+#=========================================================================
+
+import salome
+
+import os
+import math
+
+from ModelAPI import *
+from salome.shaper import model
+
+
+
+__updated__ = "2020-11-12"
+
+
+#=========================================================================
+# test Geometry calculation
+#=========================================================================
+def test_Geometry_Calculation():
+
+    model.begin()
+    file_path = os.path.join(os.getenv("DATA_DIR"),"Shapes","Brep","box1.brep")
+    partSet = model.moduleDocument()
+    Part_1 = model.addPart(partSet)
+    Part_1_doc = Part_1.document()
+    Import_1 = model.addImport(Part_1_doc,file_path)
+    model.do()
+    
+    myDelta = 1e-6
+    Props = model.getGeometryCalculation(Part_1_doc,model.selection("SOLID", "box1_1"))
+
+    print(" Geometry calculation:")
+    print(" Wires length: ", Props[0])
+    print(" Surface area: ", Props[1])
+    print(" Volume      : ", Props[2]) 
+    
+    aReflength = 2400
+    aReslength = Props[0]
+    assert (math.fabs(aReslength - aReflength) < myDelta), "The surface is wrong: expected = {0}, real = {1}".format(aReflength, aReslength)
+
+    aRefSurface = 240000
+    aResSurface = Props[1]
+    assert (math.fabs(aResSurface - aRefSurface) < myDelta), "The surface is wrong: expected = {0}, real = {1}".format(aRefSurface, aResSurface)
+
+    aRefVolume = 8000000
+    aResVolume = Props[2]
+    assert (math.fabs(aResVolume - aRefVolume) < myDelta), "The volume is wrong: expected = {0}, real = {1}".format(aRefVolume, aResVolume)
+
+    
+if __name__ == '__main__':
+
+    test_Geometry_Calculation()
+        
+    #=========================================================================
+    # End of test
+    #=========================================================================
index b63fb696dc2f795afedf0a072401ba35f22cd213..5304756f4ae01c0050ed2f1c04eb77760f508a9e 100644 (file)
@@ -24,6 +24,7 @@ Features plug-in provides a set of common topological operations. It implements
    importResultFeature.rst
    linearCopyFeature.rst
    measurementFeature.rst
+   geometryCalculationFeature.rst
    boundingBoxFeature.rst
    pipeFeature.rst
    placementFeature.rst
diff --git a/src/FeaturesPlugin/doc/TUI_geometry_calculation.rst b/src/FeaturesPlugin/doc/TUI_geometry_calculation.rst
new file mode 100644 (file)
index 0000000..43a8f06
--- /dev/null
@@ -0,0 +1,12 @@
+
+  .. _tui_geometry_calculation:
+
+Get Geometry Calculation
+========================
+
+.. literalinclude:: examples/geometry_calculation.py 
+    :linenos:
+    :language: python
+
+:download:`Download this script <examples/geometry_calculation.py>`
+   
diff --git a/src/FeaturesPlugin/doc/examples/geometry_calculation.py b/src/FeaturesPlugin/doc/examples/geometry_calculation.py
new file mode 100644 (file)
index 0000000..e1e340a
--- /dev/null
@@ -0,0 +1,13 @@
+import os
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+properties = model.getGeometryCalculation(Part_1_doc,model.selection("SOLID", "Box_1_1"))
+print(" length: ", properties[0])
+print(" area: ", properties[1])
+print(" volume: ", properties[2]) 
+model.end()
\ No newline at end of file
diff --git a/src/FeaturesPlugin/doc/geometryCalculationFeature.rst b/src/FeaturesPlugin/doc/geometryCalculationFeature.rst
new file mode 100644 (file)
index 0000000..2487d53
--- /dev/null
@@ -0,0 +1,38 @@
+.. |GeometryCalculation.icon|    image:: images/geometryCalculation.png
+
+Geometry calculation
+====================
+
+The **Geometry calculation** feature displays basic properties of sub-elements of a geometrical object (shape).
+
+The geometry calculation displayed in the property panel are length, area and volume.
+
+**Apply** button does not generate any result and has the same effect as **Cancel** for this feature.  
+
+To display geometry calculation in the active part:
+
+#. select in the Main Menu *Inspection - > Geometry calculation* item  or
+#. click |GeometryCalculation.icon| **Geometry calculation** button in the toolbar
+
+The geometry calculation can be displayed for a selected object in the property panel : 
+
+.. figure:: images/geometryCalculationPropertyPanel.png
+   :align: center
+
+   Geometry calculation
+
+Input fields:
+
+- **Object** contains an object selected in 3D OCC viewer or object browser. 
+
+The geometry calculation displayed can be selected.
+
+**TUI Command**:
+
+.. py:function:: model.getGeometryCalculation(Part_doc, shape)
+
+    :param part: The current part object.
+    :param object: A shape in format *model.selection("type", shape)*.
+    :return: list containing length, area and volume.
+
+**See Also** a sample TUI Script of :ref:`tui_geometry_calculation` operation.
\ No newline at end of file
diff --git a/src/FeaturesPlugin/doc/images/geometryCalculation.png b/src/FeaturesPlugin/doc/images/geometryCalculation.png
new file mode 100644 (file)
index 0000000..f46c0da
Binary files /dev/null and b/src/FeaturesPlugin/doc/images/geometryCalculation.png differ
diff --git a/src/FeaturesPlugin/doc/images/geometryCalculationPropertyPanel.png b/src/FeaturesPlugin/doc/images/geometryCalculationPropertyPanel.png
new file mode 100644 (file)
index 0000000..17f8cd7
Binary files /dev/null and b/src/FeaturesPlugin/doc/images/geometryCalculationPropertyPanel.png differ
diff --git a/src/FeaturesPlugin/geometry_calculation_widget.xml b/src/FeaturesPlugin/geometry_calculation_widget.xml
new file mode 100644 (file)
index 0000000..5597937
--- /dev/null
@@ -0,0 +1,13 @@
+<source>
+  <shape_selector id="main_object"
+                  label="Object"
+                  tooltip="Select a object"
+                  shape_types="edges faces solids compsolids"
+                  default=""
+                  geometrical_selection="true">
+    <validator id="GeomValidators_ShapeType" parameters="line,edge,wire,face,shell,solid,compsolid,compound"/>
+  </shape_selector>
+  <label id="length" label="Length = " isSelectable = "true"/>
+  <label id="area" label="Area = " isSelectable = "true"/>
+  <label id="volume" label="Volume = " isSelectable = "true"/>
+</source>
diff --git a/src/FeaturesPlugin/icons/geometryCalculation.png b/src/FeaturesPlugin/icons/geometryCalculation.png
new file mode 100644 (file)
index 0000000..f46c0da
Binary files /dev/null and b/src/FeaturesPlugin/icons/geometryCalculation.png differ
index 5de92e7cd11ade6a64bba47fed8f95c25a92729e..64379ac674a60ff2374d72a4f28b987f6c42b3d9 100644 (file)
   </workbench>
   <workbench id="Inspection">
     <group id="Calculation">
-      <feature id="GeometryCalculation" title="Geometry Calculation" tooltip="Calculate properties of objects"
-               icon="icons/Features/basicproperties.png" helpfile="geometryCalculationFeature.html" abort_confirmation="false">
-        <source path="GeometryCalculation_widget.xml"/>
+      <feature id="GeometryCalculation" title="Geometry calculation" tooltip="Calculate properties of objects"
+               icon="icons/Features/geometryCalculation.png" helpfile="geometryCalculationFeature.html" abort_confirmation="false">
+        <source path="geometry_calculation_widget.xml"/>
       </feature>
       <feature id="BoundingBoxMacro" title="Bounding box" tooltip="Calculate the bounding box" auto_preview="true"
                icon="icons/Features/bounding.png" helpfile="boundingBoxFeature.html"> 
index ed4b96a73f776704ffad40efa5509281c85fc32e..8e55582d930096e810e45ce1ec00faa5ac19c8b4 100644 (file)
@@ -33,7 +33,7 @@ SET(PROJECT_HEADERS
     GeomAlgoAPI_Prism.h
     GeomAlgoAPI_Revolution.h
     GeomAlgoAPI_Boolean.h
-    GeomAlgoAPI_BasicProperties.h
+    GeomAlgoAPI_GeometryCalculation.h
     GeomAlgoAPI_BoundingBox.h
     GeomAlgoAPI_ThroughAll.h
     GeomAlgoAPI_Rotation.h
@@ -100,7 +100,7 @@ SET(PROJECT_SOURCES
     GeomAlgoAPI_Prism.cpp
     GeomAlgoAPI_Revolution.cpp
     GeomAlgoAPI_Boolean.cpp
-    GeomAlgoAPI_BasicProperties.cpp
+    GeomAlgoAPI_GeometryCalculation.cpp
     GeomAlgoAPI_BoundingBox.cpp
     GeomAlgoAPI_ThroughAll.cpp
     GeomAlgoAPI_Rotation.cpp
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp
deleted file mode 100644 (file)
index 2a75303..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// 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
-// 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 "GeomAlgoAPI_BasicProperties.h"
-
-#include <GProp_GProps.hxx>
-#include <TopoDS_Shape.hxx>
-#include <BRepGProp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <Standard_ErrorHandler.hxx>
-
-//=================================================================================================
-bool GetBasicProperties(  const std::shared_ptr<GeomAPI_Shape>& theShape,
-                          const double theTolerance,
-                          Standard_Real& theLength,
-                          Standard_Real& theSurfArea,
-                          Standard_Real& theVolume,
-                          std::string& theError)
-{
-
-  #ifdef _DEBUG
-  std::cout << "GetBasicProperties " << std::endl;
-  #endif
-
-  if (!theShape.get()) {
-    theError = "GetBasicProperties : An invalid argument";
-    return false;
-  }
-
-  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
-
-  //Compute the parameters
-  GProp_GProps LProps, SProps;
-  Standard_Real anEps = theTolerance >= 0 ? theTolerance : 1.e-6;
-  try {
-    OCC_CATCH_SIGNALS;
-    BRepGProp::LinearProperties(aShape, LProps, Standard_True);
-    theLength = LProps.Mass();
-
-    BRepGProp::SurfaceProperties(aShape, SProps, anEps, Standard_True);
-    theSurfArea = SProps.Mass();
-
-    theVolume = 0.0;
-    if (aShape.ShapeType() < TopAbs_SHELL) {
-      for (TopExp_Explorer Exp (aShape, TopAbs_SOLID); Exp.More(); Exp.Next()) {
-        GProp_GProps VProps;
-        BRepGProp::VolumeProperties(Exp.Current(), VProps, anEps, Standard_True);
-        theVolume += VProps.Mass();
-      }
-    }
-  }
-  catch (Standard_Failure& aFail) {
-    theError = aFail.GetMessageString();
-    return false;
-  }
-
-  return true;
-
-}
\ No newline at end of file
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h b/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h
deleted file mode 100644 (file)
index 5450ea7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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
-// 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 GeomAlgoAPI_BasicProperties_H_
-#define GeomAlgoAPI_BasicProperties_H_
-
-#include <GeomAlgoAPI.h>
-#include <GeomAPI_Shape.h>
-#include <Standard_TypeDef.hxx>
-
-/// Run chamfer operation with two distances or with a distance and an angle .
-  /// \param theShape      the shape
-  /// \param theTolerance  tolerance desirated
-  /// \param theLength     lenght calculated
-  /// \param theSurfArea   Surface Area calculated
-  /// \param theVolume     Volume calculated
-  /// \param theError      error
-GEOMALGOAPI_EXPORT
-bool GetBasicProperties(  const std::shared_ptr<GeomAPI_Shape>& theShape,
-                          const Standard_Real theTolerance,
-                          Standard_Real& theLength,
-                          Standard_Real& theSurfArea,
-                          Standard_Real& theVolume,
-                          std::string& theError);
-
-#endif
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.cpp
new file mode 100644 (file)
index 0000000..43af83c
--- /dev/null
@@ -0,0 +1,75 @@
+// 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
+// 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 "GeomAlgoAPI_GeometryCalculation.h"
+
+#include <GProp_GProps.hxx>
+#include <TopoDS_Shape.hxx>
+#include <BRepGProp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <Standard_ErrorHandler.hxx>
+
+//=================================================================================================
+bool getGeometryCalculation(const std::shared_ptr<GeomAPI_Shape>& theShape,
+                            const double theTolerance,
+                            Standard_Real& theLength,
+                            Standard_Real& theSurfArea,
+                            Standard_Real& theVolume,
+                            std::string& theError)
+{
+
+  #ifdef _DEBUG
+  std::cout << "getGeometryCalculation " << std::endl;
+  #endif
+
+  if (!theShape.get()) {
+    theError = "getGeometryCalculation : An invalid argument";
+    return false;
+  }
+
+  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
+
+  //Compute the parameters
+  GProp_GProps aLProps, aSProps;
+  Standard_Real anEps = theTolerance >= 0 ? theTolerance : 1.e-6;
+  try {
+    OCC_CATCH_SIGNALS;
+    BRepGProp::LinearProperties(aShape, aLProps, Standard_True);
+    theLength = aLProps.Mass();
+
+    BRepGProp::SurfaceProperties(aShape, aSProps, anEps, Standard_True);
+    theSurfArea = aSProps.Mass();
+
+    theVolume = 0.0;
+    if (aShape.ShapeType() < TopAbs_SHELL) {
+      for (TopExp_Explorer anExp (aShape, TopAbs_SOLID); anExp.More(); anExp.Next()) {
+        GProp_GProps aVProps;
+        BRepGProp::VolumeProperties(anExp.Current(), aVProps, anEps, Standard_True);
+        theVolume += aVProps.Mass();
+      }
+    }
+  }
+  catch (Standard_Failure& aFail) {
+    theError = aFail.GetMessageString();
+    return false;
+  }
+
+  return true;
+
+}
\ No newline at end of file
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.h b/src/GeomAlgoAPI/GeomAlgoAPI_GeometryCalculation.h
new file mode 100644 (file)
index 0000000..df1f2f2
--- /dev/null
@@ -0,0 +1,42 @@
+// 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
+// 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 GeomAlgoAPI_GeometryCalculation_H_
+#define GeomAlgoAPI_GeometryCalculation_H_
+
+#include <GeomAlgoAPI.h>
+#include <GeomAPI_Shape.h>
+#include <Standard_TypeDef.hxx>
+
+/// Run chamfer operation with two distances or with a distance and an angle .
+  /// \param theShape      the shape
+  /// \param theTolerance  tolerance desirated
+  /// \param theLength     length calculated
+  /// \param theSurfArea   Surface Area calculated
+  /// \param theVolume     Volume calculated
+  /// \param theError      error
+GEOMALGOAPI_EXPORT
+bool getGeometryCalculation(const std::shared_ptr<GeomAPI_Shape>& theShape,
+                            const Standard_Real theTolerance,
+                            Standard_Real& theLength,
+                            Standard_Real& theSurfArea,
+                            Standard_Real& theVolume,
+                            std::string& theError);
+
+#endif
index 7e3f86de0ab80bdf75d1b2397dfeb846dd64de43..3aada3be8f18d931932198afab119e009d2d47fa 100644 (file)
@@ -37,6 +37,9 @@ ModuleBase_WidgetLabel::ModuleBase_WidgetLabel(QWidget* theParent,
 : ModuleBase_ModelWidget(theParent, theData)
 {
   QString aText = translate(theData->getProperty("title"));
+
+  myPrefix  = theData->getProperty(ATTR_LABEL);
+
   bool aIsHtml = theData->getBooleanAttribute(ATTR_HTML_STYLE, false);
 
   QString aLabelIcon = QString::fromStdString(theData->getProperty("icon"));
@@ -99,7 +102,11 @@ bool ModuleBase_WidgetLabel::restoreValueCustom()
         aText = ModuleBase_Tools::translate(myFeature->getKind(), aMsg);
       }
     }
-    myLabel->setText(aText);
+    if (myPrefix == "") {
+      myLabel->setText(aText);
+    } else {
+      myLabel->setText( ModuleBase_Tools::translate(myFeature->getKind(), myPrefix) + aText);
+    }
   }
   return true;
 }
index be90456c0c49989f467758f874bb8d37fdfc4592..6c01efad9cd49faf5ee4409c8e76e89af21e33f6 100644 (file)
@@ -61,6 +61,8 @@ protected:
 
   /// A label control
   QLabel* myLabel;
+  /// prefix for label
+  std::string myPrefix;
 };
 
 #endif
index 0d6aafd5582fa63a69e33f4027ca940ad77e8fa9..5d61b5ce8b8e5e150248f2c005f57c90f4300284 100644 (file)
@@ -30,7 +30,7 @@ from FeaturesAPI import addRecover
 from FeaturesAPI import addFillet, addChamfer
 from FeaturesAPI import addFusionFaces
 from FeaturesAPI import measureLength, measureDistance, measureRadius, measureAngle
-from FeaturesAPI import getBasicProperties, getBoundingBox
+from FeaturesAPI import getGeometryCalculation, getBoundingBox
 from FeaturesAPI import addRemoveResults
 from FeaturesAPI import addCopy, addImportResult
 from FeaturesAPI import addDefeaturing