Add mjs_makeMesh to create a builtin mesh.
PiperOrigin-RevId: 788538127 Change-Id: I999733399a1a0da07b0f915f34d31364ab8b3b52
This commit is contained in:
committed by
Copybara-Service
parent
46dc67b7eb
commit
89f4789085
@@ -230,9 +230,9 @@ const char* MJCF[nMJCF][mjXATTRNUM] = {
|
||||
|
||||
{"asset", "*", "0"},
|
||||
{"<"},
|
||||
{"mesh", "*", "14", "name", "class", "content_type", "file", "vertex", "normal",
|
||||
{"mesh", "*", "16", "name", "class", "content_type", "file", "vertex", "normal",
|
||||
"texcoord", "face", "refpos", "refquat", "scale", "smoothnormal",
|
||||
"maxhullvert", "inertia"},
|
||||
"maxhullvert", "inertia", "builtin", "params"},
|
||||
{"<"},
|
||||
{"plugin", "*", "2", "plugin", "instance"},
|
||||
{"<"},
|
||||
@@ -825,6 +825,20 @@ const mjMap meshinertia_map[4] = {
|
||||
};
|
||||
|
||||
|
||||
// mesh builtin type
|
||||
const int meshbuiltin_sz = 8;
|
||||
const mjMap meshbuiltin_map[meshbuiltin_sz] = {
|
||||
{"none", mjMESH_BUILTIN_NONE},
|
||||
{"sphere", mjMESH_BUILTIN_SPHERE},
|
||||
{"hemisphere", mjMESH_BUILTIN_HEMISPHERE},
|
||||
{"prism", mjMESH_BUILTIN_PRISM},
|
||||
{"cone", mjMESH_BUILTIN_CONE},
|
||||
{"torus", mjMESH_BUILTIN_TORUS},
|
||||
{"wedge", mjMESH_BUILTIN_WEDGE},
|
||||
{"plate", mjMESH_BUILTIN_PLATE}
|
||||
};
|
||||
|
||||
|
||||
// flexcomp type
|
||||
const mjMap fcomp_map[mjNFCOMPTYPES] = {
|
||||
{"grid", mjFCOMPTYPE_GRID},
|
||||
@@ -1539,6 +1553,21 @@ void mjXReader::OneMesh(XMLElement* elem, mjsMesh* mesh, const mjVFS* vfs) {
|
||||
}
|
||||
}
|
||||
|
||||
// read builtin options
|
||||
if (MapValue(elem, "builtin", &n, meshbuiltin_map, meshbuiltin_sz)) {
|
||||
std::vector<double> params;
|
||||
int nparams = ReadVector(elem, "params", params, text, /*required*/ true);
|
||||
if (file) {
|
||||
throw mjXError(elem, "builtin cannot be used with a mesh file");
|
||||
}
|
||||
if (!mesh->uservert->empty()) {
|
||||
throw mjXError(elem, "builtin mesh cannot be used with user vertex data");
|
||||
}
|
||||
if (mjs_makeMesh(mesh, (mjtMeshBuiltin)n, params.data(), nparams)) {
|
||||
throw mjXError(elem, mjs_getError(spec));
|
||||
}
|
||||
}
|
||||
|
||||
// write error info
|
||||
mjs_setString(mesh->info, ("line " + std::to_string(elem->GetLineNum())).c_str());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user