Remove copy_back from Python bindings and mj_copyBack from the C API.
PiperOrigin-RevId: 687377331 Change-Id: I355493d92857418b08b5aa90ea38cebe5c475314
This commit is contained in:
committed by
Copybara-Service
parent
62c0ef4262
commit
dcf2816543
@@ -87,15 +87,6 @@ mj_freeLastXML
|
|||||||
|
|
||||||
Free last XML model if loaded. Called internally at each load.
|
Free last XML model if loaded. Called internally at each load.
|
||||||
|
|
||||||
.. _mj_copyBack:
|
|
||||||
|
|
||||||
mj_copyBack
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. mujoco-include:: mj_copyBack
|
|
||||||
|
|
||||||
Copy (possibly modified) model fields back into spec.
|
|
||||||
|
|
||||||
.. _mj_saveXMLString:
|
.. _mj_saveXMLString:
|
||||||
|
|
||||||
mj_saveXMLString
|
mj_saveXMLString
|
||||||
|
|||||||
@@ -3133,7 +3133,6 @@ mjModel* mj_compile(mjSpec* s, const mjVFS* vfs);
|
|||||||
int mj_recompile(mjSpec* s, const mjVFS* vfs, mjModel* m, mjData* d);
|
int mj_recompile(mjSpec* s, const mjVFS* vfs, mjModel* m, mjData* d);
|
||||||
int mj_saveLastXML(const char* filename, const mjModel* m, char* error, int error_sz);
|
int mj_saveLastXML(const char* filename, const mjModel* m, char* error, int error_sz);
|
||||||
void mj_freeLastXML(void);
|
void mj_freeLastXML(void);
|
||||||
void mj_copyBack(mjSpec* s, const mjModel* m);
|
|
||||||
int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz);
|
int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz);
|
||||||
int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz);
|
int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz);
|
||||||
void mj_step(const mjModel* m, mjData* d);
|
void mj_step(const mjModel* m, mjData* d);
|
||||||
|
|||||||
@@ -117,9 +117,6 @@ MJAPI int mj_saveLastXML(const char* filename, const mjModel* m, char* error, in
|
|||||||
// Free last XML model if loaded. Called internally at each load.
|
// Free last XML model if loaded. Called internally at each load.
|
||||||
MJAPI void mj_freeLastXML(void);
|
MJAPI void mj_freeLastXML(void);
|
||||||
|
|
||||||
// Copy (possibly modified) model fields back into spec.
|
|
||||||
MJAPI void mj_copyBack(mjSpec* s, const mjModel* m);
|
|
||||||
|
|
||||||
// Save spec to XML string, return 1 on success, 0 otherwise.
|
// Save spec to XML string, return 1 on success, 0 otherwise.
|
||||||
MJAPI int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz);
|
MJAPI int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz);
|
||||||
|
|
||||||
|
|||||||
@@ -317,26 +317,6 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
|
|||||||
parameters=(),
|
parameters=(),
|
||||||
doc='Free last XML model if loaded. Called internally at each load.',
|
doc='Free last XML model if loaded. Called internally at each load.',
|
||||||
)),
|
)),
|
||||||
('mj_copyBack',
|
|
||||||
FunctionDecl(
|
|
||||||
name='mj_copyBack',
|
|
||||||
return_type=ValueType(name='void'),
|
|
||||||
parameters=(
|
|
||||||
FunctionParameterDecl(
|
|
||||||
name='s',
|
|
||||||
type=PointerType(
|
|
||||||
inner_type=ValueType(name='mjSpec'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
FunctionParameterDecl(
|
|
||||||
name='m',
|
|
||||||
type=PointerType(
|
|
||||||
inner_type=ValueType(name='mjModel', is_const=True),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
doc='Copy (possibly modified) model fields back into spec.',
|
|
||||||
)),
|
|
||||||
('mj_saveXMLString',
|
('mj_saveXMLString',
|
||||||
FunctionDecl(
|
FunctionDecl(
|
||||||
name='mj_saveXMLString',
|
name='mj_saveXMLString',
|
||||||
|
|||||||
@@ -335,12 +335,6 @@ PYBIND11_MODULE(_specs, m) {
|
|||||||
A dictionary of assets to be used by the spec. The keys are asset names
|
A dictionary of assets to be used by the spec. The keys are asset names
|
||||||
and the values are asset contents.
|
and the values are asset contents.
|
||||||
)mydelimiter");
|
)mydelimiter");
|
||||||
mjSpec.def(
|
|
||||||
"copy_back",
|
|
||||||
[](MjSpec& self, raw::MjModel& model) {
|
|
||||||
return mj_copyBack(self.ptr, &model);
|
|
||||||
},
|
|
||||||
py::return_value_policy::reference_internal);
|
|
||||||
mjSpec.def("to_xml", [](MjSpec& self) -> std::string {
|
mjSpec.def("to_xml", [](MjSpec& self) -> std::string {
|
||||||
int size = mj_saveXMLString(self.ptr, nullptr, 0, nullptr, 0);
|
int size = mj_saveXMLString(self.ptr, nullptr, 0, nullptr, 0);
|
||||||
std::unique_ptr<char[]> buf(new char[size + 1]);
|
std::unique_ptr<char[]> buf(new char[size + 1]);
|
||||||
|
|||||||
@@ -75,14 +75,6 @@ mjSpec* mj_copySpec(const mjSpec* s) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// copy back model
|
|
||||||
void mj_copyBack(mjSpec* s, const mjModel* m) {
|
|
||||||
mjCModel* modelC = static_cast<mjCModel*>(s->element);
|
|
||||||
modelC->CopyBack(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// compile model
|
// compile model
|
||||||
mjModel* mj_compile(mjSpec* s, const mjVFS* vfs) {
|
mjModel* mj_compile(mjSpec* s, const mjVFS* vfs) {
|
||||||
mjCModel* modelC = static_cast<mjCModel*>(s->element);
|
mjCModel* modelC = static_cast<mjCModel*>(s->element);
|
||||||
|
|||||||
@@ -54,9 +54,6 @@ MJAPI const char* mjs_getError(mjSpec* s);
|
|||||||
// Return 1 if compiler error is a warning.
|
// Return 1 if compiler error is a warning.
|
||||||
MJAPI int mjs_isWarning(mjSpec* s);
|
MJAPI int mjs_isWarning(mjSpec* s);
|
||||||
|
|
||||||
// Copy model fields back into spec.
|
|
||||||
MJAPI void mj_copyBack(mjSpec* s, const mjModel* m);
|
|
||||||
|
|
||||||
// Delete spec.
|
// Delete spec.
|
||||||
MJAPI void mj_deleteSpec(mjSpec* s);
|
MJAPI void mj_deleteSpec(mjSpec* s);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -395,7 +395,7 @@ mjSpec* ParseSpecFromString(std::string_view xml, char* error, int nerror) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Main writer function - calls mjXWrite
|
// Main writer function - calls mjXWrite
|
||||||
std::string WriteXML(const mjSpec* spec, char* error, int nerror) {
|
std::string WriteXML(const mjModel* m, const mjSpec* spec, char* error, int nerror) {
|
||||||
LocaleOverride locale_override;
|
LocaleOverride locale_override;
|
||||||
|
|
||||||
// check for empty model
|
// check for empty model
|
||||||
@@ -405,7 +405,7 @@ std::string WriteXML(const mjSpec* spec, char* error, int nerror) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mjXWriter writer;
|
mjXWriter writer;
|
||||||
writer.SetModel(spec);
|
writer.SetModel(spec, m);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return writer.Write(error, nerror);
|
return writer.Write(error, nerror);
|
||||||
|
|||||||
+1
-1
@@ -29,6 +29,6 @@ mjSpec* ParseXML(const char* filename, const mjVFS* vfs, char* error, int nerror
|
|||||||
mjSpec* ParseSpecFromString(std::string_view xml, char* error = nullptr, int nerror = 0);
|
mjSpec* ParseSpecFromString(std::string_view xml, char* error = nullptr, int nerror = 0);
|
||||||
|
|
||||||
// Main writer function
|
// Main writer function
|
||||||
std::string WriteXML(const mjSpec* spec, char* error, int nerror);
|
std::string WriteXML(const mjModel* m, const mjSpec* spec, char* error, int nerror);
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_XML_XML_H_
|
#endif // MUJOCO_SRC_XML_XML_H_
|
||||||
|
|||||||
+3
-4
@@ -62,8 +62,7 @@ std::optional<std::string> GlobalModel::ToXML(const mjModel* m, char* error,
|
|||||||
mjCopyError(error, "No XML model loaded", error_sz);
|
mjCopyError(error, "No XML model loaded", error_sz);
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
mj_copyBack(spec_, m);
|
std::string result = WriteXML(m, spec_, error, error_sz);
|
||||||
std::string result = WriteXML(spec_, error, error_sz);
|
|
||||||
if (result.empty()) {
|
if (result.empty()) {
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
@@ -229,7 +228,7 @@ mjSpec* mj_parseXMLString(const char* xml, const mjVFS* vfs, char* error, int er
|
|||||||
|
|
||||||
// save spec to XML file, return 1 on success, 0 otherwise
|
// save spec to XML file, return 1 on success, 0 otherwise
|
||||||
int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz) {
|
int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz) {
|
||||||
std::string result = WriteXML(s, error, error_sz);
|
std::string result = WriteXML(NULL, s, error, error_sz);
|
||||||
if (result.empty()) {
|
if (result.empty()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -245,7 +244,7 @@ int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz)
|
|||||||
|
|
||||||
// save spec to string, return 1 on success, 0 otherwise
|
// save spec to string, return 1 on success, 0 otherwise
|
||||||
int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz) {
|
int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz) {
|
||||||
std::string result = WriteXML(s, error, error_sz);
|
std::string result = WriteXML(NULL, s, error, error_sz);
|
||||||
if (result.size() >= xml_sz) {
|
if (result.size() >= xml_sz) {
|
||||||
std::string error_msg = "Output string too short, should be at least " +
|
std::string error_msg = "Output string too short, should be at least " +
|
||||||
std::to_string(result.size()+1);
|
std::to_string(result.size()+1);
|
||||||
|
|||||||
+2
-1
@@ -21,6 +21,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <mujoco/mjmodel.h>
|
||||||
#include <mujoco/mjspec.h>
|
#include <mujoco/mjspec.h>
|
||||||
#include "xml/xml_util.h"
|
#include "xml/xml_util.h"
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
@@ -43,7 +44,7 @@ mjXBase::mjXBase() {
|
|||||||
|
|
||||||
|
|
||||||
// set model field
|
// set model field
|
||||||
void mjXBase::SetModel(const mjSpec* _model) {
|
void mjXBase::SetModel(const mjSpec* _model, const mjModel* m) {
|
||||||
spec = (mjSpec*)_model;
|
spec = (mjSpec*)_model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ class mjXBase : public mjXUtil {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// set the model allocated externally
|
// set the model allocated externally
|
||||||
virtual void SetModel(const mjSpec*);
|
virtual void SetModel(const mjSpec*, const mjModel* = nullptr);
|
||||||
|
|
||||||
// read alternative orientation specification
|
// read alternative orientation specification
|
||||||
static int ReadAlternative(tinyxml2::XMLElement* elem, mjsOrientation& alt);
|
static int ReadAlternative(tinyxml2::XMLElement* elem, mjsOrientation& alt);
|
||||||
|
|||||||
@@ -853,9 +853,12 @@ mjXWriter::mjXWriter(void) {
|
|||||||
|
|
||||||
|
|
||||||
// cast model
|
// cast model
|
||||||
void mjXWriter::SetModel(const mjSpec* spec) {
|
void mjXWriter::SetModel(const mjSpec* _spec, const mjModel* m) {
|
||||||
if (spec) {
|
if (_spec) {
|
||||||
model = (mjCModel*)spec->element;
|
model = (mjCModel*)_spec->element;
|
||||||
|
}
|
||||||
|
if (m) {
|
||||||
|
model->CopyBack(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
|
#include <mujoco/mjmodel.h>
|
||||||
#include <mujoco/mjspec.h>
|
#include <mujoco/mjspec.h>
|
||||||
#include "user/user_objects.h"
|
#include "user/user_objects.h"
|
||||||
#include "xml/xml_base.h"
|
#include "xml/xml_base.h"
|
||||||
@@ -28,7 +29,7 @@ class mjXWriter : public mjXBase {
|
|||||||
public:
|
public:
|
||||||
mjXWriter(); // constructor
|
mjXWriter(); // constructor
|
||||||
virtual ~mjXWriter() = default; // destructor
|
virtual ~mjXWriter() = default; // destructor
|
||||||
void SetModel(const mjSpec* spec);
|
void SetModel(const mjSpec* _spec, const mjModel* m = nullptr);
|
||||||
|
|
||||||
// write XML document to string
|
// write XML document to string
|
||||||
std::string Write(char *error, std::size_t error_sz);
|
std::string Write(char *error, std::size_t error_sz);
|
||||||
|
|||||||
Reference in New Issue
Block a user