2 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 // + This file is part of enGrid. +
6 // + Copyright 2008-2013 enGits GmbH +
8 // + enGrid is free software: you can redistribute it and/or modify +
9 // + it under the terms of the GNU General Public License as published by +
10 // + the Free Software Foundation, either version 3 of the License, or +
11 // + (at your option) any later version. +
13 // + enGrid is distributed in the hope that it will be useful, +
14 // + but WITHOUT ANY WARRANTY; without even the implied warranty of +
15 // + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +
16 // + GNU General Public License for more details. +
18 // + You should have received a copy of the GNU General Public License +
19 // + along with enGrid. If not, see <http://www.gnu.org/licenses/>. +
21 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23 #ifndef swaptriangles_H
24 #define swaptriangles_H
28 #include "surfaceoperation.h"
29 #include "cadinterface.h"
32 * \todo This class desperately needs a clean-up and optimisation!
34 class SwapTriangles
: public SurfaceOperation
37 private: // attributes
39 QVector
<bool> m_Swapped
;
45 double m_SmallAreaRatio
;
46 double m_SurfErrorThreshold
;
47 double m_SurfErrorRatio
;
48 double m_AverageSurfaceError
;
49 double m_SurfaceErrorDeviation
;
53 ///returns true if performing a swap on the stencil does not change the orientation of the cells (tetra volume test)
54 bool testOrientation(stencil_t S
);
56 ///returns true if id_node1 is linked to id_node2
57 bool isEdge(vtkIdType id_node1
, vtkIdType id_node2
);
62 double computeSurfaceDistance(vec3_t x1
, vec3_t x2
, vec3_t x3
, CadInterface
* cad_interface
);
63 double edgeAngle(vec3_t x1
, vec3_t x2
, vec3_t x3
, vec3_t x4
);
64 vtkIdType
neighbourNode(vtkIdType id_node0
, vtkIdType id_node1
, vtkIdType id_node2
);
65 bool swapDueToSurfaceNoise(stencil_t S
);
66 void computeSurfaceErrors(const QVector
<vec3_t
> &x
, int bc
, double &err1
, double &err2
);
67 void computeAverageSurfaceError();
68 virtual void operate();
74 void setRespectBC(bool b
) { m_RespectBC
= b
; }
75 void setFeatureSwap(bool b
) { m_FeatureSwap
= b
; }
76 void setMaxNumLoops(int n
) { m_MaxNumLoops
= n
; }
77 void setSmallAreaSwap(bool b
) { m_SmallAreaSwap
= b
; }
78 void setVerboseOn() { m_Verbose
= true; }
79 void setVerboseOff() { m_Verbose
= false; }