Subdivision strategy for hexahedrons which generates 4 children along the z direction. More...
#include <hexsubdiv.hh>


Public Member Functions | |
| virtual void | createChildren (Hexahedron &q) const |
| If no children of q exist, they are created. | |
| virtual void | removeChildren (Hexahedron &q) const |
| If there are children, they are removed. | |
| virtual | ~HexSubdiv4z () |
Static Public Member Functions | |
| static const HexSubdiv4z * | instance () |
Protected Member Functions | |
| bool | faceSubdiv4 (Quad &q) const throw (StrategyChange) |
Takes a face and tries to subdivide it into 4 (by setting the strategy to QuadSubdiv4). | |
| Quad * | findFace (const Vertex *const v, Quad *const q[4], const uint tau, const uint rho, const uint vtxIdx) const |
Looks for the quad in q which contains the vertex v. | |
| virtual std::ostream & | info (std::ostream &os) const |
| Returns information in an output stream. | |
| void | subFace0011 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const |
Gets the two children of q and sorts them. | |
| void | subFace1100 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const |
Gets the two children of q and sorts them. | |
| void | subFace0110 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const |
Gets the two children of q and sorts them. | |
| void | subFace1001 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const |
Gets the two children of q and sorts them. | |
| void | subFace0123 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const |
Gets the four children of q and sorts them. | |
| void | subFace1230 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const |
Gets the four children of q and sorts them. | |
| void | subFace2301 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const |
Gets the four children of q and sorts them. | |
| void | subdivFace0 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
| void | subdivFace1 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
| void | subdivFace2 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
| void | subdivFace3 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
| void | subdivFace4 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
| void | subdivFace5 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const |
Subdivides a face of a hexehedron h into 4 children. | |
Static Private Attributes | |
| static std::auto_ptr< HexSubdiv4z > | instance_ |
Subdivision strategy for hexahedrons which generates 4 children along the z direction.
The children are generated by subdividing the respective faces into 2 or 4 quadrilaterals and introducing one new edge and 4 new faces.
Definition at line 297 of file hexsubdiv.hh.
| virtual concepts::HexSubdiv4z::~HexSubdiv4z | ( | ) | [virtual] |
| virtual void concepts::HexSubdiv4z::createChildren | ( | Hexahedron & | q | ) | const [virtual] |
If no children of q exist, they are created.
Implements concepts::HexSubdivision.
| bool concepts::HexSubdivision::faceSubdiv4 | ( | Quad & | q | ) | const throw (StrategyChange) [protected, inherited] |
Takes a face and tries to subdivide it into 4 (by setting the strategy to QuadSubdiv4).
Firstly, a normal subdivision in one shot into 4 children is tried. If this fails (by catching a StrategyChange exception), then a previous subdivision into 2 children was executed on this face. The orthogonal subdivision into 2 children is then reserved (by setting the strategy accordingly) on the two children of the face. This can be called a subdivision into 4 children in two shots.
| q | Face to be subdivided into 4 |
| StrategyChange | if the subdivision in two shots fails too |
| Quad* concepts::HexSubdivision::findFace | ( | const Vertex *const | v, |
| Quad *const | q[4], | ||
| const uint | tau, | ||
| const uint | rho, | ||
| const uint | vtxIdx | ||
| ) | const [protected, inherited] |
Looks for the quad in q which contains the vertex v.
This is done by a loop over the four entries of q and checking the indicated vertex (given by the index location vtxIdx).
| v | Vertex to look for |
| q | List of quads to search through |
| tau | Orientation flags of the quads |
| rho | Rotation flags of the quads |
| vtxIdx | Index location of the vertex in the quads counted from vertex 0 in the quad in rho = 0 direction |
| virtual std::ostream& concepts::HexSubdiv4z::info | ( | std::ostream & | os | ) | const [protected, virtual] |
Returns information in an output stream.
Reimplemented from concepts::OutputOperator.
| static const HexSubdiv4z* concepts::HexSubdiv4z::instance | ( | ) | [static] |
| virtual void concepts::HexSubdiv4z::removeChildren | ( | Hexahedron & | q | ) | const [virtual] |
If there are children, they are removed.
The additional faces, edges and vertices are removed as well.
Implements concepts::HexSubdivision.
| void concepts::HexSubdivision::subdivFace0 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subdivFace1 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subdivFace2 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subdivFace3 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subdivFace4 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subdivFace5 | ( | Hexahedron & | h, |
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D, | ||
| bool | normal | ||
| ) | const [protected, inherited] |
Subdivides a face of a hexehedron h into 4 children.
normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.
| h | Hexahedron of which the face has to be subdivided |
| A | Result |
| B | Result |
| C | Result |
| D | Result |
| normal | one or two shots |
| void concepts::HexSubdivision::subFace0011 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B | ||
| ) | const [protected, inherited] |
Gets the two children of q and sorts them.
The sorting rule is given in the name and parametrized by the orientation flags rho and tau.
The code 0011 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 |
The indices 0 and 1 denote the index in the call to Quad::child which has to be used to get the correct face back.
A and B | void concepts::HexSubdivision::subFace0110 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B | ||
| ) | const [protected, inherited] |
Gets the two children of q and sorts them.
The sorting rule is given in the name and parametrized by the orientation flags rho and tau.
The code 0011 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 |
The indices 0 and 1 denote the index in the call to Quad::child which has to be used to get the correct face back.
A and B | void concepts::HexSubdivision::subFace0123 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D | ||
| ) | const [protected, inherited] |
Gets the four children of q and sorts them.
The sorting rule is given in the name and and parametrized by the orientation flags rho and tau.
The code 0123 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 1 | 2 | 3 |
| 1 | 1 | 2 | 3 | 0 |
The indices 0, 1, 2 and 3 denote the index in the call to Quad::child which has to be used to get the correct face back.
A, B, C and D | void concepts::HexSubdivision::subFace1001 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B | ||
| ) | const [protected, inherited] |
Gets the two children of q and sorts them.
The sorting rule is given in the name and parametrized by the orientation flags rho and tau.
The code 0011 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 |
The indices 0 and 1 denote the index in the call to Quad::child which has to be used to get the correct face back.
A and B | void concepts::HexSubdivision::subFace1100 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B | ||
| ) | const [protected, inherited] |
Gets the two children of q and sorts them.
The sorting rule is given in the name and parametrized by the orientation flags rho and tau.
The code 0011 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 |
The indices 0 and 1 denote the index in the call to Quad::child which has to be used to get the correct face back.
A and B | void concepts::HexSubdivision::subFace1230 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D | ||
| ) | const [protected, inherited] |
Gets the four children of q and sorts them.
The sorting rule is given in the name and and parametrized by the orientation flags rho and tau.
The code 0123 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 1 | 2 | 3 |
| 1 | 1 | 2 | 3 | 0 |
The indices 0, 1, 2 and 3 denote the index in the call to Quad::child which has to be used to get the correct face back.
A, B, C and D | void concepts::HexSubdivision::subFace2301 | ( | Quad & | q, |
| Z2 | rho, | ||
| Z4 | tau, | ||
| Quad *& | A, | ||
| Quad *& | B, | ||
| Quad *& | C, | ||
| Quad *& | D | ||
| ) | const [protected, inherited] |
Gets the four children of q and sorts them.
The sorting rule is given in the name and and parametrized by the orientation flags rho and tau.
The code 0123 means the following:
rho \ tau | 0 | 1 | 2 | 3 |
| 0 | 0 | 1 | 2 | 3 |
| 1 | 1 | 2 | 3 | 0 |
The indices 0, 1, 2 and 3 denote the index in the call to Quad::child which has to be used to get the correct face back.
A, B, C and D std::auto_ptr<HexSubdiv4z> concepts::HexSubdiv4z::instance_ [static, private] |
Definition at line 306 of file hexsubdiv.hh.