Salome HOME
PAL16202,16203 (Propagation 1D on edges group)
authoreap <eap@opencascade.com>
Wed, 7 Nov 2007 09:41:42 +0000 (09:41 +0000)
committereap <eap@opencascade.com>
Wed, 7 Nov 2007 09:41:42 +0000 (09:41 +0000)
   remove useless includes and
+  /*!
+   * \brief Return submeshes of groups containing the given subshape
+   */
+  std::list<SMESH_subMesh*> GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const
+    throw(SALOME_Exception);

src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx

index b6c55a0cf2f6180a0fd9364017fa5a75c1fa66ed..9a236a186ba5a95036646a8b167f4511dcd2e09a 100644 (file)
@@ -35,6 +35,7 @@
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Script.hxx"
 #include "SMESHDS_GroupOnGeom.hxx"
+#include "SMESHDS_Document.hxx"
 #include "SMDS_MeshVolume.hxx"
 
 #include "utilities.h"
 #include "DriverUNV_R_SMDS_Mesh.h"
 #include "DriverSTL_R_SMDS_Mesh.h"
 
-#include <BRepTools_WireExplorer.hxx>
 #include <BRepPrimAPI_MakeBox.hxx>
-#include <BRep_Builder.hxx>
-#include <gp_Pnt.hxx>
-
-#include <TCollection_AsciiString.hxx>
 #include <TopExp.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_Array1OfShape.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
-
-#include <memory>
+#include <TopoDS_Iterator.hxx>
 
 #include "Utils_ExceptHandlers.hxx"
 
@@ -724,7 +719,7 @@ SMESH_subMesh *SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
  */
 //=============================================================================
 
-SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
+SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
   throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
@@ -732,13 +727,12 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
   
   int index = _myMeshDS->ShapeToIndex(aSubShape);
 
-  map <int, SMESH_subMesh *>::iterator i_sm = _mapSubMesh.find(index);
+  map <int, SMESH_subMesh *>::const_iterator i_sm = _mapSubMesh.find(index);
   if ( i_sm != _mapSubMesh.end())
     aSubMesh = i_sm->second;
 
   return aSubMesh;
 }
-
 //=============================================================================
 /*!
  * Get the SMESH_subMesh object implementation. Dont create it, return null
@@ -746,17 +740,51 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
  */
 //=============================================================================
 
-SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID)
+SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) const
 throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   
-  map <int, SMESH_subMesh *>::iterator i_sm = _mapSubMesh.find(aShapeID);
+  map <int, SMESH_subMesh *>::const_iterator i_sm = _mapSubMesh.find(aShapeID);
   if (i_sm == _mapSubMesh.end())
     return NULL;
   return i_sm->second;
 }
+//================================================================================
+/*!
+ * \brief Return submeshes of groups containing the given subshape
+ */
+//================================================================================
 
+list<SMESH_subMesh*>
+SMESH_Mesh::GetGroupSubMeshesContaining(const TopoDS_Shape & aSubShape) const
+  throw(SALOME_Exception)
+{
+  Unexpect aCatch(SalomeException);
+  list<SMESH_subMesh*> found;
+
+  SMESH_subMesh * subMesh = GetSubMeshContaining(aSubShape);
+  if ( !subMesh )
+    return found;
+
+  // submeshes of groups have max IDs, so search from the map end
+  map<int, SMESH_subMesh *>::const_reverse_iterator i_sm;
+  for ( i_sm = _mapSubMesh.rbegin(); i_sm != _mapSubMesh.rend(); ++i_sm) {
+    SMESHDS_SubMesh * ds = i_sm->second->GetSubMeshDS();
+    if ( ds && ds->IsComplexSubmesh() ) {
+      TopExp_Explorer exp( i_sm->second->GetSubShape(), aSubShape.ShapeType() );
+      for ( ; exp.More(); exp.Next() ) {
+        if ( aSubShape.IsSame( exp.Current() )) {
+          found.push_back( i_sm->second );
+          break;
+        }
+      }
+    } else {
+      break;
+    }
+  }
+  return found;
+}
 //=======================================================================
 //function : IsUsedHypothesis
 //purpose  : Return True if anHyp is used to mesh aSubShape
index d7b86da5d0daefec1a7495d8a2c75c5b9b7114e5..e8ccaf7a0db33757a609caf71e2af7a9df9fc4ed 100644 (file)
 #include "SMESH_SMESH.hxx"
 
 #include "SMESH_Hypothesis.hxx"
-//#include "SMESH_subMesh.hxx"
 
-#include "SMESHDS_Document.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMDSAbs_ElementType.hxx"
 
