Add mjv_copyModel to copy mjModel, skipping large arrays not required for abstract visualization.
This functionality is meant for fast copying of `mjModel` when synchronizing the visualization state, as in the Python passive viewer. PiperOrigin-RevId: 699199743 Change-Id: I13a5160063eb09139ec1aee9c4969bc1c6f547f1
This commit is contained in:
committed by
Copybara-Service
parent
74dcd51d83
commit
1d64362adc
@@ -193,6 +193,43 @@ TEST_F(EngineIoTest, MakeDataResetsAllArenaPointerSizes) {
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(EngineIoTest, MjvCopyModel) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<asset>
|
||||
<mesh name="tet" vertex="0 0 0 1 0 0 0 1 0 0 0 1"/>
|
||||
</asset>
|
||||
<worldbody>
|
||||
<geom type="mesh" mesh="tet"/>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
char error[1024];
|
||||
mjModel* model1 = LoadModelFromString(xml, error, sizeof(error));
|
||||
ASSERT_THAT(model1, NotNull()) << error;
|
||||
|
||||
mjModel* model2 = mj_copyModel(nullptr, model1);
|
||||
ASSERT_THAT(model2, NotNull()) << error;
|
||||
|
||||
model1->mesh_vert[0] = 0.1;
|
||||
model1->geom_rgba[0] = 0.2;
|
||||
mj_copyModel(model2, model1);
|
||||
|
||||
EXPECT_FLOAT_EQ(model2->mesh_vert[0], 0.1);
|
||||
EXPECT_FLOAT_EQ(model2->geom_rgba[0], 0.2);
|
||||
|
||||
model1->mesh_vert[0] = 0.3;
|
||||
model1->geom_rgba[0] = 0.4;
|
||||
mjv_copyModel(model2, model1);
|
||||
|
||||
EXPECT_FLOAT_EQ(model2->mesh_vert[0], 0.1); // unchanged
|
||||
EXPECT_FLOAT_EQ(model2->geom_rgba[0], 0.4);
|
||||
|
||||
// mj_deleteData(data);
|
||||
mj_deleteModel(model2);
|
||||
mj_deleteModel(model1);
|
||||
}
|
||||
|
||||
using ValidateReferencesTest = MujocoTest;
|
||||
|
||||
TEST_F(ValidateReferencesTest, BodyReferences) {
|
||||
|
||||
Reference in New Issue
Block a user