]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Add documentation and unit test
authorJérôme <jerome.lucas@cesgenslab.fr>
Tue, 1 Dec 2020 13:54:24 +0000 (14:54 +0100)
committerJérôme <jerome.lucas@cesgenslab.fr>
Tue, 1 Dec 2020 13:54:24 +0000 (14:54 +0100)
15 files changed:
src/FeaturesAPI/FeaturesAPI_SharedFaces.cpp
src/FeaturesPlugin/CMakeLists.txt
src/FeaturesPlugin/FeaturesPlugin_SharedFaces.cpp
src/FeaturesPlugin/FeaturesPlugin_SharedFaces.h
src/FeaturesPlugin/Test/TestCheckSharedFaces.py [new file with mode: 0644]
src/FeaturesPlugin/doc/FeaturesPlugin.rst
src/FeaturesPlugin/doc/TUI_SharedFacesFeature.rst [new file with mode: 0644]
src/FeaturesPlugin/doc/checkSharedFaceFeature.rst [new file with mode: 0644]
src/FeaturesPlugin/doc/examples/checkSharedFaces.py [new file with mode: 0644]
src/FeaturesPlugin/doc/images/checkSharedFacesPropertyPanel.png [new file with mode: 0644]
src/FeaturesPlugin/doc/images/sharedFacesResult.png [new file with mode: 0644]
src/FeaturesPlugin/doc/images/shared_shapes.png [new file with mode: 0644]
src/FeaturesPlugin/plugin-Features.xml
src/GeomAlgoAPI/GeomAlgoAPI_SharedFaces.cpp
src/GeomAlgoAPI/GeomAlgoAPI_SharedFaces.h

index 1b704f7d15f29c29af150b2bb831c03149e51b9c..a0ebb84dc0f25e2cfcd661a3141aabdebf63bc6b 100644 (file)
@@ -28,7 +28,7 @@
 #include <ModelHighAPI_Selection.h>
 #include <ModelHighAPI_Tools.h>
 
-
+//=================================================================================================
 FeaturesAPI_SharedFaces::
           FeaturesAPI_SharedFaces(const std::shared_ptr<ModelAPI_Feature>& theFeature)
   : ModelHighAPI_Interface(theFeature)
@@ -36,18 +36,17 @@ FeaturesAPI_SharedFaces::
   initialize();
 }
 
