SurfaceMeshGenerator::Internals::TriangleCut Class Reference

Inheritance diagram for SurfaceMeshGenerator::Internals::TriangleCut:

Inheritance graph
[legend]
Collaboration diagram for SurfaceMeshGenerator::Internals::TriangleCut:

Collaboration graph
[legend]

List of all members.

Public Types

enum  { NumberOfVertices = 3, NumberOfFaces = 3, NumberOfEdges = 3 }
typedef Edge FaceType
enum  Type {
  hexahedron, cartesianHexahedron, hexahedronByEdge, tetrahedron,
  triangle3d, quadrangle3d
}

Public Member Functions

 TriangleCut ()
 TriangleCut (const TriangleCut &K)
 TriangleCut (const Vertex &v0, const Vertex &v1, const Vertex &v2, size_t num, size_t num2)
 ~TriangleCut ()
 Destructor.
void getBarycentricCoordinates (const TinyVector< 2, real_t > &X, TinyVector< 3, real_t > &lambda) const
size_t numberOfVertices () const
Cell::Type type () const
const TinyVector< 3, real_t > normal () const
Edge edge (size_t i) const
const Cellmother () const
size_t motherCellFaceNumber () const
void setMother (const Cell *cell, const size_t faceNumber)
bool find (const Vertex *P)
const real_t & volume () const
void replace (Vertex *v0, Vertex *v1)
const bool & isFictitious () const
void setFictitious (const bool &b) const
const size_t & reference () const
size_t & reference ()
Vertexoperator() (const size_t &i)
const Vertexoperator() (const size_t &i) const

Public Attributes

TinyVector< 3, TinyVector
< 2, int > > 
edgecut
TinyVector< 3, size_t > isInTriangle
TinyVector< 3, TinyVector
< 2, const Vertex * > > 
pointsIntersection
std::map< const Vertex *,const
Vertex * > 
pointsin
size_t numobject
size_t otherobject

Static Public Attributes

static const size_t faces [NumberOfEdges][FaceType::NumberOfVertices] = {{1,2},{2,0},{0,1}}
static const size_t edges [NumberOfEdges][Edge::NumberOfVertices] = {{1,2},{2,0},{0,1}}

Protected Attributes

const Cell__motherCell
size_t __motherCellFaceNumber
size_t __reference
 Reference of the Cell.
real_t __volume
 Volume or surface of the cell.
Vertex ** __vertices
 Pointers on vertices of the cell.
bool __isFictitious
 indicates if the cell is to be taken into accounts for computations


Detailed Description

Definition at line 497 of file SurfaceMeshGenerator.cpp.


Member Typedef Documentation

typedef Edge Triangle::FaceType [inherited]

Definition at line 63 of file Triangle.hpp.


Member Enumeration Documentation

anonymous enum [inherited]

Enumerator:
NumberOfVertices  number of vertices
NumberOfFaces  number of faces
NumberOfEdges  number of edges

Definition at line 57 of file Triangle.hpp.

00057        {
00058     NumberOfVertices = 3,       
00059     NumberOfFaces    = 3,       
00060     NumberOfEdges    = 3        
00061   };

enum Cell::Type [inherited]

Enumerator:
hexahedron 
cartesianHexahedron 
hexahedronByEdge 
tetrahedron 
triangle3d 
quadrangle3d 

Definition at line 40 of file Cell.hpp.

00040             {
00041     hexahedron,
00042     cartesianHexahedron,
00043     hexahedronByEdge,
00044     tetrahedron,
00045     triangle3d,
00046     quadrangle3d
00047   };


Constructor & Destructor Documentation

SurfaceMeshGenerator::Internals::TriangleCut::TriangleCut (  )  [inline]

Definition at line 509 of file SurfaceMeshGenerator.cpp.

00510   {
00511     ;
00512   }

SurfaceMeshGenerator::Internals::TriangleCut::TriangleCut ( const TriangleCut K  )  [inline]

Definition at line 514 of file SurfaceMeshGenerator.cpp.

References edgecut, isInTriangle, numobject, otherobject, pointsin, and pointsIntersection.

00514                                     {
00515     edgecut=K.edgecut;
00516     isInTriangle=K.isInTriangle;
00517     pointsIntersection=K.pointsIntersection;
00518     pointsin=K.pointsin;
00519     numobject=K.numobject;
00520     otherobject=K.otherobject;
00521   }

SurfaceMeshGenerator::Internals::TriangleCut::TriangleCut ( const Vertex v0,
const Vertex v1,
const Vertex v2,
size_t  num,
size_t  num2 
) [inline]

