SkeletonPtr createFloor() { SkeletonPtr floor = Skeleton::create("floor"); // Give the floor a body BodyNodePtr body = floor->createJointAndBodyNodePair<WeldJoint>(nullptr).second; // Give the body a shape double floor_width = 10.0; double floor_height = 0.01; std::shared_ptr<BoxShape> box( new BoxShape(Eigen::Vector3d(floor_width, floor_height, floor_width))); box->setColor(dart::Color::Black()); body->addVisualizationShape(box); body->addCollisionShape(box); // Put the body into position Eigen::Isometry3d tf(Eigen::Isometry3d::Identity()); tf.translation() = Eigen::Vector3d(0.0, -1.0, 0.0); body->getParentJoint()->setTransformFromParentBodyNode(tf); return floor; }
void setGeometry(const BodyNodePtr& bn) { // Create a BoxShape to be used for both visualization and collision checking std::shared_ptr<BoxShape> box(new BoxShape( Eigen::Vector3d(default_width, default_depth, default_height))); box->setColor(dart::Color::Blue()); // Set the location of the Box Eigen::Isometry3d box_tf(Eigen::Isometry3d::Identity()); Eigen::Vector3d center = Eigen::Vector3d(0, 0, default_height / 2.0); box_tf.translation() = center; box->setLocalTransform(box_tf); // Add it as a visualization and collision shape bn->addVisualizationShape(box); bn->addCollisionShape(box); // Move the center of mass to the center of the object bn->setLocalCOM(center); }