Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Private Attributes
concepts::HexSubdiv4z Class Reference

Subdivision strategy for hexahedrons which generates 4 children along the z direction. More...

#include <hexsubdiv.hh>

Inheritance diagram for concepts::HexSubdiv4z:
Inheritance graph
[legend]
Collaboration diagram for concepts::HexSubdiv4z:
Collaboration graph
[legend]

List of all members.

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 HexSubdiv4zinstance ()

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).
QuadfindFace (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< HexSubdiv4zinstance_

Detailed Description

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.

Author:
Philipp Frauenfelder, 2002

Definition at line 297 of file hexsubdiv.hh.


Constructor & Destructor Documentation

virtual concepts::HexSubdiv4z::~HexSubdiv4z ( ) [virtual]

Member Function Documentation

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.

Parameters:
qFace to be subdivided into 4
Returns:
true if the subdivision in one shot succeeded, false otherwise
Exceptions:
StrategyChangeif 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).

Parameters:
vVertex to look for
qList of quads to search through
tauOrientation flags of the quads
rhoRotation flags of the quads
vtxIdxIndex location of the vertex in the quads counted from vertex 0 in the quad in rho = 0 direction
Returns:
the matching quad
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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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.

Parameters:
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone 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 0011
1 1100

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.

Returns:
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 0011
1 1100

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.

Returns:
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 0123
1 1230

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.

Returns:
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 0011
1 1100

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.

Returns:
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 0011
1 1100

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.

Returns:
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 0123
1 1230

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.

Returns:
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 0123
1 1230

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.

Returns:
A, B, C and D

Member Data Documentation

std::auto_ptr<HexSubdiv4z> concepts::HexSubdiv4z::instance_ [static, private]

Definition at line 306 of file hexsubdiv.hh.


The documentation for this class was generated from the following file:

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)