From c6a41fbfe64ee7b2680a6bde90200ca660d08c2a Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Fri, 23 Feb 2024 10:22:42 -0800 Subject: [PATCH] Copy default spec before assigning defaults. PiperOrigin-RevId: 609766747 Change-Id: I79ebff62928ac2ffa5133020ee8bd001b68cdcd3 --- src/user/user_model.cc | 1 + src/user/user_objects.cc | 17 +++++++++++++++++ src/user/user_objects.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 77c7289d..bfeed5e8 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -541,6 +541,7 @@ mjCDef* mjCModel::AddDef(string name, int parentid) { // initialize contents if (parentid>=0 && parentidCopyFromSpec(); *def = *defaults[parentid]; defaults[parentid]->childid.push_back(thisid); } diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index a2895790..71dbcbeb 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -566,6 +566,23 @@ void mjCDef::PointToLocal() { +void mjCDef::CopyFromSpec() { + joint.CopyFromSpec(); + geom.CopyFromSpec(); + site.CopyFromSpec(); + camera.CopyFromSpec(); + light.CopyFromSpec(); + flex.CopyFromSpec(); + mesh.CopyFromSpec(); + material.CopyFromSpec(); + pair.CopyFromSpec(); + equality.CopyFromSpec(); + tendon.CopyFromSpec(); + actuator.CopyFromSpec(); +} + + + //------------------------- class mjCBase implementation ------------------------------------------- // constructor diff --git a/src/user/user_objects.h b/src/user/user_objects.h index 17535e33..da7e17e6 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -1397,6 +1397,7 @@ class mjCDef { void Compile(const mjCModel* model); // compiler mjCDef& operator=(const mjCDef& other); // copy assignment void PointToLocal(void); + void CopyFromSpec(void); // identifiers std::string name; // class name