Do not attach elements not referenced in the subtree.
PiperOrigin-RevId: 617849280 Change-Id: I391fe7c00f67d020d7394ddd31219d727b2eaa94
This commit is contained in:
committed by
Copybara-Service
parent
b0daccc234
commit
c3fb8e7f35
+45
-16
@@ -2120,6 +2120,14 @@ void mjCSkin::PointToLocal() {
|
||||
|
||||
|
||||
|
||||
void mjCSkin::NameSpace(const mjCModel* m) {
|
||||
for (int i=0; i<(int)spec_bodyname_.size(); i++) {
|
||||
spec_bodyname_[i] = m->prefix + spec_bodyname_[i] + m->suffix;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void mjCSkin::CopyFromSpec() {
|
||||
*static_cast<mjmSkin*>(this) = spec;
|
||||
file_ = spec_file_;
|
||||
@@ -2163,6 +2171,20 @@ mjCSkin::~mjCSkin() {
|
||||
|
||||
|
||||
|
||||
void mjCSkin::ResolveReferences(const mjCModel* m) {
|
||||
size_t nbone = bodyname_.size();
|
||||
bodyid.resize(nbone);
|
||||
for (int i=0; i<nbone; i++) {
|
||||
mjCBase* pbody = m->FindObject(mjOBJ_BODY, bodyname_[i]);
|
||||
if (!pbody) {
|
||||
throw mjCError(this, "unknown body '%s' in skin", bodyname_[i].c_str());
|
||||
}
|
||||
bodyid[i] = pbody->id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// compiler
|
||||
void mjCSkin::Compile(const mjVFS* vfs) {
|
||||
CopyFromSpec();
|
||||
@@ -2243,14 +2265,7 @@ void mjCSkin::Compile(const mjVFS* vfs) {
|
||||
}
|
||||
|
||||
// resolve body names
|
||||
bodyid.resize(nbone);
|
||||
for (int i=0; i<nbone; i++) {
|
||||
mjCBase* pbody = model->FindObject(mjOBJ_BODY, bodyname_[i]);
|
||||
if (!pbody) {
|
||||
throw mjCError(this, "unknown body '%s' in skin", bodyname_[i].c_str());
|
||||
}
|
||||
bodyid[i] = pbody->id;
|
||||
}
|
||||
ResolveReferences(model);
|
||||
|
||||
// resolve material name
|
||||
mjCBase* pmat = model->FindObject(mjOBJ_MATERIAL, material_);
|
||||
@@ -2510,6 +2525,15 @@ void mjCFlex::PointToLocal() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void mjCFlex::NameSpace(const mjCModel* m) {
|
||||
for (int i=0; i<(int)spec_vertbody_.size(); i++) {
|
||||
spec_vertbody_[i] = m->prefix + spec_vertbody_[i] + m->suffix;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void mjCFlex::CopyFromSpec() {
|
||||
*static_cast<mjmFlex*>(this) = spec;
|
||||
spec.info = (mjString)&info;
|
||||
@@ -2542,6 +2566,18 @@ void mjCFlex::DelTexcoord() {
|
||||
}
|
||||
|
||||
|
||||
void mjCFlex::ResolveReferences(const mjCModel* m) {
|
||||
for (int i=0; i<(int)vertbody_.size(); i++) {
|
||||
mjCBase* pbody = m->FindObject(mjOBJ_BODY, vertbody_[i]);
|
||||
if (pbody) {
|
||||
vertbodyid.push_back(pbody->id);
|
||||
} else {
|
||||
throw mjCError(this, "unkown body '%s' in flex", vertbody_[i].c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// compiler
|
||||
void mjCFlex::Compile(const mjVFS* vfs) {
|
||||
CopyFromSpec();
|
||||
@@ -2603,14 +2639,7 @@ void mjCFlex::Compile(const mjVFS* vfs) {
|
||||
}
|
||||
|
||||
// resolve body ids
|
||||
for (int i=0; i<(int)vertbody_.size(); i++) {
|
||||
mjCBase* pbody = model->FindObject(mjOBJ_BODY, vertbody_[i]);
|
||||
if (pbody) {
|
||||
vertbodyid.push_back(pbody->id);
|
||||
} else {
|
||||
throw mjCError(this, "unkown body '%s' in flex", vertbody_[i].c_str());
|
||||
}
|
||||
}
|
||||
ResolveReferences(model);
|
||||
|
||||
// process elements
|
||||
for (int e=0; e<(int)elem_.size()/(dim+1); e++) {
|
||||
|
||||
Reference in New Issue
Block a user