/usr/include/kido/dynamics/Shape.hpp is in libkido-dev 0.1.0+dfsg-2build9.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | /*
* Copyright (c) 2011-2015, Georgia Tech Research Corporation
* All rights reserved.
*
* Author(s): Sehoon Ha <sehoon.ha@gmail.com>,
* Jeongseok Lee <jslee02@gmail.com>
*
* Georgia Tech Graphics Lab and Humanoid Robotics Lab
*
* Directed by Prof. C. Karen Liu and Prof. Mike Stilman
* <karenliu@cc.gatech.edu> <mstilman@cc.gatech.edu>
*
* This file is provided under the following "BSD-style" License:
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef KIDO_DYNAMICS_SHAPE_HPP_
#define KIDO_DYNAMICS_SHAPE_HPP_
#include <memory>
#include <Eigen/Dense>
#include "kido/math/Geometry.hpp"
#include "kido/common/Deprecated.hpp"
#include "kido/common/Subject.hpp"
#include "kido/dynamics/SmartPointer.hpp"
#include "kido/common/Deprecated.hpp"
namespace kido {
namespace renderer {
class RenderInterface;
} // namespace renderer
} // namespace kido
namespace kido {
namespace dynamics {
/// \brief
class Shape : public virtual common::Subject
{
public:
// TODO(JS): We should not use ShapeType because this is not extendable.
/// \brief
enum ShapeType {
BOX,
ELLIPSOID,
CYLINDER,
PLANE,
MESH,
SOFT_MESH,
LINE_SEGMENT
};
/// DataVariance can be used by renderers to determine whether it should
/// expect data for this shape to change during each update.
enum DataVariance {
STATIC=0, /// No data will ever change
DYNAMIC_TRANSFORM = 1 << 1, /// The relative transform of the Shape might change
DYNAMIC_PRIMITIVE = 1 << 2, /// The primitive properties (such as x/y/z scaling) of the shape might change
DYNAMIC_COLOR = 1 << 3, /// The coloring or textures of the shape might change
DYNAMIC_VERTICES = 1 << 4, /// Vertex positions of a mesh might change (this does not include adding or removing vertices) (this enum is not relevant for primitive shapes)
DYNAMIC_ELEMENTS = 1 << 5, /// The number of elements and/or arrangement of elements might change (this includes adding and removing vertices) (this enum is not relevant for primitive shapes)
DYNAMIC = 0xFF /// All data is subject to changing
};
/// \brief Constructor
explicit Shape(ShapeType _type);
/// \brief Destructor
virtual ~Shape();
/// \brief Set RGB color components (leave alpha alone). Identical to
/// setRGB(const Eigen::Vector3d&)
void setColor(const Eigen::Vector3d& _color);
/// \brief Set RGBA color components
void setColor(const Eigen::Vector4d& _color);
/// \brief Set RGB color components (leave alpha alone)
void setRGB(const Eigen::Vector3d& _rgb);
/// \brief Set RGBA color components
virtual void setRGBA(const Eigen::Vector4d& _rgba);
/// \brief Get color.
Eigen::Vector3d getColor() const;
/// \brief Get RGB color components
Eigen::Vector3d getRGB() const;
/// \brief Get RGBA color components
const Eigen::Vector4d& getRGBA() const;
/// \brief Set the transparency of this Shape
virtual void setAlpha(double _alpha);
/// \brief Get the bounding box of the shape in its local coordinate frame.
/// The dimension will be automatically determined by the sub-classes
/// such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
const math::BoundingBox& getBoundingBox() const;
/// \brief Get dimensions of bounding box.
/// The dimension will be automatically determined by the sub-classes
/// such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
/// \deprecated Please use getBoundingBox() instead
DEPRECATED(5.2)
Eigen::Vector3d getBoundingBoxDim() const;
/// \brief Set local transformation of the shape w.r.t. parent frame.
void setLocalTransform(const Eigen::Isometry3d& _Transform);
/// \brief Get local transformation of the shape w.r.t. parent frame.
const Eigen::Isometry3d& getLocalTransform() const;
/// \brief Set local transformation of the shape
/// The offset is translational part of the local transformation.
/// \sa setLocalTransform()
void setOffset(const Eigen::Vector3d& _offset);
/// \brief Get local offset of the shape w.r.t. parent frame.
/// The offset is translational part of the local transformation.
/// \sa getLocalTransform()
Eigen::Vector3d getOffset() const;
/// \brief
virtual Eigen::Matrix3d computeInertia(double mass) const = 0;
Eigen::Matrix3d computeInertiaFromDensity(double density) const
{
// return computeInertiaFromMass(density * computeVolume());
return Eigen::Matrix3d();
}
virtual Eigen::Matrix3d computeInertiaFromMass(double density) const
{
return Eigen::Matrix3d();
}
/// \brief Get volume of this shape.
/// The volume will be automatically calculated by the sub-classes
/// such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
double getVolume() const;
/// \brief
int getID() const;
/// \brief
ShapeType getShapeType() const;
/// Set the data variance of this shape. Use the DataVariance to indicate what
/// kind of shape information might change during run time so that renderers
/// can optimize reliably.
void setDataVariance(unsigned int _variance);
/// Add a type of variance to this shape. All other variance types will remain
/// the same.
void addDataVariance(unsigned int _variance);
/// Remove a type of variance from this shape. All other variance types will
/// remain the same.
void removeDataVariance(unsigned int _variance);
/// Get the data variance of this shape
unsigned int getDataVariance() const;
/// True iff this Shape has the specified type of DataVariance
bool checkDataVariance(DataVariance type) const;
/// Instruct this shape to update its data
virtual void refreshData();
/// \brief
virtual void draw(renderer::RenderInterface* _ri = nullptr,
const Eigen::Vector4d& _color = Eigen::Vector4d::Ones(),
bool _useDefaultColor = true) const = 0;
/// Pass in true to prevent this shape from being rendered. Pass in false to
/// allow it to render again.
void setHidden(bool _hide=true);
/// True iff this Shape is set to be hidden. Use hide(bool) to change this
/// setting
bool isHidden() const;
protected:
DEPRECATED(6.0)
virtual void computeVolume() { updateVolume(); }
/// \brief Update volume
virtual void updateVolume() = 0;
DEPRECATED(6.0)
virtual void initMeshes() {}
/// \brief The bounding box (in the local coordinate frame) of the shape.
math::BoundingBox mBoundingBox;
/// \brief Volume enclosed by the geometry.
double mVolume;
/// \brief Unique id.
int mID;
/// \brief Color for the primitive.
Eigen::Vector4d mColor;
/// \brief Local geometric transformation of the Shape w.r.t. parent frame.
Eigen::Isometry3d mTransform;
/// The DataVariance of this Shape
unsigned int mVariance;
/// True if this shape should be kept from rendering
bool mHidden;
/// \brief
static int mCounter;
private:
/// \brief Type of primitive
ShapeType mType;
public:
// To get byte-aligned Eigen vectors
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
} // namespace dynamics
} // namespace kido
#endif // KIDO_DYNAMICS_SHAPE_HPP_
|