DART 6.8.5
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 {
54 BodyNode* start,
55 BodyNode* target,
56 bool includeUpstreamParentJoint = false);
57
59 std::vector<BodyNode*> satisfy() const;
60
63
67
71
74
76 operator Linkage::Criteria() const;
77
79 static Criteria convert(const Linkage::Criteria& criteria);
80 };
81
86
88 static ChainPtr create(const Chain::Criteria& _criteria,
89 const std::string& _name = "Chain");
90
93 static ChainPtr create(BodyNode* _start, BodyNode* _target,
94 const std::string& _name = "Chain");
95
98 static ChainPtr create(
99 BodyNode* _start,
100 BodyNode* _target,
102 const std::string& _name = "Chain");
103
105 ChainPtr cloneChain() const;
106
108 ChainPtr cloneChain(const std::string& cloneName) const;
109
110 // To expose MetaSkeleton::cloneMetaSkeleton(), which takes no cloneName.
112
113 // Documentation inherited
114 MetaSkeletonPtr cloneMetaSkeleton(const std::string& cloneName) const override;
115
118 bool isStillChain() const;
119
120protected:
121
123 Chain(const Chain::Criteria& _criteria, const std::string& _name = "Chain");
124
126 Chain(BodyNode* _start, BodyNode* _target,
127 const std::string& _name = "Chain");
128
130 Chain(BodyNode* _start, BodyNode* _target,
131 IncludeUpstreamParentJointTag, const std::string& _name = "Chain");
132
133};
134
135} // namespace dynamics
136} // namespace dart
137
138#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
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
IncludeUpstreamParentJointTag
This enum is used to specify to the create() function that the parent joint of whichever is upstream ...
Definition Chain.hpp:85
@ IncludeUpstreamParentJoint
Definition Chain.hpp:85
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
bool mIncludeUpstreamParentJoint
Set this to true if the parent joint of whichever is upstream of the other should be included.
Definition Chain.hpp:70
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:66
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
WeakBodyNodePtr mStart
mStart will be the first BodyNode in the chain
Definition Chain.hpp:62
The Criteria class is used to specify how a Linkage should be constructed.
Definition Linkage.hpp:59