-//#include "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-
 #include "Utils_SALOME_Exception.hxx"
 
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopoDS_CompSolid.hxx>
-#include <TopoDS_Solid.hxx>
-#include <TopoDS_Shell.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Vertex.hxx>
 #include <TopoDS_Shape.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
-#include <vector>
 #include <list>
 #include <map>
 
-#include <string>
-#include <iostream>
-
 class SMESH_Gen;
+class SMESHDS_Document;
 class SMESH_Group;
 class TopTools_ListOfShape;
 class SMESH_subMesh;
 class SMESH_HypoFilter;
 class TopoDS_Solid;
 
-typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
-
 class SMESH_EXPORT SMESH_Mesh
 {
 public:
@@ -122,7 +99,7 @@ public:
   RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId)
     throw(SALOME_Exception);
   
-  const list <const SMESHDS_Hypothesis * >&
+  const std::list <const SMESHDS_Hypothesis * >&
   GetHypothesisList(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
 
@@ -130,12 +107,12 @@ public:
                                          const SMESH_HypoFilter& aFilter,
                                          const bool              andAncestors) const;
   
-  int GetHypotheses(const TopoDS_Shape &                aSubShape,
-                    const SMESH_HypoFilter&             aFilter,
-                    list <const SMESHDS_Hypothesis * >& aHypList,
-                    const bool                          andAncestors) const;
+  int GetHypotheses(const TopoDS_Shape &                     aSubShape,
+                    const SMESH_HypoFilter&                  aFilter,
+                    std::list <const SMESHDS_Hypothesis * >& aHypList,
+                    const bool                               andAncestors) const;
 
-  const list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
+  const std::list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
   
   void ClearLog() throw(SALOME_Exception);
   
@@ -148,38 +125,52 @@ public:
   SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape)
+  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const int aShapeID)
+  SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const
     throw(SALOME_Exception);
-  
+  /*!
+   * \brief Return submeshes of groups containing the given subshape
+   */
+  std::list<SMESH_subMesh*> GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const
+    throw(SALOME_Exception);
+  /*!
+   * \brief Say all submeshes that theChangedHyp has been modified
+   */
   void NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp);
-  // Say all submeshes that theChangedHyp has been modified
 
-  const list < SMESH_subMesh * >&
-  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
-    throw(SALOME_Exception);
-  
+  const std::list < SMESH_subMesh * >&
+  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) throw(SALOME_Exception);
+  /*!
+   * \brief Return True if anHyp is used to mesh aSubShape
+   */
   bool IsUsedHypothesis(SMESHDS_Hypothesis *  anHyp,
                        const SMESH_subMesh * aSubMesh);
-  // Return True if anHyp is used to mesh aSubShape
-  
+  /*!
+   * \brief check if a hypothesis alowing notconform mesh is present
+   */
   bool IsNotConformAllowed() const;
-  // check if a hypothesis alowing notconform mesh is present
   
   bool IsMainShape(const TopoDS_Shape& theShape) const;
-
+  /*!
+   * \brief Return list of ancestors of theSubShape in the order
+   *        that lower dimention shapes come first
+   */
   const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const;
-  // return list of ancestors of theSubShape in the order
-  // that lower dimention shapes come first.
 
   void SetAutoColor(bool theAutoColor) throw(SALOME_Exception);
 
   bool GetAutoColor() throw(SALOME_Exception);
 
-  /*! Check group names for duplications.
-   *  Consider maximum group name length stored in MED file.
+  /*!
+   * \brief Return data map of descendant to ancestor shapes
+   */
+  typedef TopTools_IndexedDataMapOfShapeListOfShape TAncestorMap;
+  const TAncestorMap& GetAncestorMap() const { return _mapAncestors; }
+  /*!
+   * \brief Check group names for duplications.
+   *  Consider maximum group name length stored in MED file
    */
   bool HasDuplicatedGroupNamesMED();
 
@@ -228,7 +219,7 @@ public:
   
   SMESH_Group* GetGroup (const int theGroupID);
   
-  list<int> GetGroupIds();
+  std::list<int> GetGroupIds();
   
   void RemoveGroup (const int theGroupID);
 
@@ -247,7 +238,7 @@ protected:
   int                        _idDoc;        // id given by SMESHDS_Document
   int                        _groupId;      // id generator for group objects
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
-  list <SMESH_subMesh *>     _subMeshesUsingHypothesisList;
+  std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
   SMESHDS_Document *         _myDocument;
   SMESHDS_Mesh *             _myMeshDS;
   map <int, SMESH_subMesh *> _mapSubMesh;