@@ -71,12 +71,20 @@ JointProperties::JointProperties(
71
71
mT_ParentBodyToJoint (_T_ParentBodyToJoint),
72
72
mT_ChildBodyToJoint(_T_ChildBodyToJoint),
73
73
mIsPositionLimitEnforced(_isPositionLimitEnforced),
74
- mActuatorType(_actuatorType),
75
- mMimicJoint(_mimicJoint),
76
- mMimicMultiplier(_mimicMultiplier),
77
- mMimicOffset(_mimicOffset)
74
+ mActuatorType(_actuatorType)
78
75
{
79
- // Do nothing
76
+ mMimicDofProps .resize (6 );
77
+ // TODO: Dof 6, which is the max value at the moment, is used because
78
+ // JointProperties doesn't have the Dof information
79
+
80
+ for (auto i = 0u ; i < mMimicDofProps .size (); ++i)
81
+ {
82
+ auto & prop = mMimicDofProps [i];
83
+ prop.mReferenceJoint = _mimicJoint;
84
+ prop.mReferenceDofIndex = i;
85
+ prop.mMultiplier = _mimicMultiplier;
86
+ prop.mOffset = _mimicOffset;
87
+ }
80
88
}
81
89
82
90
} // namespace detail
@@ -119,10 +127,7 @@ void Joint::setAspectProperties(const AspectProperties& properties)
119
127
setTransformFromChildBodyNode (properties.mT_ChildBodyToJoint );
120
128
setLimitEnforcement (properties.mIsPositionLimitEnforced );
121
129
setActuatorType (properties.mActuatorType );
122
- setMimicJoint (
123
- properties.mMimicJoint ,
124
- properties.mMimicMultiplier ,
125
- properties.mMimicOffset );
130
+ setMimicJointDofs (properties.mMimicDofProps );
126
131
}
127
132
128
133
// ==============================================================================
@@ -206,29 +211,69 @@ Joint::ActuatorType Joint::getActuatorType() const
206
211
207
212
// ==============================================================================
208
213
void Joint::setMimicJoint (
209
- const Joint* _mimicJoint, double _mimicMultiplier, double _mimicOffset)
214
+ const Joint* referenceJoint, double mimicMultiplier, double mimicOffset)
215
+ {
216
+ std::size_t numDofs = getNumDofs ();
217
+ mAspectProperties .mMimicDofProps .resize (numDofs);
218
+
219
+ for (std::size_t i = 0 ; i < numDofs; ++i)
220
+ {
221
+ MimicDofProperties prop;
222
+ prop.mReferenceJoint = referenceJoint;
223
+ prop.mReferenceDofIndex = i;
224
+ prop.mMultiplier = mimicMultiplier;
225
+ prop.mOffset = mimicOffset;
226
+ setMimicJointDof (i, prop);
227
+ }
228
+ }
229
+
230
+ // ==============================================================================
231
+ void Joint::setMimicJointDof (
232
+ std::size_t index, const MimicDofProperties& mimicProp)
233
+ {
234
+ mAspectProperties .mMimicDofProps [index ] = mimicProp;
235
+ }
236
+
237
+ // ==============================================================================
238
+ void Joint::setMimicJointDofs (const std::vector<MimicDofProperties>& mimicProps)
239
+ {
240
+ mAspectProperties .mMimicDofProps = mimicProps;
241
+ }
242
+
243
+ // ==============================================================================
244
+ void Joint::setMimicJointDofs (
245
+ const std::map<std::size_t , MimicDofProperties>& mimicPropMap)
246
+ {
247
+ for (const auto & pair : mimicPropMap)
248
+ {
249
+ const auto & index = pair.first ;
250
+ const auto & prop = pair.second ;
251
+ setMimicJointDof (index , prop);
252
+ }
253
+ }
254
+
255
+ // ==============================================================================
256
+ const Joint* Joint::getMimicJoint (std::size_t index) const
210
257
{
211
- mAspectProperties .mMimicJoint = _mimicJoint;
212
- mAspectProperties .mMimicMultiplier = _mimicMultiplier;
213
- mAspectProperties .mMimicOffset = _mimicOffset;
258
+ return mAspectProperties .mMimicDofProps [index ].mReferenceJoint ;
214
259
}
215
260
216
261
// ==============================================================================
217
- const Joint* Joint::getMimicJoint ( ) const
262
+ double Joint::getMimicMultiplier (std:: size_t index ) const
218
263
{
219
- return mAspectProperties .mMimicJoint ;
264
+ return mAspectProperties .mMimicDofProps [ index ]. mMultiplier ;
220
265
}
221
266
222
267
// ==============================================================================
223
- double Joint::getMimicMultiplier ( ) const
268
+ double Joint::getMimicOffset (std:: size_t index ) const
224
269
{
225
- return mAspectProperties .mMimicMultiplier ;
270
+ return mAspectProperties .mMimicDofProps [ index ]. mOffset ;
226
271
}
227
272
228
273
// ==============================================================================
229
- double Joint::getMimicOffset () const
274
+ const std::vector<MimicDofProperties>& Joint::getMimicDofProperties () const
230
275
{
231
- return mAspectProperties .mMimicOffset ;
276
+ return mAspectProperties .mMimicDofProps ;
232
277
}
233
278
234
279
// ==============================================================================
0 commit comments