CShapeCylinder.h
Go to the documentation of this file.
1 //==============================================================================
2 /*
3  Software License Agreement (BSD License)
4  Copyright (c) 2003-2016, CHAI3D.
5  (www.chai3d.org)
6 
7  All rights reserved.
8 
9  Redistribution and use in source and binary forms, with or without
10  modification, are permitted provided that the following conditions
11  are met:
12 
13  * Redistributions of source code must retain the above copyright
14  notice, this list of conditions and the following disclaimer.
15 
16  * Redistributions in binary form must reproduce the above
17  copyright notice, this list of conditions and the following
18  disclaimer in the documentation and/or other materials provided
19  with the distribution.
20 
21  * Neither the name of CHAI3D nor the names of its contributors may
22  be used to endorse or promote products derived from this software
23  without specific prior written permission.
24 
25  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  POSSIBILITY OF SUCH DAMAGE.
37 
38  \author <http://www.chai3d.org>
39  \author Sebastien Grange
40  \version 3.2.0 $Rev: 2166 $
41 */
42 //==============================================================================
43 
44 //------------------------------------------------------------------------------
45 #ifndef CShapeCylinderH
46 #define CShapeCylinderH
47 //------------------------------------------------------------------------------
48 #include "world/CGenericObject.h"
49 #include "materials/CMaterial.h"
50 #include "materials/CTexture2d.h"
51 //------------------------------------------------------------------------------
52 #ifdef C_USE_OPENGL
53 #ifdef MACOSX
54 #include "OpenGL/glu.h"
55 #else
56 #include "GL/glu.h"
57 #endif
58 #endif
59 //------------------------------------------------------------------------------
60 
61 //------------------------------------------------------------------------------
62 namespace chai3d {
63 //------------------------------------------------------------------------------
64 
65 //==============================================================================
72 //==============================================================================
73 
74 //==============================================================================
85 //==============================================================================
87 {
88  //--------------------------------------------------------------------------
89  // CONSTRUCTOR & DESTRUCTOR:
90  //--------------------------------------------------------------------------
91 
92 public:
93 
95  cShapeCylinder(const double a_baseRadius,
96  const double a_topRadius,
97  const double a_height,
98  cMaterialPtr a_material = cMaterialPtr());
99 
101  virtual ~cShapeCylinder();
102 
103 
104  //--------------------------------------------------------------------------
105  // PUBLIC METHODS:
106  //--------------------------------------------------------------------------
107 
108 public:
109 
111  cShapeCylinder* copy(const bool a_duplicateMaterialData = false,
112  const bool a_duplicateTextureData = false,
113  const bool a_duplicateMeshData = false,
114  const bool a_buildCollisionDetector = false);
115 
117  void setBaseRadius(double a_baseRadius) { m_baseRadius = fabs(a_baseRadius); updateBoundaryBox(); markForUpdate(false);}
118 
120  void setTopRadius(double a_topRadius) { m_topRadius = fabs(a_topRadius); updateBoundaryBox(); markForUpdate(false);}
121 
123  void setHeight(double a_height) { m_height = fabs(a_height); updateBoundaryBox(); markForUpdate(false);}
124 
126  inline double getBaseRadius() const { return (m_baseRadius); }
127 
129  inline double getTopRadius() const { return (m_topRadius); }
130 
132  inline double getHeight() const { return (m_height); }
133 
134 
135  //--------------------------------------------------------------------------
136  // PROTECTED VIRTUAL METHODS:
137  //--------------------------------------------------------------------------
138 
139 protected:
140 
142  virtual void render(cRenderOptions& a_options);
143 
145  virtual void updateBoundaryBox();
146 
148  virtual void scaleObject(const double& a_scaleFactor);
149 
151  virtual void computeLocalInteraction(const cVector3d& a_toolPos,
152  const cVector3d& a_toolVel,
153  const unsigned int a_IDN);
154 
156  virtual bool computeOtherCollisionDetection(cVector3d& a_segmentPointA,
157  cVector3d& a_segmentPointB,
158  cCollisionRecorder& a_recorder,
159  cCollisionSettings& a_settings);
160 
161 
162  //--------------------------------------------------------------------------
163  // PROTECTED METHODS:
164  //--------------------------------------------------------------------------
165 
166 protected:
167 
170  const bool a_duplicateMaterialData,
171  const bool a_duplicateTextureData,
172  const bool a_duplicateMeshData,
173  const bool a_buildCollisionDetector);
174 
175 
176  //--------------------------------------------------------------------------
177  // PROTECTED MEMBERS: (cShapeCylinder)
178  //--------------------------------------------------------------------------
179 
180 protected:
181 
183  double m_baseRadius;
184 
186  double m_topRadius;
187 
189  double m_height;
190 
192  GLUquadricObj *m_quadric;
193 };
194 
195 //------------------------------------------------------------------------------
196 } // namespace chai3d
197 //------------------------------------------------------------------------------
198 
199 //------------------------------------------------------------------------------
200 #endif
201 //------------------------------------------------------------------------------
This class implements a 3D vector.
Definition: CVector3d.h:88
This structures provide a containers for storing rendering options that are passed through the sceneg...
Definition: CRenderOptions.h:82
double m_baseRadius
base radius of cylinder.
Definition: CShapeCylinder.h:183
cShapeCylinder(const double a_baseRadius, const double a_topRadius, const double a_height, cMaterialPtr a_material=cMaterialPtr())
Constructor of cShapeCylinder.
Definition: CShapeCylinder.cpp:65
void setTopRadius(double a_topRadius)
This method sets the top radius of the cylinder.
Definition: CShapeCylinder.h:120
virtual void markForUpdate(const bool a_affectChildren=false)
This method invalidates any existing display lists, optionally propagating the operation to its child...
Definition: CGenericObject.cpp:1141
GLUquadricObj * m_quadric
rendering object.
Definition: CShapeCylinder.h:192
double getHeight() const
This method returns the height of the cylinder.
Definition: CShapeCylinder.h:132
This class implements a 3D shape cylinder.
Definition: CShapeCylinder.h:86
double m_topRadius
top radius of cylinder.
Definition: CShapeCylinder.h:186
void setHeight(double a_height)
This method sets the height of the cylinder.
Definition: CShapeCylinder.h:123
std::shared_ptr< cMaterial > cMaterialPtr
Definition: CMaterial.h:67
void setBaseRadius(double a_baseRadius)
This method sets the base radius of the cylinder.
Definition: CShapeCylinder.h:117
This class implements a base class for all 2D or 3D objects in CHAI3D.
Definition: CGenericObject.h:112
double getTopRadius() const
This method returns the top radius of the cylinder.
Definition: CShapeCylinder.h:129
This class implements a collision detection recorder that stores all collision events that are report...
Definition: CCollisionBasics.h:185
This structure stores the collision settings that are passed to a collision detector when querying fo...
Definition: CCollisionBasics.h:242
cShapeCylinder * copy(const bool a_duplicateMaterialData=false, const bool a_duplicateTextureData=false, const bool a_duplicateMeshData=false, const bool a_buildCollisionDetector=false)
This method creates a copy of itself.
Definition: CShapeCylinder.cpp:130
double m_height
height of cylinder.
Definition: CShapeCylinder.h:189
void copyShapeCylinderProperties(cShapeCylinder *a_obj, const bool a_duplicateMaterialData, const bool a_duplicateTextureData, const bool a_duplicateMeshData, const bool a_buildCollisionDetector)
This method copies all properties of this object to another.
Definition: CShapeCylinder.cpp:161
Implements a base class for all objects.
virtual void scaleObject(const double &a_scaleFactor)
This method scales the size of this object with given scale factor.
Definition: CShapeCylinder.cpp:358
double getBaseRadius() const
This method returns the base radius of the cylinder.
Definition: CShapeCylinder.h:126
virtual void updateBoundaryBox()
This method updates the boundary box of this object.
Definition: CShapeCylinder.cpp:342
virtual bool computeOtherCollisionDetection(cVector3d &a_segmentPointA, cVector3d &a_segmentPointB, cCollisionRecorder &a_recorder, cCollisionSettings &a_settings)
This method computes collisions between a segment and this object.
Definition: CShapeCylinder.cpp:391
Implements material properties.
virtual void render(cRenderOptions &a_options)
This method renders this object graphically using OpenGL.
Definition: CShapeCylinder.cpp:188
Definition: CAudioBuffer.cpp:56
virtual ~cShapeCylinder()
Destructor of cShapeCylinder.
Definition: CShapeCylinder.cpp:109
Implements 2D textures.
virtual void computeLocalInteraction(const cVector3d &a_toolPos, const cVector3d &a_toolVel, const unsigned int a_IDN)
This method updates the geometric relationship between the tool and the current object.
Definition: CShapeCylinder.cpp:272