Fix attached tendon wrap model pointers
This commit is contained in:
@@ -6451,8 +6451,9 @@ void mjCTendon::CopyFromSpec() {
|
|||||||
material_ = spec_material_;
|
material_ = spec_material_;
|
||||||
userdata_ = spec_userdata_;
|
userdata_ = spec_userdata_;
|
||||||
|
|
||||||
// clear precompiled
|
// propagate model pointer to wraps and clear precompiled
|
||||||
for (int i=0; i < path.size(); i++) {
|
for (int i=0; i < path.size(); i++) {
|
||||||
|
path[i]->model = model;
|
||||||
if (path[i]->Type() == mjWRAP_CYLINDER) {
|
if (path[i]->Type() == mjWRAP_CYLINDER) {
|
||||||
path[i]->spec.type = mjWRAP_SPHERE;
|
path[i]->spec.type = mjWRAP_SPHERE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1283,6 +1283,20 @@ TEST_F(MujocoTest, AttachSpatialTendonWithoutSidesite) {
|
|||||||
mjs_findElement(parent, mjOBJ_TENDON, "tendon_without_sidesite_child"),
|
mjs_findElement(parent, mjOBJ_TENDON, "tendon_without_sidesite_child"),
|
||||||
NotNull());
|
NotNull());
|
||||||
|
|
||||||
|
mjsTendon* tendon = mjs_asTendon(
|
||||||
|
mjs_findElement(parent, mjOBJ_TENDON, "tendon_with_sidesite_child"));
|
||||||
|
ASSERT_THAT(tendon, NotNull());
|
||||||
|
ASSERT_EQ(mjs_getWrapNum(tendon), 3);
|
||||||
|
|
||||||
|
EXPECT_EQ(mjs_getWrapTarget(mjs_getWrap(tendon, 0)),
|
||||||
|
mjs_findElement(parent, mjOBJ_SITE, "site_A_child"));
|
||||||
|
EXPECT_EQ(mjs_getWrapTarget(mjs_getWrap(tendon, 1)),
|
||||||
|
mjs_findElement(parent, mjOBJ_GEOM, "wrap_geom_child"));
|
||||||
|
EXPECT_EQ(mjs_getWrapTarget(mjs_getWrap(tendon, 2)),
|
||||||
|
mjs_findElement(parent, mjOBJ_SITE, "site_B_child"));
|
||||||
|
EXPECT_EQ(mjs_getWrapSideSite(mjs_getWrap(tendon, 1)),
|
||||||
|
mjs_asSite(mjs_findElement(parent, mjOBJ_SITE, "side_site_child")));
|
||||||
|
|
||||||
mjModel* model = mj_compile(parent, nullptr);
|
mjModel* model = mj_compile(parent, nullptr);
|
||||||
ASSERT_THAT(model, NotNull()) << mjs_getError(parent);
|
ASSERT_THAT(model, NotNull()) << mjs_getError(parent);
|
||||||
EXPECT_EQ(model->ntendon, 2);
|
EXPECT_EQ(model->ntendon, 2);
|
||||||
|
|||||||
Reference in New Issue
Block a user