Fix attached tendon wrap model pointers

This commit is contained in:
devshahofficial
2026-07-16 15:00:57 -07:00
parent 54bf99f116
commit 3e1dffc286
2 changed files with 16 additions and 1 deletions
+2 -1
View File
@@ -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;
}
+14
View File
@@ -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);