CShapeEllipsoid.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 Francois Conti
40  \version 3.2.0 $Rev: 2166 $
41 */
42 //==============================================================================
43 
44 //------------------------------------------------------------------------------
45 #ifndef CShapeEllipsoidH
46 #define CShapeEllipsoidH
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  cShapeEllipsoid(const double& a_radiusX,
96  const double& a_radiusY,
97  const double& a_radiusZ,
98  cMaterialPtr a_material = cMaterialPtr());
99 
101  virtual ~cShapeEllipsoid();
102 
103 
104  //--------------------------------------------------------------------------
105  // PUBLIC METHODS:
106  //--------------------------------------------------------------------------
107 
108 public:
109 
111  cShapeEllipsoid* 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 setRadii(const double& a_radiusX, const double& a_radiusY, const double& a_radiusZ);
118 
120  void setRadiusX(const double& a_radiusX);
121 
123  inline double getRadiusX() const { return (m_radiusX); }
124 
126  void setRadiusY(const double& a_radiusY);
127 
129  inline double getRadiusY() const { return (m_radiusY); }
130 
132  void setRadiusZ(const double& a_radiusZ);
133 
135  inline double getRadiusZ() const { return (m_radiusZ); }
136 
137 
138  //--------------------------------------------------------------------------
139  // PROTECTED METHODS:
140  //--------------------------------------------------------------------------
141 
142 protected:
143 
145  virtual void render(cRenderOptions& a_options);
146 
148  virtual void updateBoundaryBox();
149 
151  virtual void scaleObject(const double& a_scaleFactor);
152 
154  virtual void computeLocalInteraction(const cVector3d& a_toolPos,
155  const cVector3d& a_toolVel,
156  const unsigned int a_IDN);
157 
159  virtual bool computeOtherCollisionDetection(cVector3d& a_segmentPointA,
160  cVector3d& a_segmentPointB,
161  cCollisionRecorder& a_recorder,
162  cCollisionSettings& a_settings);
163 
164 
165  //-----------------------------------------------------------------------
166  // PROTECTED METHODS:
167  //-----------------------------------------------------------------------
168 
169 protected:
170 
173  const bool a_duplicateMaterialData,
174  const bool a_duplicateTextureData,
175  const bool a_duplicateMeshData,
176  const bool a_buildCollisionDetector);
177 
178 
179  //--------------------------------------------------------------------------
180  // PROTECTED MEMBERS:
181  //--------------------------------------------------------------------------
182 
183 protected:
184 
186  double m_radiusX;
187 
189  double m_radiusY;
190 
192  double m_radiusZ;
193 
195  GLUquadricObj *m_quadric;
196 };
197 
198 //------------------------------------------------------------------------------
199 } // namespace chai3d
200 //------------------------------------------------------------------------------
201 
202 //------------------------------------------------------------------------------
203 #endif
204 //------------------------------------------------------------------------------
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
GLUquadricObj * m_quadric
rendering object.
Definition: CShapeEllipsoid.h:195
double m_radiusX
Radius of ellipsoid along x axis.
Definition: CShapeEllipsoid.h:186
virtual ~cShapeEllipsoid()
Destructor of cShapeEllipsoid.
Definition: CShapeEllipsoid.cpp:108
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: CShapeEllipsoid.cpp:454
void setRadiusZ(const double &a_radiusZ)
This method sets the radius of the ellipsoid along the z axis.
Definition: CShapeEllipsoid.cpp:255
void setRadii(const double &a_radiusX, const double &a_radiusY, const double &a_radiusZ)
This method sets the radis of the ellipsoid along the x, y, and z axes.
Definition: CShapeEllipsoid.cpp:193
std::shared_ptr< cMaterial > cMaterialPtr
Definition: CMaterial.h:67
virtual void render(cRenderOptions &a_options)
This method renders this object graphically using OpenGL.
Definition: CShapeEllipsoid.cpp:275
void setRadiusX(const double &a_radiusX)
This method sets the radius of the ellipsoid along the x axis.
Definition: CShapeEllipsoid.cpp:215
void setRadiusY(const double &a_radiusY)
This method sets the radius of the ellipsoid along the y axis.
Definition: CShapeEllipsoid.cpp:235
This class implements a base class for all 2D or 3D objects in CHAI3D.
Definition: CGenericObject.h:112
double getRadiusY() const
This method returns the radius of the ellipsoid along the y axis.
Definition: CShapeEllipsoid.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
double m_radiusZ
Radius of ellipsoid along z axis.
Definition: CShapeEllipsoid.h:192
void copyShapeEllipsoidProperties(cShapeEllipsoid *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: CShapeEllipsoid.cpp:163
Implements a base class for all objects.
This class implements a 3D shape ellipsoid.
Definition: CShapeEllipsoid.h:86
double getRadiusX() const
This method returns the radius of the ellipsoid along the x axis.
Definition: CShapeEllipsoid.h:123
double m_radiusY
Radius of ellipsoid along y axis.
Definition: CShapeEllipsoid.h:189
double getRadiusZ() const
This method returns the radius of the ellipsoid along the z axis.
Definition: CShapeEllipsoid.h:135
Implements material properties.
virtual void scaleObject(const double &a_scaleFactor)
This method scales the size of this object with given scale factor.
Definition: CShapeEllipsoid.cpp:421
Definition: CAudioBuffer.cpp:56
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: CShapeEllipsoid.cpp:358
cShapeEllipsoid(const double &a_radiusX, const double &a_radiusY, const double &a_radiusZ, cMaterialPtr a_material=cMaterialPtr())
Constructor of cShapeEllipsoid.
Definition: CShapeEllipsoid.cpp:72
cShapeEllipsoid * 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: CShapeEllipsoid.cpp:129
virtual void updateBoundaryBox()
This method updates the boundary box of this object.
Definition: CShapeEllipsoid.cpp:407