Union Class Reference

#include <Union.hpp>

Inheritance diagram for Union:

Inheritance graph
[legend]
Collaboration diagram for Union:

Collaboration graph
[legend]

List of all members.

Public Types

typedef std::list
< ConstReferenceCounting
< Object > >::iterator 
iterator
typedef std::list
< ConstReferenceCounting
< Object > >::const_iterator 
const_iterator
enum  ShapeType {
  sphere = 1, cylinder = 2, cone = 3, cube = 4,
  plane = 5, torus = 6, union_ = 7, difference = 8,
  intersection = 9, not_ = 10, infiniteCylinder = 11, infiniteCone = 12,
  analytic = 13
}
typedef std::vector
< ConstReferenceCounting
< Transform > > 
TransformationsList

Public Member Functions

const_iterator begin () const
iterator begin ()
const_iterator end () const
iterator end ()
void push_back (ConstReferenceCounting< Object > O)
 Union ()
 Union (const Union &U)
 ~Union ()
ReferenceCounting< ShapegetCopy () const
const TransformationsListtransformationsList () const
void setTransformationsList (const TransformationsList &l)
bool inside (const TinyVector< 3, real_t > &x) const
const ShapeTypetype () const
size_t numberOfTransformations () const
void setTransformation (const Transform &t)
TinyVector< 3, real_t > inverseTransformation (const size_t &i, const TinyVector< 3, real_t > &x) const
void parseTransform (const parsetrans &trans)

Protected Member Functions

bool __inShape (const TinyVector< 3, real_t > &x) const
std::ostream & __put (std::ostream &os) const
ReferenceCounting< Shape__getCopy () const

Protected Attributes

const ShapeType __type
TransformationsList __trans

Private Types

typedef std::list
< ConstReferenceCounting
< Object > > 
ObjectList

Private Attributes

ObjectList __objects

Friends

std::ostream & operator<< (std::ostream &os, const Shape &shape)


Detailed Description

Definition at line 34 of file Union.hpp.


Member Typedef Documentation

typedef std::list<ConstReferenceCounting<Object> > Union::ObjectList [private]

Definition at line 38 of file Union.hpp.

Definition at line 41 of file Union.hpp.

Definition at line 42 of file Union.hpp.

typedef std::vector<ConstReferenceCounting<Transform> > Shape::TransformationsList [inherited]

Definition at line 61 of file Shape.hpp.


Member Enumeration Documentation

enum Shape::ShapeType [inherited]

This is the list of identifiers used for shapes. Identifiers are mean to be explicit ...

  • union_ is used instead of 'union' because 'union' is a C++ keyword.
  • not_ is used instead of 'not' because 'not' is a C++ keyword.
Enumerator:
sphere 
cylinder 
cone 
cube 
plane 
torus 
union_ 
difference 
intersection 
not_ 
infiniteCylinder 
infiniteCone 
analytic 

Definition at line 45 of file Shape.hpp.

00045                  { 
00046     sphere          = 1,
00047     cylinder        = 2,
00048     cone            = 3,
00049     cube            = 4,
00050     plane           = 5,
00051     torus           = 6,
00052     union_          = 7,    
00053     difference      = 8,
00054     intersection    = 9,
00055     not_            =10,
00056     infiniteCylinder=11,
00057     infiniteCone    =12,
00058     analytic        =13
00059   };


Constructor & Destructor Documentation

Union::Union (  ) 

Constructor

Definition at line 39 of file Union.cpp.

Referenced by __getCopy().

00040   : Shape(union_)
00041 {
00042   ;
00043 }

Union::Union ( const Union U  ) 

Copy constructor

Parameters:
U given union

Definition at line 46 of file Union.cpp.

References __objects.

00047   : Shape(U)
00048 {
00049   for (ObjectList::const_iterator i = U.__objects.begin();
00050        i != U.__objects.end(); ++i) {
00051     __objects.push_back((*i)->getCopy());
00052   }
00053 }

Union::~Union (  )  [inline]

Destructor

Definition at line 130 of file Union.hpp.

00131   {
00132     ;
00133   }


Member Function Documentation

bool Union::__inShape ( const TinyVector< 3, real_t > &  x  )  const [inline, protected, virtual]

Returns true if the point x is inside the Union

Parameters:
x point to check
Returns:
true if $ x \in S $

Implements Shape.

Definition at line 55 of file Union.hpp.

References __objects.