Definition at line 523 of file SurfaceMeshGenerator.cpp.

References edgecut, isInTriangle, numobject, and otherobject.

00528     : Triangle(v0,v1,v2)
00529   {
00530     numobject=num;
00531     otherobject=num2;
00532     edgecut=0;
00533     isInTriangle=0;
00534   }

SurfaceMeshGenerator::Internals::TriangleCut::~TriangleCut (  )  [inline]

Destructor.

Definition at line 537 of file SurfaceMeshGenerator.cpp.

00538   {
00539     ;
00540   }


Member Function Documentation

void Triangle::getBarycentricCoordinates ( const TinyVector< 2, real_t > &  X,
TinyVector< 3, real_t > &  lambda 
) const [inline, inherited]

computes barycentric coordinates in the current triangle related to a given X position.

Parameters:
X Cartesian coordinates
lambda barycentric coordinates
Todo:
This could be optimized
Warning:
this function can only be caught in the planar case

Definition at line 78 of file Triangle.hpp.

Referenced by MeshOfTriangles::find().

00080   {
00081     TinyVector<3, real_t> X2;
00082     X2[0] = X[0];
00083     X2[1] = X[1];
00084     X2[2] = 1;
00085 
00086     TinyMatrix<3, 3, real_t> M = 0;
00087     for (size_t i=0; i<3; ++i) {
00088       const Vertex& V = (*this)(i);
00089       for (size_t j=0; j<2; ++j) {
00090         M(j, i) = V[j];
00091       }
00092     }
00093 
00094     for (size_t i=0; i<3; ++i) {
00095       M(2,i) = 1;
00096     }
00097 
00098     lambda = X2/M;
00099   }

size_t Triangle::numberOfVertices (  )  const [inline, virtual, inherited]

The number of vertices of a triangle

Returns:
the number of vertices

Implements Cell.

Definition at line 106 of file Triangle.hpp.

References Triangle::NumberOfVertices.

00107   {
00108     return NumberOfVertices;
00109   }

Cell::Type Triangle::type (  )  const [inline, virtual, inherited]

Access to the type of this cell

Returns:
Cell::triangle3d

Implements Cell.

Definition at line 116 of file Triangle.hpp.

References Cell::triangle3d.

00117   {
00118     return Cell::triangle3d;
00119   }

const TinyVector<3,real_t> Triangle::normal (  )  const [inline, virtual, inherited]

Returns the normal to the face.

Returns:
normal

Implements SurfElem.

Definition at line 127 of file Triangle.hpp.

References Cell::__vertices.

00128   {
00129     const TinyVector<3>& v0 = *(__vertices[0]);
00130     const TinyVector<3>& v1 = *(__vertices[1]);
00131     const TinyVector<3>& v2 = *(__vertices[2]);
00132 
00133     const TinyVector<3> A(v1-v0);
00134     const TinyVector<3> B(v2-v0);
00135     TinyVector<3> N(A^B);
00136     const real_t n = Norm(N);
00137     N/=n;
00138     return N;
00139   }

Edge Triangle::edge ( size_t  i  )  const [inline, inherited]

Access to the ith edge of the triangle

Parameters:
i the number of the Edge
Returns:
the ith edge of the triangle

Definition at line 148 of file Triangle.hpp.

References Cell::__vertices, ASSERT, and Triangle::NumberOfVertices.

Referenced by MeshSimplifier::__proceed().

00149   {
00150     ASSERT(i<NumberOfVertices);
00151     return Edge(*__vertices[(i+1)%3], *__vertices[(i+2)%3]);
00152   }

const Cell& SurfElem::mother (  )  const [inline, inherited]

size_t SurfElem::motherCellFaceNumber (  )  const [inline, inherited]

Access to the mother cell face number

Definition at line 65 of file SurfElem.hpp.

References SurfElem::__motherCell, SurfElem::__motherCellFaceNumber, and ASSERT.

00066   {
00067     ASSERT(__motherCell!=0);
00068     return __motherCellFaceNumber;
00069   }

void SurfElem::setMother ( const Cell cell,
const size_t  faceNumber 
) [inline, inherited]

bool Cell::find ( const Vertex P  )  [inline, inherited]

Find the vertex P in the cell

Returns:
bool

Definition at line 69 of file Cell.hpp.

References Cell::__vertices, and Cell::numberOfVertices().

Referenced by Triangulation::__checkLine().

