SALOME - SMESH
StdMeshers_Quadrangle_2D.hxx
Go to the documentation of this file.
1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // SMESH SMESH : implementaion of SMESH idl descriptions
23 // File : StdMeshers_Quadrangle_2D.hxx
24 // Moved here from SMESH_Quadrangle_2D.hxx
25 // Author : Paul RASCLE, EDF
26 // Module : SMESH
27 // $Header$
28 //
29 #ifndef _SMESH_QUADRANGLE_2D_HXX_
30 #define _SMESH_QUADRANGLE_2D_HXX_
31 
32 #include "SMESH_StdMeshers.hxx"
33 
34 #include "SMESH_2D_Algo.hxx"
36 
37 class SMESH_Mesh;
38 class SMESH_MesherHelper;
40 class SMDS_MeshNode;
41 struct uvPtStruct;
42 
43 
45 
47 typedef struct faceQuadStruct
48 {
49  std::vector< StdMeshers_FaceSide*> side;
50  bool isEdgeOut[4]; // true, if an edge has more nodes, than the opposite
54 
56 {
57 public:
58  StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen);
59  virtual ~StdMeshers_Quadrangle_2D();
60 
61  virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
62  const TopoDS_Shape& aShape,
64 
65  virtual bool Compute(SMESH_Mesh& aMesh,
66  const TopoDS_Shape& aShape);
67 
68  virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape,
69  MapShapeNbElems& aResMap);
70 
71  FaceQuadStruct* CheckAnd2Dcompute(SMESH_Mesh& aMesh,
72  const TopoDS_Shape& aShape,
73  const bool CreateQuadratic);
74 
75 protected:
76 
77  FaceQuadStruct* CheckNbEdges(SMESH_Mesh& aMesh,
78  const TopoDS_Shape& aShape);
79 
80  bool CheckNbEdgesForEvaluate(SMESH_Mesh& aMesh,
81  const TopoDS_Shape & aShape,
82  MapShapeNbElems& aResMap,
83  std::vector<int>& aNbNodes,
84  bool& IsQuadratic);
85 
86  bool SetNormalizedGrid(SMESH_Mesh& aMesh,
87  const TopoDS_Shape& aShape,
88  FaceQuadStruct*& quad);
89 
90  void SplitQuad(SMESHDS_Mesh *theMeshDS,
91  const int theFaceID,
92  const SMDS_MeshNode* theNode1,
93  const SMDS_MeshNode* theNode2,
94  const SMDS_MeshNode* theNode3,
95  const SMDS_MeshNode* theNode4);
96 
100  bool ComputeQuadPref(SMESH_Mesh& aMesh,
101  const TopoDS_Shape& aShape,
102  FaceQuadStruct* quad);
103 
104  bool EvaluateQuadPref(SMESH_Mesh& aMesh,
105  const TopoDS_Shape& aShape,
106  std::vector<int>& aNbNodes,
107  MapShapeNbElems& aResMap,
108  bool IsQuadratic);
109 
110  UVPtStruct* LoadEdgePoints2(SMESH_Mesh& aMesh,
111  const TopoDS_Face& F, const TopoDS_Edge& E,
112  bool IsReverse);
113 
114  UVPtStruct* LoadEdgePoints(SMESH_Mesh& aMesh,
115  const TopoDS_Face& F, const TopoDS_Edge& E,
116  double first, double last);
117 
118  UVPtStruct* MakeEdgePoints(SMESH_Mesh& aMesh,
119  const TopoDS_Face& F, const TopoDS_Edge& E,
120  double first, double last, int nb_segm);
121 
122  // true if QuadranglePreference hypothesis is assigned that forces
123  // construction of quadrangles if the number of nodes on opposite edges
124  // is not the same in the case where the global number of nodes on edges
125  // is even
127 
129 
131 
132  SMESH_MesherHelper* myTool; // tool for working with quadratic elements
133 };
134 
135 #endif
virtual bool CheckHypothesis(SMESH_Mesh &aMesh, const TopoDS_Shape &aShape, SMESH_Hypothesis::Hypothesis_Status &aStatus)=0
Check hypothesis definition to mesh a shape.
virtual bool Evaluate(SMESH_Mesh &aMesh, const TopoDS_Shape &aShape, MapShapeNbElems &aResMap)=0
evaluates size of prospective mesh on a shape
std::vector< StdMeshers_FaceSide * > side
#define STDMESHERS_EXPORT
virtual bool Compute(SMESH_Mesh &aMesh, const TopoDS_Shape &aShape)=0
Computes mesh on a shape.
std::map< SMESH_subMesh *, std::vector< int > > MapShapeNbElems
Definition: SMESH_Algo.hxx:55
uvPtStruct UVPtStruct
struct faceQuadStruct FaceQuadStruct
Represents a side of a quasi quadrilateral face. It can be composed of several edges. Gives access to geometry and 1D mesh of a side.