ShapeEllipsoid::ShapeEllipsoid(Vector3d _dim, double _mass) : Shape(P_ELLIPSOID, _mass) { mDim = _dim; initMeshes(); if (mDim != Vector3d::Zero()) computeVolume(); if (mMass != 0){ mInertia = computeInertia(mMass); } }
ShapeMesh::ShapeMesh(Vector3d _dim, const aiScene *_mesh) : Shape(P_MESH, 0), mMesh(_mesh), mDisplayList(0) { mDim = _dim; initMeshes(); if (mDim != Vector3d::Zero()) computeVolume(); if (mMass != 0){ mInertia = computeInertia(mMass); } }
RigidBody::RigidBody(const se3& Pose_, const std::string& name_, int id_, ShapeType shtype, bool isActive_) : ISimulationObject(name_,id_,isActive_), IMoveable(Pose_), userForce( Mat<float>((float)0,3,1) ), userTorque(Mat<float>((float)0,3,1)), isFixed(false), canCollide(true), mass(1.0f), imass(1.0f), Inertia(Identity3), iInertia(Identity3),isRobot(false) { if(shtype == BOX) { //ptrShape = std::unique_ptr<IShape>(new BoxShape(this)); ptrShape = new BoxShape(this); computeInertia(); } else { //ptrShape = std::unique_ptr<IShape>(new SphereShape(this)); ptrShape = new SphereShape(this); } type = TSORigidBody; }
//============================================================================== Eigen::Matrix3d EllipsoidShape::computeInertia(double mass) const { return computeInertia(mSize, mass); }
//============================================================================== Eigen::Matrix3d CylinderShape::computeInertia(double mass) const { return computeInertia(mRadius, mHeight, mass); }
void Shape::setMass(double _m) { mMass = _m; mInertia = computeInertia(mMass); }
void Shape::setDim(const Eigen::Vector3d& _dim) { mDim = _dim; computeVolume(); mInertia = computeInertia(mMass); }
//============================================================================== Eigen::Matrix3d SphereShape::computeInertia(double mass) const { return computeInertia(mRadius, mass); }