00069                                      {
00070     for(size_t i=0 ; i<numberOfVertices() ; ++i) {
00071       if(__vertices[i]==P) {
00072         return true;
00073       }
00074     }
00075     return false;
00076   }

Here is the call graph for this function:

const real_t& Cell::volume (  )  const [inline, inherited]

void Cell::replace ( Vertex v0,
Vertex v1 
) [inline, inherited]

Replaces a vertex by another

Parameters:
v0 the vertex to replace
v1 the new vertex

Definition at line 94 of file Cell.hpp.

References Cell::__vertices, Cell::numberOfVertices(), stringify(), and ErrorHandler::unexpected.

00095   {
00096     for (size_t i = 0; i<numberOfVertices(); ++i) {
00097       if (__vertices[i] == v0) {
00098         __vertices[i] = v1;
00099         return;
00100       }
00101     }
00102 
00103     const std::string errorMsg
00104       = "vertex "+stringify(v0)+" was not found while replacing "+stringify(v1);
00105 
00106     throw ErrorHandler(__FILE__,__LINE__,
00107                        errorMsg,
00108                        ErrorHandler::unexpected);
00109   }

Here is the call graph for this function:

const bool& Cell::isFictitious (  )  const [inline, inherited]

Read-only access to the fictitious state of the cell

Returns:
true if the cell is fictitious

Definition at line 116 of file Cell.hpp.

References Cell::__isFictitious.

Referenced by FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember().

00117   {
00118     return __isFictitious;
00119   }

void Cell::setFictitious ( const bool &  b  )  const [inline, inherited]

Sets fictitious state of the cell

Note:
method is const since this does not change the cell. Fictitious state is a mutable member!

Definition at line 127 of file Cell.hpp.

References Cell::__isFictitious.

Referenced by FictitiousDomainMethod::Compute().

00128   {
00129     __isFictitious = b;
00130   }

const size_t& Cell::reference (  )  const [inline, inherited]

size_t& Cell::reference (  )  [inline, inherited]

Access to the reference of the Cell.

Returns:
a reference to the reference

Definition at line 161 of file Cell.hpp.

References Cell::__reference.

00162   {
00163     return __reference;
00164   }

Vertex& Cell::operator() ( const size_t &  i  )  [inline, inherited]

Access to the ith Vertex of the Cell.

Parameters:
i the local number of the vertex
Returns:
a reference to a the vertex

Definition at line 173 of file Cell.hpp.

References Cell::__vertices, ASSERT, and Cell::numberOfVertices().

00174   {
00175     ASSERT (i<numberOfVertices());
00176     return *__vertices[i];
00177   }

Here is the call graph for this function:

const Vertex& Cell::operator() ( const size_t &  i  )  const [inline, inherited]

Read-only access to the ith Vertex of the Cell.

Parameters:
i the local number of the vertex
Returns:
a const reference to a the vertex

Definition at line 186 of file Cell.hpp.

References Cell::__vertices, ASSERT, and Cell::numberOfVertices().

00187   {
00188     ASSERT (i<numberOfVertices());
00189     return *(__vertices[i]);
00190   }

Here is the call graph for this function:


Member Data Documentation

Definition at line 506 of file SurfaceMeshGenerator.cpp.

Referenced by TriangleCut().

const size_t Triangle::faces = {{1,2},{2,0},{0,1}} [static, inherited]

Definition at line 65 of file Triangle.hpp.

const size_t Triangle::edges = {{1,2},{2,0},{0,1}} [static, inherited]

Definition at line 66 of file Triangle.hpp.

const Cell* SurfElem::__motherCell [protected, inherited]

The mother cell (ie: a 3d element which interacts with the triangle)

Definition at line 47 of file SurfElem.hpp.

Referenced by SurfElem::mother(), SurfElem::motherCellFaceNumber(), SurfElem::operator=(), and SurfElem::setMother().

size_t SurfElem::__motherCellFaceNumber [protected, inherited]

size_t Cell::__reference [protected, inherited]

Reference of the Cell.

Definition at line 51 of file Cell.hpp.

Referenced by Cell::operator=(), and Cell::reference().

real_t Cell::__volume [protected, inherited]

Vertex** Cell::__vertices [protected, inherited]

bool Cell::__isFictitious [mutable, protected, inherited]

indicates if the cell is to be taken into accounts for computations

Definition at line 60 of file Cell.hpp.

Referenced by Cell::isFictitious(), and Cell::setFictitious().


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

Generated on Wed Nov 19 00:15:57 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6