/usr/include/choreonoid-1.1/cnoid/src/PoseSeqPlugin/PoseSeqItem.h is in libcnoid-dev 1.1.0+dfsg-6.1+b4.
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 | /**
@file
@author Shin'ichiro NAKAOKA
*/
#ifndef CNOID_CHOREOGRAPHY_BODY_POSE_SEQ_ITEM_H_INCLUDED
#define CNOID_CHOREOGRAPHY_BODY_POSE_SEQ_ITEM_H_INCLUDED
#include "PoseSeq.h"
#include "PoseSeqInterpolator.h"
#include <cnoid/Item>
#include <cnoid/BodyMotionItem>
#include <set>
#include "exportdecl.h"
namespace cnoid {
class TimeBar;
class BodyItem;
class BodyMotionGenerationBar;
class CNOID_EXPORT PoseSeqItem : public cnoid::Item
{
public:
static void initializeClass(ExtensionManager* ext);
PoseSeqItem();
PoseSeqItem(const PoseSeqItem& org);
~PoseSeqItem();
virtual void setName(const std::string& name);
inline PoseSeqPtr poseSeq() {
return seq;
}
inline PoseSeqInterpolatorPtr interpolator(){
return interpolator_;
}
inline BodyMotionItem* bodyMotionItem(){
return bodyMotionItem_.get();
}
virtual bool updateInterpolation();
virtual bool updateTrajectory(bool putMessages = false);
void beginEditing();
bool endEditing(bool actuallyModified = true);
void clearEditHistory();
bool undo();
bool redo();
/**
temporary treatment.
*/
bool updateKeyPosesWithBalancedTrajectories(std::ostream& os);
protected:
virtual ItemPtr doDuplicate() const;
virtual void doPutProperties(PutPropertyFunction& putProperty);
virtual bool store(Archive& archive);
virtual bool restore(const Archive& archive);
BodyItem* ownerBodyItem;
PoseSeqPtr seq;
PoseSeqInterpolatorPtr interpolator_;
BodyMotionItemPtr bodyMotionItem_;
boost::signals::connection sigInterpolationParametersChangedConnection;
ConnectionSet editConnections;
struct EditHistory {
/*
Unify these containers into one which contains elements
in the operated orders and restore them in the same order
when undo or redo is carried out.
*/
PoseSeqPtr removed;
PoseSeqPtr added;
EditHistory(){
removed = new PoseSeq();
added = new PoseSeq();
}
bool empty(){
return removed->empty() && added->empty();
}
void clear(){
if(!empty()){
removed = new PoseSeq();
added = new PoseSeq();
}
}
};
struct PoseIterComp {
bool operator()(const PoseSeq::iterator it1, const PoseSeq::iterator it2) const {
return &(*it1) < &(*it2);
}
};
std::set<PoseSeq::iterator, PoseIterComp> inserted;
std::set<PoseSeq::iterator, PoseIterComp> modified;
double modifyingPoseTime;
double modifyingPoseTTime;
PoseUnitPtr modifyingPoseUnitOrg;
PoseSeq::iterator modifyingPoseIter;
std::deque<EditHistory> editHistories;
EditHistory newHistory;
int currentHistory;
BodyMotionGenerationBar* generationBar;
TimeBar* timeBar;
bool isSelectedPoseMoving;
void init();
void convert(BodyPtr orgBody);
bool convertSub(BodyPtr orgBody, const YamlMapping& convInfo);
void updateInterpolationParameters();
void onInserted(PoseSeq::iterator p, bool isMoving);
void onRemoving(PoseSeq::iterator p, bool isMoving);
void onModifying(PoseSeq::iterator p);
void onModified(PoseSeq::iterator p);
PoseSeq::iterator removeSameElement(PoseSeq::iterator current, PoseSeq::iterator p);
void onPositionChanged();
};
typedef boost::intrusive_ptr<PoseSeqItem> PoseSeqItemPtr;
}
#endif
|