Shape Class Reference

#include <Shape.hpp>

Inheritance diagram for Shape:

Inheritance graph
[legend]

List of all members.

Public Types

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

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)
 Shape (const ShapeType &type)
 Shape (const Shape &shape)
virtual ~Shape ()

Protected Member Functions

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

Protected Attributes

const ShapeType __type
TransformationsList __trans

Friends

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


Detailed Description

Definition at line 35 of file Shape.hpp.


Member Typedef Documentation

Definition at line 61 of file Shape.hpp.


Member Enumeration Documentation

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

Shape::Shape ( const ShapeType type  )  [inline]

Constructor

Parameters:
type fiven shape type

Definition at line 212 of file Shape.hpp.

00213     : __type(type)
00214   {
00215     ;
00216   }

Shape::Shape ( const Shape shape  )  [inline]

Copy constructor

Parameters:
shape given shape

Definition at line 223 of file Shape.hpp.

00224     : __type(shape.__type),
00225       __trans(shape.__trans)
00226   {
00227     ;
00228   }

virtual Shape::~Shape (  )  [inline, virtual]

Destructor

Definition at line 234 of file Shape.hpp.

00235   {
00236     ;
00237   }


Member Function Documentation

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

Returns true if x is IN the PRIMITIVE shape.

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

Implemented in Cone, Cube, Cylinder, Difference, InfiniteCone, InfiniteCylinder, Intersection, Not, Plane, Sphere, Torus, Union, and AnalyticShape.

Referenced by inside().

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

Return overloaded output.

Parameters:
os stream
Returns:
os

Implemented in Cone, Cube, Cylinder, Difference, InfiniteCone, InfiniteCylinder, Intersection, Not, Plane, Sphere, Torus, Union, and AnalyticShape.

Referenced by operator<<().

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

Copies only the shape

Returns:
shape copy

Implemented in Cone, Cube, Cylinder, Difference, InfiniteCone, InfiniteCylinder, Intersection, Not, Plane, Sphere, Torus, Union, and AnalyticShape.

Referenced by getCopy().

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

Creates a copy of the shape

Returns:
copy of the shape

Definition at line 100 of file Shape.hpp.

References __getCopy(), __trans, and 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]

read only Access to the transformation lists

Returns:
__trans

Definition at line 119 of file Shape.hpp.

References __trans.

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

00120   {
00121     return __trans;
00122   }

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

sets the transformation list

Definition at line 128 of file Shape.hpp.

References __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]

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 __inShape(), inverseTransformation(), and 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]

Read only access to the type of the shape

Returns:
__type

Definition at line 153 of file Shape.hpp.

References __type.

Referenced by Domain::__buildReferenceAssociation().

00154   { 
00155     return __type;
00156   }

size_t Shape::numberOfTransformations (  )  const [inline]

Gets the number of transformations applied to the shape

Returns:
number of transformations

Definition at line 163 of file Shape.hpp.

References __trans.

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

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

void Shape::setTransformation ( const Transform t  ) 

Adds a transformation to the shape

Parameters:
t given transformation

Definition at line 30 of file Shape.cpp.

References __trans, and Transform::getCopy().

Referenced by 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]

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 __trans.

Referenced by inside().

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

void Shape::parseTransform ( const parsetrans trans  ) 

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, 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]

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

const ShapeType Shape::__type [protected]

Type of the transformation

Definition at line 64 of file Shape.hpp.

Referenced by type().


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

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