00056   {
00057     for (Union::const_iterator i=__objects.begin();
00058          i != __objects.end(); ++i) {
00059       if((*i)->inside(x)) {
00060         return true;
00061       }
00062     }
00063     return false;
00064   }

std::ostream & Union::__put ( std::ostream &  os  )  const [protected, virtual]

prints the union to a stream

Parameters:
os given stream
Returns:
os

Implements Shape.

Definition at line 23 of file Union.cpp.

References Shape::__trans, begin(), end(), and Shape::numberOfTransformations().

00024 {
00025   os << "union {\n";
00026   for (Union::const_iterator i = begin();
00027        i != end(); ++i) {
00028     os << (*(*i));
00029   }
00030   for (size_t i=0; i<numberOfTransformations(); i++) {
00031     os << __trans[i]->povWrite() << '\n';
00032   }
00033   os << "}\n";
00034 
00035   return os;
00036 }

Here is the call graph for this function:

ReferenceCounting< Shape > Union::__getCopy (  )  const [protected, virtual]

Gets a copy of the Union

Returns:
deep copy of the Union

Implements Shape.

Definition at line 56 of file Union.cpp.

References Union().

00057 {
00058   return new Union(*this);
00059 }

Here is the call graph for this function:

const_iterator Union::begin (  )  const [inline]

Definition at line 83 of file Union.hpp.

References __objects.

Referenced by Domain::__buildReferenceAssociation(), SurfaceMeshGenerator::Internals::__generateMesh(), and __put().

00084   {
00085     return __objects.begin();
00086   }

iterator Union::begin (  )  [inline]

Definition at line 88 of file Union.hpp.

References __objects.

00089   {
00090     return __objects.begin();
00091   }

const_iterator Union::end (  )  const [inline]

Definition at line 93 of file Union.hpp.

References __objects.

Referenced by Domain::__buildReferenceAssociation(), SurfaceMeshGenerator::Internals::__generateMesh(), and __put().

00094   {
00095     return __objects.end();
00096   }

iterator Union::end (  )  [inline]

Definition at line 98 of file Union.hpp.

References __objects.

00099   {
00100     return __objects.end();
00101   }

void Union::push_back ( ConstReferenceCounting< Object O  )  [inline]

Adds an object to the Union

Parameters:
O added object

Definition at line 108 of file Union.hpp.

References __objects.

Referenced by SurfaceMeshGenerator::Internals::__generateMesh(), and InsideListExpressionLeaf::objects().

00109   {
00110     __objects.push_back(O);
00111   }

ReferenceCounting<Shape> Shape::getCopy (  )  const [inline, inherited]

Creates a copy of the shape

Returns:
copy of the shape

Definition at line 100 of file Shape.hpp.

References Shape::__getCopy(), Shape::__trans, and Shape::transformationsList().

00101   {
00102     ReferenceCounting<Shape> shape = this->__getCopy();
00103     TransformationsList transformationsList;
00104     for (TransformationsList::const_iterator i=__trans.begin();
00105          i != __trans.end(); ++i) {
00106       const ConstReferenceCounting<Transform>& t = *i;
00107       transformationsList.push_back(t->getCopy());
00108     }
00109     shape->setTransformationsList(transformationsList);
00110 
00111     return shape;
00112   }

Here is the call graph for this function:

const TransformationsList& Shape::transformationsList (  )  const [inline, inherited]

read only Access to the transformation lists

Returns:
__trans

Definition at line 119 of file Shape.hpp.

References Shape::__trans.

Referenced by SurfaceMeshGenerator::Internals::__generateMesh(), Shape::getCopy(), InfiniteCone::InfiniteCone(), InfiniteCylinder::InfiniteCylinder(), ObjectTransformer::operator()(), and Plane::Plane().

00120   {
00121     return __trans;
00122   }

void Shape::setTransformationsList ( const TransformationsList l  )  [inline, inherited]

sets the transformation list

Definition at line 128 of file Shape.hpp.

References Shape::__trans.

Referenced by InfiniteCone::InfiniteCone(), InfiniteCylinder::InfiniteCylinder(), and Plane::Plane().

00129   {
00130     __trans = l;
00131   }

bool Shape::inside ( const TinyVector< 3, real_t > &  x  )  const [inline, inherited]

Checks if a point is in the shape

Parameters:
x the point
Returns:
true if $ x\in S $

Definition at line 140 of file Shape.hpp.

