Cone Class Reference

#include <Cone.hpp>

Inheritance diagram for Cone:

Inheritance graph
[legend]
Collaboration diagram for Cone:

Collaboration 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

 Cone (const Vertex &a, const Vertex &b, const real_t &r1, const real_t &r2)
 Cone (const Cone &C)
 ~Cone ()
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 Attributes

const Vertex __center1
const Vertex __center2
TinyVector< 3, real_t > __axisVector
const real_t __height
const real_t __radius1
const real_t __radius2

Friends

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


Detailed Description

Definition at line 33 of file Cone.hpp.


Member Typedef Documentation

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

Cone::Cone ( const Vertex a,
const Vertex b,
const real_t &  r1,
const real_t &  r2 
)

Constructor

Parameters:
a first vertex
b second vertex
r1 radius at first vertex
r2 radius at second vertex

Definition at line 40 of file Cone.cpp.

Referenced by __getCopy().

00044   : Shape(cone),
00045     __center1(a),
00046     __center2(b),
00047     __axisVector(b-a),
00048     __height(Norm(__axisVector)),
00049     __radius1(r1),
00050     __radius2(r2)
00051 {
00052   ;
00053 }

Cone::Cone ( const Cone C  ) 

Copy constructor

Parameters:
C given Cone

Definition at line 56 of file Cone.cpp.

00057   : Shape(C),
00058     __center1(C.__center1),
00059     __center2(C.__center2),
00060     __axisVector(C.__axisVector),
00061     __height(C.__height),
00062     __radius1(C.__radius1),
00063     __radius2(C.__radius2)
00064 {
00065   ;
00066 }

Cone::~Cone (  )  [inline]

Destructor

Definition at line 101 of file Cone.hpp.

00102   {
00103     ;
00104   }


Member Function Documentation

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

checks if a point is inside the Cone

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

Implements Shape.

Definition at line 23 of file Cone.cpp.

References __axisVector, __center1, __height, __radius1, and __radius2.

00024 {
00025   TinyVector<3> c1x = x - __center1;
00026 
00027   const real_t alpha = __axisVector * c1x / __height;
00028 
00029   if (alpha<0)
00030     return false;
00031   if (alpha>__height)
00032     return false;
00033 
00034   const real_t h2 = c1x*c1x - alpha*alpha;
00035 
00036   return (h2<std::pow(alpha/__height*__radius2 + (1-alpha/__height)*__radius1, 2));
00037 }

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

Writes the Cone to a stream

Parameters:
os given stream
Returns:
os

Implements Shape.

Definition at line 69 of file Cone.cpp.

References __center1, __center2, __radius1, and __radius2.

00070 {
00071   s << "cone {\n" << __center1 << ',' << __radius1
00072     << ',' << __center2 << ',' << __radius2 << "\n}\n";
00073   return s;
00074 }

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

gets a copy of the cone

Returns:
a deep copy of the Cone

Implements Shape.

Definition at line 77 of file Cone.cpp.

References Cone().

00078 {
00079   return new Cone(*this);
00080 }

Here is the call graph for this function:

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

friend class InfiniteCone [friend]

Definition at line 37 of file Cone.hpp.

friend class Plane [friend]

Definition at line 38 of file Cone.hpp.

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

const Vertex Cone::__center1 [private]

first center

Definition at line 40 of file Cone.hpp.

Referenced by __inShape(), __put(), and Plane::Plane().

const Vertex Cone::__center2 [private]

second center

Definition at line 41 of file Cone.hpp.

Referenced by __put(), and Plane::Plane().

TinyVector<3, real_t> Cone::__axisVector [private]

axis vector

Definition at line 44 of file Cone.hpp.

Referenced by __inShape().

const real_t Cone::__height [private]

height of the cone

Definition at line 45 of file Cone.hpp.

Referenced by __inShape().

const real_t Cone::__radius1 [private]

radius at first point

Definition at line 47 of file Cone.hpp.

Referenced by __inShape(), and __put().

const real_t Cone::__radius2 [private]

radius ate second point

Definition at line 48 of file Cone.hpp.

Referenced by __inShape(), and __put().

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