6 #ifndef CNOID_UTIL_SCENE_GRAPH_H 7 #define CNOID_UTIL_SCENE_GRAPH_H 9 #include <cnoid/Referenced> 10 #include <cnoid/BoundingBox> 11 #include <cnoid/Signal> 31 BBOX_UPDATED = 1 << 2,
35 typedef std::vector<SgObject*>
Path;
37 SgUpdate() : action_(MODIFIED) { path_.reserve(16); }
38 SgUpdate(
int action) : action_(action) { path_.reserve(16); }
40 int action()
const {
return action_; }
43 const Path&
path()
const {
return path_; }
45 void pop() { path_.pop_back(); }
68 template<
class ObjType> ObjType*
getClone(
const ObjType* org){
69 return static_cast<ObjType*
>(findOrCreateClone(org));
74 SgCloneMapImpl* cloneMap;
75 bool isNonNodeCloningEnabled_;
88 const std::string&
name()
const {
return name_; }
89 void setName(
const std::string& name) { name_ = name; }
91 virtual int numChildObjects()
const;
92 virtual SgObject* childObject(
int index);
108 void addParent(
SgObject* parent,
bool doNotify =
false);
109 void removeParent(
SgObject* parent);
115 const_parentIter
parentEnd()
const {
return parents.end(); }
122 return sigGraphConnection_;
128 virtual void onUpdated(
SgUpdate& update);
132 ParentContainer parents;
153 return static_cast<SgNode*
>(this->clone(cloneMap));
156 virtual bool isGroup()
const;
162 typedef std::vector<SgNodePtr> Container;
181 virtual int numChildObjects()
const;
182 virtual SgObject* childObject(
int index);
184 virtual void onUpdated(
SgUpdate& update);
186 virtual bool isGroup()
const;
190 iterator
begin() {
return children.begin(); }
191 iterator
end() {
return children.end(); }
192 reverse_iterator
rbegin() {
return children.rbegin(); }
193 reverse_iterator
rend() {
return children.rend(); }
195 const_iterator
begin()
const {
return children.begin(); }
196 const_iterator
end()
const {
return children.end(); }
197 const_reverse_iterator
rbegin()
const {
return children.rbegin(); }
198 const_reverse_iterator
rend()
const {
return children.rend(); }
200 iterator
erase(iterator pos) {
return children.erase(pos); }
202 bool contains(
SgNode* node)
const;
204 bool empty()
const {
return children.empty(); }
209 template<
class NodeType> NodeType*
getChild(
int index) {
210 NodeType* node =
dynamic_cast<NodeType*
>(children.at(index).get());
211 if(!node) throwTypeMismatchError();
215 void clearChildren(
bool doNotify =
false);
216 void addChild(
SgNode* node,
bool doNotify =
false);
217 bool addChildOnce(
SgNode* node,
bool doNotify =
false);
218 void insertChild(
SgNode* node,
int index = 0,
bool doNotify =
false);
219 bool removeChild(
SgNode* node,
bool doNotify =
false);
220 void removeChildAt(
int index,
bool doNotify =
false);
221 void copyChildrenTo(
SgGroup* group,
bool doNotify =
false);
222 void moveChildrenTo(
SgGroup* group,
bool doNotify =
false);
225 for(
size_t i=0; i < numChildren(); ++i){
226 if(NodeType* node = dynamic_cast<NodeType*>(child(i)))
return node;
228 for(
size_t i=0; i < numChildren(); ++i){
229 if(child(i)->isGroup()){
230 if(NodeType* node = static_cast<SgGroup*>(child(i))->findNodeOfType<NodeType>())
return node;
242 static void throwTypeMismatchError();
243 iterator removeChild(iterator childIter,
bool doNotify);
269 const BoundingBox& untransformedBoundingBox()
const;
271 virtual void getTransform(
Affine3& out_T)
const = 0;
292 virtual void getTransform(
Affine3& out_T)
const;
300 Affine3::TranslationPart
translation() {
return T_.translation(); }
301 Affine3::ConstTranslationPart
translation()
const {
return T_.translation(); }
303 Affine3::LinearPart
rotation() {
return T_.linear(); }
304 Affine3::ConstLinearPart
rotation()
const {
return T_.linear(); }
306 template<
class Scalar,
int Mode,
int Options>
307 void setPosition(
const Eigen::Transform<Scalar, 3, Mode, Options>& T) {
308 T_ = T.template cast<Affine3::Scalar>();
310 template<
class Scalar,
int Mode,
int Options>
311 void setTransform(
const Eigen::Transform<Scalar, 3, Mode, Options>& T) {
312 T_ = T.template cast<Affine3::Scalar>();
314 template<
typename Derived>
316 T_.linear() = R.template cast<Affine3::Scalar>();
320 T_.linear() = a.template cast<Affine3::Scalar>().toRotationMatrix();
322 template<
typename Derived>
324 T_.translation() = p.template cast<Affine3::Scalar>();
342 virtual void getTransform(
Affine3& out_T)
const;
346 template<
typename Derived>
void setScale(
const Eigen::MatrixBase<Derived>& s) {
347 scale_ = s.template cast<Vector3::Scalar>();
350 scale_.setConstant(s);
353 Eigen::DiagonalWrapper<const Vector3>
T()
const {
return scale_.asDiagonal(); }
Definition: SceneLights.h:61
int action() const
Definition: SceneGraph.h:40
int numParents() const
Definition: SceneGraph.h:110
Definition: SceneLights.h:14
ref_ptr< SgInvariantGroup > SgInvariantGroupPtr
Definition: SceneGraph.h:259
Definition: SceneGraph.h:381
void setPosition(const Eigen::Transform< Scalar, 3, Mode, Options > &T)
Definition: SceneGraph.h:307
ref_ptr< SgTransform > SgTransformPtr
Definition: SceneGraph.h:276
SgUpdate()
Definition: SceneGraph.h:37
void notifyUpdate(int action=SgUpdate::MODIFIED)
Definition: SceneGraph.h:103
const_parentIter parentBegin() const
Definition: SceneGraph.h:114
Definition: SceneDrawables.h:291
Definition: SceneGraph.h:142
void setRotation(const Eigen::MatrixBase< Derived > &R)
Definition: SceneGraph.h:315
Definition: SceneDrawables.h:113
iterator erase(iterator pos)
Definition: SceneGraph.h:200
ParentContainer::const_iterator const_parentIter
Definition: SceneGraph.h:84
const Affine3 & T() const
Definition: SceneGraph.h:295
int numChildren() const
Definition: SceneGraph.h:205
Affine3 & position()
Definition: SceneGraph.h:297
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Definition: SceneGraph.h:282
Definition: SceneGraph.h:394
SignalProxy< void(bool on)> sigGraphConnection()
Definition: SceneGraph.h:121
const_iterator begin() const
Definition: SceneGraph.h:195
Definition: SceneDrawables.h:456
Affine3::ConstLinearPart rotation() const
Definition: SceneGraph.h:304
Definition: SceneDrawables.h:17
Container::iterator iterator
Definition: SceneGraph.h:165
void clear()
Definition: SceneGraph.h:46
Definition: SceneGraph.h:24
Definition: SceneEffects.h:36
Affine3 & T()
Definition: SceneGraph.h:294
Definition: SceneCameras.h:14
Definition: SceneDrawables.h:509
void pop()
Definition: SceneGraph.h:45
Affine3::TranslationPart translation()
Definition: SceneGraph.h:300
void setTransform(const Eigen::Transform< Scalar, 3, Mode, Options > &T)
Definition: SceneGraph.h:311
Definition: SceneGraph.h:361
iterator begin()
Definition: SceneGraph.h:190
Eigen::Affine3d Affine3
Definition: EigenTypes.h:64
Definition: SceneDrawables.h:51
ref_ptr< SgPosTransform > SgPosTransformPtr
Definition: SceneGraph.h:330
void turnOn()
Definition: SceneGraph.h:370
Definition: Referenced.h:67
bool empty() const
Definition: SceneGraph.h:204
Definition: SceneGraph.h:32
Definition: SceneLights.h:86
void setName(const std::string &name)
Definition: SceneGraph.h:89
SgNode * child(int index)
Definition: SceneGraph.h:206
ref_ptr< SgObject > SgObjectPtr
Definition: SceneGraph.h:19
Definition: Referenced.h:128
std::set< SgObject * > ParentContainer
Definition: SceneGraph.h:82
Definition: BoundingBox.h:17
Definition: SceneGraph.h:56
void setNonNodeCloning(bool on)
Definition: SceneGraph.h:63
const_parentIter parentEnd() const
Definition: SceneGraph.h:115
Definition: SceneDrawables.h:392
ref_ptr< SgNode > SgNodePtr
Definition: SceneGraph.h:138
NodeType * findNodeOfType()
Definition: SceneGraph.h:224
const std::string & name() const
Definition: SceneGraph.h:88
Definition: SceneEffects.h:14
void turnOff()
Definition: SceneGraph.h:371
void setTurnedOn(bool on)
Definition: SceneGraph.h:372
SgUpdate(int action)
Definition: SceneGraph.h:38
Affine3::ConstTranslationPart translation() const
Definition: SceneGraph.h:301
bool isModified() const
Definition: SceneGraph.h:41
const_iterator end() const
Definition: SceneGraph.h:196
std::vector< SgNode * > SgNodePath
Definition: SceneGraph.h:140
Definition: SceneLights.h:43
void setTranslation(const Eigen::MatrixBase< Derived > &p)
Definition: SceneGraph.h:323
Definition: SceneGraph.h:279
void invalidateBoundingBox()
Definition: SceneGraph.h:188
Definition: SceneCameras.h:58
ref_ptr< SgSwitch > SgSwitchPtr
Definition: SceneGraph.h:378
Affine3::LinearPart rotation()
Definition: SceneGraph.h:303
Action
Definition: SceneGraph.h:27
Definition: SceneGraph.h:160
ObjType * getClone(const ObjType *org)
Definition: SceneGraph.h:68
NodeType * getChild(int index)
This throws an exeption when the index is invalid or the type is not matched.
Definition: SceneGraph.h:209
reverse_iterator rend()
Definition: SceneGraph.h:193
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
const Affine3 & position() const
Definition: SceneGraph.h:298
Definition: SceneDrawables.h:590
const Path & path() const
Definition: SceneGraph.h:43
reverse_iterator rbegin()
Definition: SceneGraph.h:192
bool isNonNodeCloningEnabled() const
Definition: SceneGraph.h:64
bool isTurnedOn() const
Definition: SceneGraph.h:373
void setAction(int act)
Definition: SceneGraph.h:42
Container::const_iterator const_iterator
Definition: SceneGraph.h:167
Definition: SceneCameras.h:81
SignalProxy< void(const SgUpdate &update)> sigUpdated()
Definition: SceneGraph.h:94
void notifyUpdate(SgUpdate &update)
Definition: SceneGraph.h:98
ParentContainer::iterator parentIter
Definition: SceneGraph.h:83
const_reverse_iterator rbegin() const
Definition: SceneGraph.h:197
Definition: SceneDrawables.h:420
void setRotation(const Eigen::AngleAxis< T > &a)
Definition: SceneGraph.h:319
const_reverse_iterator rend() const
Definition: SceneGraph.h:198
ref_ptr< SgUnpickableGroup > SgUnpickableGroupPtr
Definition: SceneGraph.h:391
std::vector< SgObject * > Path
Definition: SceneGraph.h:35
Container::const_reverse_iterator const_reverse_iterator
Definition: SceneGraph.h:168
Eigen::Vector3d Vector3
Definition: EigenTypes.h:58
Definition: SceneDrawables.h:83
Definition: SceneDrawables.h:532
SgNode * cloneNode(SgCloneMap &cloneMap) const
Definition: SceneGraph.h:152
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
bool isBboxCacheValid
Definition: SceneGraph.h:238
bool hasParents() const
Definition: SceneGraph.h:111
ref_ptr< SgScaleTransform > SgScaleTransformPtr
Definition: SceneGraph.h:358
BoundingBox bboxCache
Definition: SceneGraph.h:237
Container::reverse_iterator reverse_iterator
Definition: SceneGraph.h:166
Definition: SceneVisitor.h:15
void push(SgObject *node)
Definition: SceneGraph.h:44
Definition: SceneGraph.h:249
iterator end()
Definition: SceneGraph.h:191
Definition: SceneGraph.h:79
ref_ptr< SgGroup > SgGroupPtr
Definition: SceneGraph.h:246