Fix attached tendon wrap model pointers
This commit is contained in:
@@ -6451,8 +6451,9 @@ void mjCTendon::CopyFromSpec() {
|
||||
material_ = spec_material_;
|
||||
userdata_ = spec_userdata_;
|
||||
|
||||
// clear precompiled
|
||||
// propagate model pointer to wraps and clear precompiled
|
||||
for (int i=0; i < path.size(); i++) {
|
||||
path[i]->model = model;
|
||||
if (path[i]->Type() == mjWRAP_CYLINDER) {
|
||||
path[i]->spec.type = mjWRAP_SPHERE;
|
||||
}
|
||||
|
||||
@@ -1283,6 +1283,20 @@ TEST_F(MujocoTest, AttachSpatialTendonWithoutSidesite) {
|
||||
mjs_findElement(parent, mjOBJ_TENDON, "tendon_without_sidesite_child"),
|
||||
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);
|
||||
ASSERT_THAT(model, NotNull()) << mjs_getError(parent);
|
||||
EXPECT_EQ(model->ntendon, 2);
|
||||
|
||||
Reference in New Issue
Block a user