Add compiler C API for mjmSite.
PiperOrigin-RevId: 604573450 Change-Id: I6ba7fcece0942ddc0d109413ba5684b2df3fab96
This commit is contained in:
committed by
Copybara-Service
parent
f763254a00
commit
3b2dd06c54
+2
-1
@@ -21,6 +21,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "user/user_api.h"
|
||||
#include "user/user_model.h"
|
||||
#include "user/user_objects.h"
|
||||
#include "tinyxml2.h"
|
||||
@@ -50,7 +51,7 @@ void mjXBase::SetModel(mjCModel* _model) {
|
||||
|
||||
|
||||
// read alternative orientation specification
|
||||
void mjXBase::ReadAlternative(XMLElement* elem, mjCAlternative& alt) {
|
||||
void mjXBase::ReadAlternative(XMLElement* elem, mjmOrientation& alt) {
|
||||
string text;
|
||||
int read = (int)(elem->Attribute("quat") != 0) +
|
||||
(ReadAttr(elem, "axisangle", 4, alt.axisangle, text) ? 1 : 0) +
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ class mjXBase : public mjXUtil {
|
||||
void SetModel(mjCModel*);
|
||||
|
||||
// read alternative orientation specification
|
||||
static void ReadAlternative(tinyxml2::XMLElement* elem, mjCAlternative& alt);
|
||||
static void ReadAlternative(tinyxml2::XMLElement* elem, mjmOrientation& alt);
|
||||
|
||||
protected:
|
||||
mjCModel* model; // internally-allocated mjCModel object
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "engine/engine_plugin.h"
|
||||
#include "engine/engine_util_errmem.h"
|
||||
#include "engine/engine_util_misc.h"
|
||||
#include "user/user_api.h"
|
||||
#include "user/user_composite.h"
|
||||
#include "user/user_flexcomp.h"
|
||||
#include "user/user_model.h"
|
||||
@@ -1563,34 +1564,39 @@ void mjXReader::OneGeom(XMLElement* elem, mjCGeom* pgeom) {
|
||||
|
||||
|
||||
// site element parser
|
||||
void mjXReader::OneSite(XMLElement* elem, mjCSite* site) {
|
||||
void mjXReader::OneSite(XMLElement* elem, mjmSite& site) {
|
||||
int n;
|
||||
string text;
|
||||
mjmSite* psite = &site->spec;
|
||||
string text, name, classname;
|
||||
std::vector<double> userdata;
|
||||
std::string material;
|
||||
|
||||
// read attributes
|
||||
ReadAttrTxt(elem, "name", site->name);
|
||||
ReadAttrTxt(elem, "class", site->classname);
|
||||
ReadAttrTxt(elem, "name", name);
|
||||
ReadAttrTxt(elem, "class", classname);
|
||||
if (MapValue(elem, "type", &n, geom_map, mjNGEOMTYPES)) {
|
||||
psite->type = (mjtGeom)n;
|
||||
site.type = (mjtGeom)n;
|
||||
}
|
||||
ReadAttr(elem, "size", 3, psite->size, text, false, false);
|
||||
ReadAttrInt(elem, "group", &psite->group);
|
||||
ReadAttr(elem, "pos", 3, psite->pos, text);
|
||||
ReadQuat(elem, "quat", psite->quat, text);
|
||||
ReadAttr(elem, "size", 3, site.size, text, false, false);
|
||||
ReadAttrInt(elem, "group", &site.group);
|
||||
ReadAttr(elem, "pos", 3, site.pos, text);
|
||||
ReadQuat(elem, "quat", site.quat, text);
|
||||
ReadAttrTxt(elem, "material", material);
|
||||
ReadAttr(elem, "rgba", 4, psite->rgba, text);
|
||||
ReadAttr(elem, "fromto", 6, psite->fromto, text);
|
||||
ReadAlternative(elem, psite->alt);
|
||||
ReadAttr(elem, "rgba", 4, site.rgba, text);
|
||||
ReadAttr(elem, "fromto", 6, site.fromto, text);
|
||||
ReadAlternative(elem, site.alt);
|
||||
ReadVector(elem, "user", userdata, text);
|
||||
|
||||
// set variable-size attributes
|
||||
site->set_userdata(userdata);
|
||||
site->set_material(material);
|
||||
// set strings
|
||||
mjm_setString(site.name, name.c_str());
|
||||
mjm_setString(site.classname, classname.c_str());
|
||||
mjm_setString(site.material, material.c_str());
|
||||
|
||||
GetXMLPos(elem, site);
|
||||
// set pointers
|
||||
mjm_setDouble(site.userdata, userdata.data(), userdata.size());
|
||||
|
||||
// set info
|
||||
mjm_setString(site.info,
|
||||
std::string("line = " + std::to_string(elem->GetLineNum()) + ", column = -1").c_str());
|
||||
}
|
||||
|
||||
|
||||
@@ -2177,7 +2183,7 @@ void mjXReader::OneComposite(XMLElement* elem, mjCBody* pbody, mjCDef* def) {
|
||||
ReadAttrInt(esite, "group", &dsite.group);
|
||||
ReadAttrTxt(esite, "material", material);
|
||||
ReadAttr(esite, "rgba", 4, dsite.rgba, text);
|
||||
comp.def[0].site.set_material(material);
|
||||
mjm_setString(dsite.material, material.c_str());
|
||||
}
|
||||
|
||||
// joint
|
||||
@@ -2487,7 +2493,7 @@ void mjXReader::Default(XMLElement* section, int parentid) {
|
||||
else if (name=="geom") OneGeom(elem, &def->geom);
|
||||
|
||||
// read site
|
||||
else if (name=="site") OneSite(elem, &def->site);
|
||||
else if (name=="site") OneSite(elem, def->site.spec);
|
||||
|
||||
// read camera
|
||||
else if (name=="camera") OneCamera(elem, &def->camera);
|
||||
@@ -3061,9 +3067,9 @@ void mjXReader::Body(XMLElement* section, mjCBody* pbody, mjCFrame* frame) {
|
||||
// site sub-element
|
||||
else if (name=="site") {
|
||||
// create site and parse
|
||||
mjCSite* psite = pbody->AddSite(def);
|
||||
OneSite(elem, psite);
|
||||
psite->SetFrame(frame);
|
||||
mjmSite* site = mjm_addSite(pbody, def);
|
||||
OneSite(elem, *site);
|
||||
mjm_setFrame(site, frame);
|
||||
}
|
||||
|
||||
// camera sub-element
|
||||
|
||||
@@ -59,7 +59,7 @@ class mjXReader : public mjXBase {
|
||||
void OneMaterial(tinyxml2::XMLElement* elem, mjCMaterial* pmaterial);
|
||||
void OneJoint(tinyxml2::XMLElement* elem, mjCJoint* pjoint);
|
||||
void OneGeom(tinyxml2::XMLElement* elem, mjCGeom* pgeom);
|
||||
void OneSite(tinyxml2::XMLElement* elem, mjCSite* psite);
|
||||
void OneSite(tinyxml2::XMLElement* elem, mjmSite& site);
|
||||
void OneCamera(tinyxml2::XMLElement* elem, mjCCamera* pcamera);
|
||||
void OneLight(tinyxml2::XMLElement* elem, mjCLight* plight);
|
||||
void OnePair(tinyxml2::XMLElement* elem, mjCPair* ppair);
|
||||
|
||||
+3
-3
@@ -1034,7 +1034,7 @@ template void mjXUtil::WriteAttr(XMLElement* elem, string name, int n,
|
||||
|
||||
|
||||
// write vector<double> attribute, default = zero array
|
||||
void mjXUtil::WriteVector(XMLElement* elem, string name, vector<double>& vec) {
|
||||
void mjXUtil::WriteVector(XMLElement* elem, string name, const vector<double>& vec) {
|
||||
// proceed only if non-zero found
|
||||
bool ok = false;
|
||||
for (size_t i=0; i<vec.size(); i++) {
|
||||
@@ -1053,8 +1053,8 @@ void mjXUtil::WriteVector(XMLElement* elem, string name, vector<double>& vec) {
|
||||
|
||||
|
||||
// write vector<double> attribute, default with same size
|
||||
void mjXUtil::WriteVector(XMLElement* elem, string name, vector<double>& vec,
|
||||
vector<double>& def) {
|
||||
void mjXUtil::WriteVector(XMLElement* elem, string name, const vector<double>& vec,
|
||||
const vector<double>& def) {
|
||||
// proceed only if non-zero found
|
||||
bool ok = false;
|
||||
for (size_t i=0; i<vec.size(); i++) {
|
||||
|
||||
+4
-3
@@ -198,9 +198,10 @@ class mjXUtil {
|
||||
const T* def = 0);
|
||||
|
||||
// write vector<double> attribute, with and without default
|
||||
static void WriteVector(tinyxml2::XMLElement* elem, std::string name, std::vector<double>& vec);
|
||||
static void WriteVector(tinyxml2::XMLElement* elem, std::string name, std::vector<double>& vec,
|
||||
std::vector<double>& def);
|
||||
static void WriteVector(tinyxml2::XMLElement* elem, std::string name,
|
||||
const std::vector<double>& vec);
|
||||
static void WriteVector(tinyxml2::XMLElement* elem, std::string name,
|
||||
const std::vector<double>& vec, const std::vector<double>& def);
|
||||
|
||||
// write attribute- string
|
||||
static void WriteAttrTxt(tinyxml2::XMLElement* elem, std::string name, std::string value);
|
||||
|
||||
Reference in New Issue
Block a user