DART 6.10.1
Loading...
Searching...
No Matches
Chain.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2021, 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 struct Criteria
50 {
53 BodyNode* start,
54 BodyNode* target,
55 bool includeUpstreamParentJoint = false);
56
58 std::vector<BodyNode*> satisfy() const;
59
62
66
70
73
75 operator Linkage::Criteria() const;
76
78 static Criteria convert(const Linkage::Criteria& criteria);
79 };
80
88
90 static ChainPtr create(
91 const Chain::Criteria& _criteria, const std::string& _name = "Chain");
92
95 static ChainPtr create(
96 BodyNode* _start, BodyNode* _target, const std::string& _name = "Chain");
97
100 static ChainPtr create(
101 BodyNode* _start,
102 BodyNode* _target,
104 const std::string& _name = "Chain");
105
107 ChainPtr cloneChain() const;
108
110 ChainPtr cloneChain(const std::string& cloneName) const;
111
112 // To expose MetaSkeleton::cloneMetaSkeleton(), which takes no cloneName.
114
115 // Documentation inherited
117 const std::string& cloneName) const override;
118
121 bool isStillChain() const;
122
123protected:
125 Chain(const Chain::Criteria& _criteria, const std::string& _name = "Chain");
126
128 Chain(
129 BodyNode* _start, BodyNode* _target, const std::string& _name = "Chain");
130
132 Chain(
133 BodyNode* _start,
134 BodyNode* _target,
136 const std::string& _name = "Chain");
137};
138
139} // namespace dynamics
140} // namespace dart
141
142#endif // DART_DYNAMICS_CHAIN_HPP_
BodyNode class represents a single node of the skeleton.
Definition BodyNode.hpp:79
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:165
MetaSkeletonPtr cloneMetaSkeleton() const
Creates an identical clone of this MetaSkeleton.
Definition MetaSkeleton.cpp:328
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:86
bool isStillChain() const
Returns false if this Chain has been broken, or some new Branching has been added.
Definition Chain.cpp:206
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:328
std::shared_ptr< Chain > ChainPtr
Definition SmartPointer.hpp:76
std::shared_ptr< MetaSkeleton > MetaSkeletonPtr
Definition SmartPointer.hpp:68
Definition BulletCollisionDetector.cpp:65
Definition Chain.hpp:50
bool mIncludeUpstreamParentJoint
Set this to true if the parent joint of whichever is upstream of the other should be included.
Definition Chain.hpp:69
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:65
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:61
The Criteria class is used to specify how a Linkage should be constructed.
Definition Linkage.hpp:58