References Shape::__inShape(), Shape::inverseTransformation(), and Shape::numberOfTransformations().

Referenced by SurfaceMeshGenerator::Internals::__createSurface(), SurfaceMeshGenerator::Internals::__createTrianglesIntersection(), ConformTransformationQ1Hexahedron::__inside(), and SurfaceMeshGenerator::Internals::__splitEdge().

00141   {
00142     TinyVector<3,real_t> X = x;
00143     for (size_t i = numberOfTransformations()-1; i<numberOfTransformations(); --i)
00144       X = inverseTransformation(i, X);
00145     return this->__inShape(X);
00146   }

Here is the call graph for this function:

const ShapeType& Shape::type (  )  const [inline, inherited]

Read only access to the type of the shape

Returns:
__type

Definition at line 153 of file Shape.hpp.

References Shape::__type.

Referenced by Domain::__buildReferenceAssociation().

00154   { 
00155     return __type;
00156   }

size_t Shape::numberOfTransformations (  )  const [inline, inherited]

Gets the number of transformations applied to the shape

Returns:
number of transformations

Definition at line 163 of file Shape.hpp.

References Shape::__trans.

Referenced by __put(), Sphere::__put(), Not::__put(), Intersection::__put(), Difference::__put(), Cylinder::__put(), Cube::__put(), and Shape::inside().

00164   {
00165     return __trans.size();
00166   }

void Shape::setTransformation ( const Transform t  )  [inherited]

Adds a transformation to the shape

Parameters:
t given transformation

Definition at line 30 of file Shape.cpp.

References Shape::__trans, and Transform::getCopy().

Referenced by Shape::parseTransform().

00031 {
00032   __trans.push_back(T.getCopy());
00033 }

Here is the call graph for this function:

TinyVector<3, real_t> Shape::inverseTransformation ( const size_t &  i,
const TinyVector< 3, real_t > &  x 
) const [inline, inherited]

Applies inverse of transformation i to the point x.

Parameters:
i number of the transformation
x the point to inverse
Returns:
the inverse

Definition at line 183 of file Shape.hpp.

References Shape::__trans.

Referenced by Shape::inside().

00185   {
00186     return __trans[i]->inverse(x);
00187   }

void Shape::parseTransform ( const parsetrans trans  )  [inherited]

Builds the transformations vector using informations stored in trans.

Parameters:
trans transformation parser

Definition at line 41 of file Shape.cpp.

References parsetrans::mat, matrix, parsetrans::number, rotation, scale, Shape::setTransformation(), translation, ErrorHandler::unexpected, and parsetrans::vect.

00042 {
00043   for (int i=0; i<trans.number ; i++) {
00044     switch (trans.type[i]) {
00045     case matrix: {
00046       TransformMatrix M(trans.mat);
00047       this->setTransformation(M);
00048       break;
00049     }
00050     case rotation: {
00051       TinyVector<3> v( trans.vect[0][i],
00052                        trans.vect[1][i],
00053                        trans.vect[2][i]);
00054       Rotation R(v);
00055       this->setTransformation(R);
00056       break;
00057     }
00058     case translation: {
00059       TinyVector<3> v( trans.vect[0][i],
00060                        trans.vect[1][i],
00061                        trans.vect[2][i]);
00062       Translation T(v);
00063       this->setTransformation(T);
00064       break;
00065     }
00066     case scale: {
00067       TinyVector<3> v( trans.vect[0][i],
00068                        trans.vect[1][i],
00069                        trans.vect[2][i]);
00070       Scale S(v);
00071       this->setTransformation(S);
00072       break;
00073     }
00074     default: {
00075       throw ErrorHandler(__FILE__,__LINE__,
00076                          "unknown transformation",
00077                          ErrorHandler::unexpected);
00078     }
00079     }
00080   }
00081 }

Here is the call graph for this function:


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const Shape shape 
) [friend, inherited]

Prints a shape to a stream

Parameters:
os stream
shape shape
Returns:
os

Definition at line 35 of file Shape.cpp.

00036 {
00037   return shape.__put(os);
00038 }


Member Data Documentation

The list of Shapes contained in the union

Definition at line 45 of file Union.hpp.

Referenced by __inShape(), begin(), end(), push_back(), and Union().

const ShapeType Shape::__type [protected, inherited]

Type of the transformation

Definition at line 64 of file Shape.hpp.

Referenced by Shape::type().

TransformationsList Shape::__trans [protected, inherited]


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

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