DART 6.7.3
Loading...
Searching...
No Matches
Chain.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2019, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef DART_DYNAMICS_CHAIN_HPP_
34#define DART_DYNAMICS_CHAIN_HPP_
35
37
38namespace dart {
39namespace dynamics {
40
46class Chain : public Linkage
47{
48public:
49
50 struct Criteria
51 {
53 Criteria(BodyNode* _start, BodyNode* _target, bool _includeBoth = false);
54
56 std::vector<BodyNode*> satisfy() const;
57
60
64
69
72
74 operator Linkage::Criteria() const;
75
77 static Criteria convert(const Linkage::Criteria& criteria);
78 };
79
84
86 static ChainPtr create(const Chain::Criteria& _criteria,
87 const std::string& _name = "Chain");
88
91 static ChainPtr create(BodyNode* _start, BodyNode* _target,
92 const std::string& _name = "Chain");
93
96 static ChainPtr create(BodyNode* _start, BodyNode* _target,
97 IncludeBothTag, const std::string& _name = "Chain");
98
100 ChainPtr cloneChain() const;
101
103 ChainPtr cloneChain(const std::string& cloneName) const;
104
105 // To expose MetaSkeleton::cloneMetaSkeleton(), which takes no cloneName.
107
108 // Documentation inherited
109 MetaSkeletonPtr cloneMetaSkeleton(const std::string& cloneName) const override;
110
113 bool isStillChain() const;
114
115protected:
116
118 Chain(const Chain::Criteria& _criteria, const std::string& _name = "Chain");
119
121 Chain(BodyNode* _start, BodyNode* _target,
122 const std::string& _name = "Chain");
123
125 Chain(BodyNode* _start, BodyNode* _target,
126 IncludeBothTag, const std::string& _name = "Chain");
127
128};
129
130} // namespace dynamics
131} // namespace dart
132
133#endif // DART_DYNAMICS_CHAIN_HPP_
BodyNode class represents a single node of the skeleton.
Definition BodyNode.hpp:78
Chain is a specialized type of Linkage that represents a single unbranching and fully connected seque...
Definition Chain.hpp:47
IncludeBothTag
This enum is used to specify to the create() function that both the start and the target BodyNodes sh...
Definition Chain.hpp:83
@ IncludeBoth
Definition Chain.hpp:83
ChainPtr cloneChain() const
Creates and returns a clone of this Chain.
Definition Chain.cpp:162
MetaSkeletonPtr cloneMetaSkeleton() const
Creates an identical clone of this MetaSkeleton.
Definition MetaSkeleton.cpp:318
bool isStillChain() const
Returns false if this Chain has been broken, or some new Branching has been added.
Definition Chain.cpp:203
static ChainPtr create(const Chain::Criteria &_criteria, const std::string &_name="Chain")
Create a Chain given some Chain::Criteria.
Definition Chain.cpp:135
A Linkage is a ReferentialSkeleton with the special property that all the BodyNodes included in it fo...
Definition Linkage.hpp:54
MetaSkeletonPtr cloneMetaSkeleton() const
Creates an identical clone of this MetaSkeleton.
Definition MetaSkeleton.cpp:318
std::shared_ptr< Chain > ChainPtr
Definition SmartPointer.hpp:76
std::shared_ptr< MetaSkeleton > MetaSkeletonPtr
Definition SmartPointer.hpp:68
Definition BulletCollisionDetector.cpp:63
Definition Chain.hpp:51
operator Linkage::Criteria() const
Operator for implicit conversion to a Linkage::Criteria.
Definition Chain.cpp:129
WeakBodyNodePtr mTarget
mTarget will be the final BodyNode in the chain, unless there is a branching or a FreeJoint along the...
Definition Chain.hpp:63
Linkage::Criteria convert() const
Convert this Criteria into Linkage::Criteria.
Definition Chain.cpp:56
std::vector< BodyNode * > satisfy() const
Return a vector of BodyNodes that form a chain.
Definition Chain.cpp:50
bool mIncludeBoth
Set this to true if both the start and the target BodyNode should be included.
Definition Chain.hpp:68
WeakBodyNodePtr mStart
mStart will be the first BodyNode in the chain
Definition Chain.hpp:59
The Criteria class is used to specify how a Linkage should be constructed.
Definition Linkage.hpp:59