6 #ifndef CNOID_BODY_PLUGIN_BODY_ITEM_H 7 #define CNOID_BODY_PLUGIN_BODY_ITEM_H 11 #include <cnoid/CollisionLinkPair> 12 #include <cnoid/SceneProvider> 13 #include <boost/dynamic_bitset.hpp> 14 #include <boost/optional.hpp> 40 bool loadModelFile(
const std::string& filename);
42 virtual void setName(
const std::string& name);
46 bool isEditable()
const;
47 void setEditable(
bool on);
55 Link* currentBaseLink()
const;
56 void setCurrentBaseLink(
Link* link);
58 void calcForwardKinematics(
bool calcVelocity =
false,
bool calcAcceleration =
false);
60 void copyKinematicState();
61 void pasteKinematicState();
63 void storeKinematicState(
BodyState& state);
64 bool restoreKinematicState(
const BodyState& state);
66 void storeInitialState();
67 void restoreInitialState(
bool doNotify =
true);
69 void getInitialState(
BodyState& out_state);
70 void setInitialState(
const BodyState& in_state);
73 void beginKinematicStateEdit();
74 void acceptKinematicStateEdit();
75 bool undoKinematicState();
76 bool redoKinematicState();
78 PinDragIKptr pinDragIK();
79 InverseKinematicsPtr getCurrentIK(
Link* targetLink);
80 InverseKinematicsPtr getDefaultIK(
Link* targetLink);
81 PenetrationBlockerPtr createPenetrationBlocker(
Link* link,
bool excludeSelfCollisions =
false);
84 void notifyModelUpdate();
95 void notifyKinematicStateChange(
96 bool requestFK =
false,
bool requestVelFK =
false,
bool requestAccFK =
false);
98 void notifyKinematicStateChange(
100 bool requestFK =
false,
bool requestVelFK =
false,
bool requestAccFK =
false);
104 void enableCollisionDetection(
bool on);
105 bool isCollisionDetectionEnabled()
const;
107 void enableSelfCollisionDetection(
bool on);
108 bool isSelfCollisionDetectionEnabled()
const;
110 void clearCollisions();
112 std::vector<CollisionLinkPairPtr>&
collisions() {
return collisions_; }
113 const std::vector<CollisionLinkPairPtr>&
collisions()
const {
return collisions_; }
116 std::vector<CollisionLinkPairPtr>&
collisionsOfLink(
int linkIndex) {
return collisionsOfLink_[linkIndex]; }
117 const std::vector<CollisionLinkPairPtr>&
collisionsOfLink(
int linkIndex)
const {
return collisionsOfLink_[linkIndex]; }
123 bool isLeggedBody()
const;
124 bool doLegIkToMoveCm(
const Vector3& c,
bool onlyProjectionToFloor =
false);
127 void setZmp(
const Vector3& zmp);
128 void editZmp(
const Vector3& zmp);
130 enum PositionType { CM_PROJECTION, HOME_COP, RIGHT_HOME_COP, LEFT_HOME_COP, ZERO_MOMENT_POINT };
132 boost::optional<Vector3> getParticularPosition(
PositionType posType);
134 bool setStance(
double width);
136 virtual SgNode* getScene();
141 virtual Item* doDuplicate()
const;
142 virtual void doAssign(
Item* item);
144 virtual bool store(
Archive& archive);
145 virtual bool restore(
const Archive& archive);
148 friend class BodyItemImpl;
149 friend class PyBodyPlugin;
151 std::vector<CollisionLinkPairPtr> collisions_;
152 boost::dynamic_bitset<> collisionLinkBitSet_;
153 std::vector< std::vector<CollisionLinkPairPtr> > collisionsOfLink_;
Definition: SceneProvider.h:16
boost::shared_ptr< InverseKinematics > InverseKinematicsPtr
Definition: InverseKinematics.h:27
Definition: SceneGraph.h:142
Definition: PinDragIK.h:18
Definition: InverseKinematics.h:14
Definition: ExtensionManager.h:26
Definition: EditableSceneBody.h:44
Definition: PutPropertyFunction.h:35
ref_ptr< BodyItem > BodyItemPtr
Definition: BodyItem.h:20
const std::vector< CollisionLinkPairPtr > & collisionsOfLink(int linkIndex) const
Definition: BodyItem.h:117
const boost::dynamic_bitset & collisionLinkBitSet() const
Definition: BodyItem.h:115
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
SignalProxy< void()> sigCollisionsUpdated()
Definition: BodyItem.h:118
PresetPoseID
Definition: BodyItem.h:49
Eigen::Vector3d Vector3
Definition: EigenTypes.h:58
Definition: PenetrationBlocker.h:19
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
boost::dynamic_bitset & collisionLinkBitSet()
Definition: BodyItem.h:114
Definition: BodyState.h:20
Definition: BodyItem.h:31
void notifyCollisionUpdate()
Definition: BodyItem.h:119
PositionType
Definition: BodyItem.h:130
boost::shared_ptr< PenetrationBlocker > PenetrationBlockerPtr
Definition: PenetrationBlocker.h:36
std::vector< CollisionLinkPairPtr > & collisions()
Definition: BodyItem.h:112
boost::shared_ptr< PinDragIK > PinDragIKptr
Definition: PinDragIK.h:54
const std::vector< CollisionLinkPairPtr > & collisions() const
Definition: BodyItem.h:113
std::vector< CollisionLinkPairPtr > & collisionsOfLink(int linkIndex)
Definition: BodyItem.h:116