Difference Class Reference

#include <Difference.hpp>

Inheritance diagram for Difference:

Inheritance graph
[legend]
Collaboration diagram for Difference:

Collaboration graph
[legend]

List of all members.

Public Types

typedef std::list
< ReferenceCounting< Object >
>::iterator 
iterator
typedef std::list
< ReferenceCounting< 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 const_iterator begin () const
iterator begin ()
const const_iterator end () const
iterator end ()
void push_back (const ReferenceCounting< Object > &o)
 Difference ()
 Difference (const Difference &D)
 ~Difference ()
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
< ReferenceCounting< Object > > 
ObjectList

Private Attributes

ObjectList __objects

Friends

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


Detailed Description

Definition at line 34 of file Difference.hpp.


Member Typedef Documentation

typedef std::list<ReferenceCounting<Object> > Difference::ObjectList [private]

Definition at line 38 of file Difference.hpp.

Definition at line 41 of file Difference.hpp.

Definition at line 42 of file Difference.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

Difference::Difference (  )  [inline]

Constructor

Definition at line 107 of file Difference.hpp.

Referenced by __getCopy().

00108     : Shape(Shape::difference)
00109   {
00110     ;
00111   }

Difference::Difference ( const Difference D  ) 

Copy constructor

Parameters:
D given Difference

Definition at line 70 of file Difference.cpp.

References __objects.

00071   : Shape(D)
00072 {
00073   for (ObjectList::const_iterator i = D.__objects.begin();
00074        i != D.__objects.end(); ++i) {
00075     __objects.push_back((*i)->getCopy());
00076   }
00077 }

Difference::~Difference (  )  [inline]

Destuctor

Definition at line 124 of file Difference.hpp.

00125   {
00126     ;
00127   }


Member Function Documentation

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

Checks if a point is inside a differnce

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

Implements Shape.

Definition at line 46 of file Difference.cpp.

References __objects, and ASSERT.

00047 {
00048   ASSERT(__objects.begin() != __objects.end());
00049   const_iterator i = __objects.begin();
00050 
00051   if (not((*i)->inside(p))) {
00052     return false;
00053   }
00054   ++i;
00055 
00056   for (; i != __objects.end(); i++) {
00057     if((*i)->inside(p)) return false;
00058   }
00059 
00060   return true;
00061 }

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

Writes the Difference into a stream

Parameters:
os the stream
Returns:
os

Implements Shape.

Definition at line 23 of file Difference.cpp.

References __objects, Shape::__trans, and Shape::numberOfTransformations().

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

Here is the call graph for this function:

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

Gets a copy of the Difference

Returns:
deep copy of the difference

Implements Shape.

Definition at line 64 of file Difference.cpp.

References Difference().

00065 {
00066   return new Difference(*this);
00067 }

Here is the call graph for this function:

const const_iterator Difference::begin (  )  const [inline]

Definition at line 75 of file Difference.hpp.

References __objects.

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

00076   {
00077     return __objects.begin();
00078   }

iterator Difference::begin (  )  [inline]

Definition at line 80 of file Difference.hpp.

References __objects.

00081   {
00082     return __objects.begin();
00083   }

const const_iterator Difference::end (  )  const [inline]

Definition at line 86 of file Difference.hpp.

References __objects.

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

00087   {
00088     return __objects.end();
00089   }

iterator Difference::end (  )  [inline]

Definition at line 91 of file Difference.hpp.

References __objects.

00092   {
00093     return __objects.end();
00094   }

void Difference::push_back ( const ReferenceCounting< Object > &  o  ) 

Adds an object to the difference

Parameters:
o given object

Definition at line 40 of file Difference.cpp.

References __objects.

00041 {
00042   __objects.push_back(o);
00043 }

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 Union::__put(), Sphere::__put(), Not::__put(), Intersection::__put(), __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

list of shapes contained in the difference

Definition at line 45 of file Difference.hpp.

Referenced by __inShape(), __put(), begin(), Difference(), end(), and push_back().

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:05:43 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6