-FeaturesAPI_SharedFaces::FeaturesAPI_SharedFaces(
-                                    const std::shared_ptr<ModelAPI_Feature>& theFeature,
-                                    const ModelHighAPI_Selection& theobject,
-                                    const double theTransparency,
-                                    const std::string & theNameGroup)
+//=================================================================================================
+FeaturesAPI_SharedFaces::FeaturesAPI_SharedFaces(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+                         const ModelHighAPI_Selection& theobject,
+                         const double theTransparency,
+                         const std::string & theNameGroup)
 :ModelHighAPI_Interface(theFeature)
 {
   if (initialize()) {
     fillAttribute(theobject, myobjectselected);
     fillAttribute(theTransparency, mytransparency);
-    if( theNameGroup != "" )
-    {
+    if (theNameGroup != "") {
       fillAttribute(true,
                 feature()->boolean(FeaturesPlugin_SharedFaces::CREATE_GROUP_ID()));
       fillAttribute(theNameGroup, mygroupname);
@@ -56,11 +55,12 @@ FeaturesAPI_SharedFaces::FeaturesAPI_SharedFaces(
   }
 }
 
-
+//=================================================================================================
 FeaturesAPI_SharedFaces::~FeaturesAPI_SharedFaces()
 {
 }
 
+//=================================================================================================
 void FeaturesAPI_SharedFaces::dump(ModelHighAPI_Dumper& theDumper) const
 {
   FeaturePtr aBase = feature();
@@ -72,12 +72,13 @@ void FeaturesAPI_SharedFaces::dump(ModelHighAPI_Dumper& theDumper) const
   theDumper << aBase << " = model.getSharedFaces(" << aDocName << ", " << anAttrObject;
   theDumper << ", " << aBase->integer(FeaturesPlugin_SharedFaces::TRANSPARENCY_ID());
 
-  if(aBase->boolean(FeaturesPlugin_SharedFaces::CREATE_GROUP_ID())->value() )
+  if (aBase->boolean(FeaturesPlugin_SharedFaces::CREATE_GROUP_ID())->value())
     theDumper << ", " << aBase->string(FeaturesPlugin_SharedFaces::GROUP_NAME_ID());
 
   theDumper << ")" << std::endl;
 }
 
+//=================================================================================================
 SharedFacesPtr getSharedFaces(const std::shared_ptr<ModelAPI_Document>& thePart,
                               const ModelHighAPI_Selection& theobject,
                               const double theTransparency,
index 31031d118c99e8f9d565898d4352343f47b49e9d..3ab09b9b5af0919828cdccc63a06b9c4bd242482 100644 (file)
@@ -709,4 +709,5 @@ ADD_UNIT_TESTS(TestExtrusion.py
                TestFillet1D_Wire_3.py
                TestFillet1D_Wire_4.py
                TestFillet1D_Wire_5.py
+               TestCheckSharedFaces.py
 )
index 6eb6d6e5bca5f0b5c48192bfaafba9d4de88f3d0..c5d3afd93d891b821e9f15bd386d23ccce4623b5 100644 (file)
@@ -20,7 +20,6 @@
 #include "FeaturesPlugin_SharedFaces.h"
 
 #include <ModelAPI_AttributeSelection.h>
-#include <ModelAPI_AttributeRefList.h>
 #include <ModelAPI_AttributeSelectionList.h>
 #include <ModelAPI_AttributeBoolean.h>
 #include <ModelAPI_AttributeString.h>
 
 #include <Config_PropManager.h>
 #include <ModelAPI_ResultBody.h>
-#include <ModelAPI_ResultGroup.h>
 #include <GeomAlgoAPI_ShapeTools.h>
 #include <GeomAlgoAPI_SharedFaces.h>
 #include <GeomAPI_ShapeIterator.h>
 #include <ModelAPI_Tools.h>
 #include <iomanip>
 #include <sstream>
-#include <iostream>
-
 
+//=================================================================================================
 FeaturesPlugin_SharedFaces::FeaturesPlugin_SharedFaces()
 {
 }
 
+//=================================================================================================
 void FeaturesPlugin_SharedFaces::initAttributes()
 {
   // attribute for object selected
@@ -68,33 +66,37 @@ void FeaturesPlugin_SharedFaces::initAttributes()
 
 void explodeCompound(const GeomShapePtr& theCompound, ListOfShape& theSubs)
 {
-  if (theCompound->isCompound() || theCompound->isCompSolid() ) {
+  if (theCompound->isCompound() || theCompound->isCompSolid()) {
     GeomAPI_ShapeIterator anIt(theCompound);
     for (; anIt.more(); anIt.next())
       explodeCompound(anIt.current(), theSubs);
-  }
-  else
+  } else
     theSubs.push_back(theCompound);
 }
 
-
-
+//=================================================================================================
 void FeaturesPlugin_SharedFaces::execute()
 {
-  if(boolean(CREATE_GROUP_ID())->value()
+  if (boolean(CREATE_GROUP_ID())->value()
     && selectionList(LIST_FACES_ID())->isInitialized()
-    && string(GROUP_NAME_ID())->value() != "" )
-  {
+    && string(GROUP_NAME_ID())->value() != "") {
     AttributeStringPtr aNameAtt = string( GROUP_NAME_ID() ) ;
     std::wstring aNameFace = aNameAtt->isUValue() ?
                             Locale::Convert::toWString(aNameAtt->valueU()) :
                             Locale::Convert::toWString(aNameAtt->value());
 
-
+    if (myGroup.get())
+      eraseResults();
     setFacesGroup(aNameFace);
+
+  } else {
+    if (myGroup.get()) {
+      eraseResults();
+      myGroup.reset();
+    }
+
   }
-  if( selection(OBJECT_ID())->isInitialized() )
-  {
+  if (selection(OBJECT_ID())->isInitialized()) {
     AttributeSelectionPtr ancompSolidAttr = selection(OBJECT_ID());
     ResultPtr aResult = ancompSolidAttr->context();
 
@@ -106,11 +108,12 @@ void FeaturesPlugin_SharedFaces::execute()
     ModelAPI_Tools::allSubs(aResultBody, allRes);
     std::list<ResultPtr>::iterator aRes;
     for(aRes = allRes.begin(); aRes != allRes.end(); aRes++) {
-        ModelAPI_Tools::setTransparency(*aRes, aTranparency);
+      ModelAPI_Tools::setTransparency(*aRes, aTranparency);
     }
   }
 }
 
+//=================================================================================================
 void FeaturesPlugin_SharedFaces::attributeChanged(const std::string& theID)
 {
   if (theID == OBJECT_ID()) {
@@ -120,7 +123,7 @@ void FeaturesPlugin_SharedFaces::attributeChanged(const std::string& theID)
     if (aShape.get() && ancompSolidAttr->context().get()) {
 
       aShape = ancompSolidAttr->context()->shape();
-      if(aShape){
+      if (aShape) {
         std::string anError;
         ListOfShape aFaces;
         ListOfShape theSubs;
@@ -135,8 +138,8 @@ void FeaturesPlugin_SharedFaces::attributeChanged(const std::string& theID)
                     std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
                                                         (attribute(LIST_FACES_ID()));
 
-        if ( aFacesListAttr->isInitialized())
-              aFacesListAttr->clear();
+        if (aFacesListAttr->isInitialized())
+          aFacesListAttr->clear();
 
         aFacesListAttr->setSelectionType("face");
 
@@ -159,13 +162,14 @@ void FeaturesPlugin_SharedFaces::attributeChanged(const std::string& theID)
   }
 }
 
+//=================================================================================================
 void FeaturesPlugin_SharedFaces::setFacesGroup(const std::wstring& theName )
 {
   std::vector<int> aColor;
-  ResultGroupPtr aGroup = document()->createGroup(data());
+  myGroup = document()->createGroup(data());
   // clean the result of the operation
-  aGroup->data()->setName(theName);
-  aGroup->store(GeomShapePtr());
+  myGroup->data()->setName(theName);
+  myGroup->store(GeomShapePtr());
 
   // shapes containing in group
   ListOfShape aFaces;
@@ -173,15 +177,14 @@ void FeaturesPlugin_SharedFaces::setFacesGroup(const std::wstring& theName )
                     std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
                                                         (attribute(LIST_FACES_ID()));
 
-  for(int anI =0; anI< aFacesListAttr->size(); anI++  )
-  {
+  for (int anI =0; anI< aFacesListAttr->size(); anI++) {
     AttributeSelectionPtr aAtt = aFacesListAttr->value(anI);
     aFaces.push_back( aAtt->value() );
   }
   GeomShapePtr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces);
-  aGroup->store(aCompound);
+  myGroup->store(aCompound);
   aColor = {255,0,0};
-  setResult(aGroup);
+  setResult(myGroup);
   ModelAPI_Tools::setColor( lastResult(),aColor);
 
 }
index 75dd1e3b39112efee8d93f3952b3ddc031554f9a..7c865445e144d2c79e68f5f676f5cd86e076884e 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "FeaturesPlugin.h"
 #include <ModelAPI_Feature.h>
+#include <ModelAPI_ResultGroup.h>
 
 #include <GeomAPI_IPresentable.h>
 #include <GeomAPI_IScreenParams.h>
@@ -106,6 +107,7 @@ public:
   //Set group of faces
   void setFacesGroup(const std::wstring& theName );
 
+  ResultGroupPtr myGroup;
 };
 
 #endif
diff --git a/src/FeaturesPlugin/Test/TestCheckSharedFaces.py b/src/FeaturesPlugin/Test/TestCheckSharedFaces.py
new file mode 100644 (file)
index 0000000..4e04c74
--- /dev/null
@@ -0,0 +1,83 @@
+# 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 Check shared faces
+"""
+#=========================================================================
+# Initialization of the test
+#=========================================================================
+
+
+import os
+import math
+
+from ModelAPI import *
+from GeomAPI import *
+from salome.shaper import model
+
+
+__updated__ = "2020-11-12"
+
+
+if __name__ == '__main__':
+
+    model.begin()
+    partSet = model.moduleDocument()
+    Part_1 = model.addPart(partSet)
+    Part_1_doc = Part_1.document()
+    ### Create Box
+    Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+    ### Create Point
+    Point_2 = model.addPoint(Part_1_doc, 20, 10, 10)
+    ### Create Box
+    Box_2 = model.addBox(Part_1_doc, model.selection("VERTEX", "[Box_1_1/Front][Box_1_1/Left][Box_1_1/Bottom]"), model.selection("VERTEX", "Point_1"))
+    ### Create CompSolid
+    CompSolid_1 = model.addCompSolid(Part_1_doc, [model.selection("SOLID", "Box_1_1"), model.selection("SOLID", "Box_2_1")])
+
+    ### Create Shared_faces
+    Shared_faces_1 = model.getSharedFaces(Part_1_doc, model.selection("COMPSOLID", "CompSolid_1_1"), 50, "mygroup")
+
+    model.do()
+     # Check results
+    Shared_faces_1_Feature = Shared_faces_1.feature()
+    assert Shared_faces_1_Feature.error() == ''
+    assert Shared_faces_1_Feature.name() == "Shared_faces_1"
+
+    aSelectionList = Shared_faces_1_Feature.selectionList("faces")
+    assert aSelectionList.size() == 1
+
+    assert(Part_1_doc.size("Groups") == 1)
+
+    #assert Part_1_doc.object("Groups", 0).name() == "mygroup"
+    resShape = modelAPI_Result(Part_1_doc.object("Groups", 0)).shape()
+    assert(not resShape.isNull())
+
+    # the group result is a face, check that this is one face
+    aShapeExplorer = GeomAPI_ShapeExplorer(resShape, GeomAPI_Shape.FACE)
+    assert(aShapeExplorer.more())
+    assert(aShapeExplorer.current().isFace())
+    aShapeExplorer.next()
+    assert(not aShapeExplorer.more())
+    
+    model.end()
+
+    #=========================================================================
+    # End of test
+    #=========================================================================
index fb8e2a344b707376d72df48edb52804796a2e7bf..154a72f0943972ef523d3fc2b233a9ddc3d85aa6 100644 (file)
@@ -24,6 +24,7 @@ Features plug-in provides a set of common topological operations. It implements
    importResultFeature.rst
    linearCopyFeature.rst
    measurementFeature.rst
+   checkSharedFaceFeature.rst
    pipeFeature.rst
    placementFeature.rst
    recoverFeature.rst
diff --git a/src/FeaturesPlugin/doc/TUI_SharedFacesFeature.rst b/src/FeaturesPlugin/doc/TUI_SharedFacesFeature.rst
new file mode 100644 (file)
index 0000000..f170d48
--- /dev/null
@@ -0,0 +1,11 @@
+
+  .. _tui_shared_faces:
+
+Check shared faces
+==================
+
+.. literalinclude:: examples/checkSharedFaces.py 
+    :linenos:
+    :language: python
+
+:download:`Download this script <examples/checkSharedFaces.py>`
diff --git a/src/FeaturesPlugin/doc/checkSharedFaceFeature.rst b/src/FeaturesPlugin/doc/checkSharedFaceFeature.rst
new file mode 100644 (file)
index 0000000..e7ca9fa
--- /dev/null
@@ -0,0 +1,53 @@
+.. |shared_shapes.icon|    image:: images/shared_shapes.png
+
+Check shared faces
+==================
+
+The **Check shared faces** feature find the shared faces of a composolid or compound.
+
+The result is a list of faces and a group can be created with name specified.   
+
+To check shared faces in the active part:
+
+#. select in the Main Menu *Inspection - > Check shared faces* item  or
+#. click |shared_shapes.icon| **Check shared faces** button in the toolbar
+
+The property panel is shown below.
+
+.. figure:: images/checkSharedFacesPropertyPanel.png
+   :align: center
+
+   Check shared faces
+
+
+Input fields:
+
+- **Object** contains composolid or compound selected in 3D OCC viewer or object browser. 
+- **Number of shared faces** indicate the number of found faces. 
+- **List of faces** the list of found faces.
+- **Transparency** set the transparency of selected object.   
+- **Create group** check-box allow the creation of the group of found faces. 
+- **Group name**  specified the name of the group created. 
+
+
+**TUI Command**:
+
+.. py:function:: model.getSharedFaces(Part_doc, shape, transparency, nameGroup)
+    :param part: The current part object.
+    :param object: A composolid or compound in format *model.selection("Type", shape)*.
+    :param number: value for the transparency.
+    :param string: name of group created. 
+    :return: Created group.
+
+Result
+""""""
+
+Result of **Check shared faces** where **Create group** is checked.
+
+.. figure:: images/sharedFacesResult.png
+   :align: center
+
+   Shared faces
+
+**See Also** a sample TUI Script of :ref:`tui_shared_faces` operation.
\ No newline at end of file
diff --git a/src/FeaturesPlugin/doc/examples/checkSharedFaces.py b/src/FeaturesPlugin/doc/examples/checkSharedFaces.py
new file mode 100644 (file)
index 0000000..bc541d1
--- /dev/null
@@ -0,0 +1,21 @@
+from salome.shaper import model
+import os
+
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+### Create Box
+Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+### Create Point
+Point_2 = model.addPoint(Part_1_doc, 20, 10, 10)
+### Create Box
+Box_2 = model.addBox(Part_1_doc, model.selection("VERTEX", "[Box_1_1/Front][Box_1_1/Left][Box_1_1/Bottom]"), model.selection("VERTEX", "Point_1"))
+### Create CompSolid
+CompSolid_1 = model.addCompSolid(Part_1_doc, [model.selection("SOLID", "Box_1_1"), model.selection("SOLID", "Box_2_1")])
+
+### Create Shared_faces
+Shared_faces_1 = model.getSharedFaces(Part_1_doc, model.selection("COMPSOLID", "CompSolid_1_1"), 50, "mygroup")
+
+model.do()
+model.end()
diff --git a/src/FeaturesPlugin/doc/images/checkSharedFacesPropertyPanel.png b/src/FeaturesPlugin/doc/images/checkSharedFacesPropertyPanel.png
new file mode 100644 (file)
index 0000000..71190f1
Binary files /dev/null and b/src/FeaturesPlugin/doc/images/checkSharedFacesPropertyPanel.png differ
diff --git a/src/FeaturesPlugin/doc/images/sharedFacesResult.png b/src/FeaturesPlugin/doc/images/sharedFacesResult.png
new file mode 100644 (file)
index 0000000..114ac34
Binary files /dev/null and b/src/FeaturesPlugin/doc/images/sharedFacesResult.png differ
diff --git a/src/FeaturesPlugin/doc/images/shared_shapes.png b/src/FeaturesPlugin/doc/images/shared_shapes.png
new file mode 100644 (file)
index 0000000..23f8048
Binary files /dev/null and b/src/FeaturesPlugin/doc/images/shared_shapes.png differ
index 082ffdd373c23cf83004d0aefc5ea576c49dc552..0d01b06594a70c485b50365332a9ddb05e7f46c2 100644 (file)
     </group>
     <group id="Face">
       <feature id="Shared_faces" title="Check shared faces" tooltip="Check the shared faces" auto_preview="true"
-               icon="icons/Features/shared_shapes.png" helpfile="measurementFeature.html"> 
+               icon="icons/Features/shared_shapes.png" helpfile="checkSharedFaceFeature.html"> 
         <source path="sharedFaces_widget.xml"/>
       </feature>
     </group>
index 69355238f9daf4df991eee2e52ee7a6cead30883..a2039bbe3762493e8644efd58624457189ef9243 100644 (file)
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Compound.hxx>
 #include <BRep_Builder.hxx>
-#include <TColStd_HSequenceOfTransient.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
-#include <GeomAlgoAPI_ShapeBuilder.h>
-#include <vector>
 #include <TopExp.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopExp_Explorer.hxx>
 
-
 //=======================================================================
 //function : GetSharedShapes
 //purpose  :
 // [4] theShapes = 1 shape, theMultiShare = False
 //     Result: sub-shapes of all possible couples of all top-level sub-objects of
 //     theShapes[0].
-//=======================================================================
 //=================================================================================================
-bool GetSharedredFaces( const ListOfShape& theShapes,
-                        ListOfShape & theFaces,
-                        const bool  theMultiShare,
-                        std::string& theError)
+bool GetSharedredFaces(const ListOfShape& theShapes,
+                       ListOfShape & theFaces,
+                       const bool  theMultiShare,
+                       std::string& theError)
 {
 
   #ifdef _DEBUG
@@ -95,11 +90,10 @@ bool GetSharedredFaces( const ListOfShape& theShapes,
 
   // if only single shape is specified as input
   // collect all ites top-level sub-shapes for processing
-  if ( aShapesSeq.Length() == 1 )
-  {
+  if (aShapesSeq.Length() == 1) {
     aShape = aShapesSeq.First();
     aShapesSeq.Clear();
-    for ( TopoDS_Iterator it( aShape ); it.More(); it.Next() )
+    for (TopoDS_Iterator it( aShape ); it.More(); it.Next())
       aShapesSeq.Append( it.Value() );
   }
 
@@ -112,14 +106,14 @@ bool GetSharedredFaces( const ListOfShape& theShapes,
   // numShares factor to search (i.e. by what nb of shapes each found sub-shape should be shared)
   int nbShares =  theMultiShare ? aShapesSeq.Length()-1 : 1;
 
-  for ( int iter = 1; iter <= nbIters; iter++) {
-    for ( int ind = iter+1; ind <= aShapesSeq.Length(); ind++) {
-      if ( ind-1+nbShares > aShapesSeq.Length() ) break;
+  for (int iter = 1; iter <= nbIters; iter++) {
+    for (int ind = iter+1; ind <= aShapesSeq.Length(); ind++) {
+      if (ind-1+nbShares > aShapesSeq.Length()) break;
       TopoDS_Compound aCurrSelection;
       TopoDS_Shape aShape1 = aShapesSeq.Value( iter );
       TopTools_IndexedMapOfShape mapSelected;
       TopExp::MapShapes(aShape1, aShapeType, mapSelected);
-      for ( int s = 0; s < nbShares; s++ ) {
+      for (int s = 0; s < nbShares; s++) {
         BRep_Builder B;
         TopoDS_Compound aCompound;
         B.MakeCompound(aCompound);
index c201c9680ebb6fef0ddc93f6d0a829dcdf8fc870..6aa21b0b9b96104de8b87747282134b7d15f940f 100644 (file)
 #include <Standard_TypeDef.hxx>
 
 /// get the boundin box of theshape.
-  /// \param theShape   the shape
-  /// \param theTolerance precise TRUE for precise computation; FALSE for fast one.
-  /// \param theFaces  the faces shared
-  /// \param theError  error
+/// \param theShape   the shape
+/// \param theTolerance precise TRUE for precise computation; FALSE for fast one.
+/// \param theFaces  the faces shared
+/// \param theError  error
 GEOMALGOAPI_EXPORT
-bool GetSharedredFaces( const ListOfShape& theShapes,
-                        ListOfShape & theFaces,
-                        const bool  theMultiShare,
-                        std::string& theError);
+bool GetSharedredFaces(const ListOfShape& theShapes,
+                       ListOfShape & theFaces,
+                       const bool  theMultiShare,
+                       std::string& theError);
 
 #endif //GEOMALGOAPI_SHAREDFACES_H_