Add mjs_getPluginAttributes.

PiperOrigin-RevId: 752691116
Change-Id: Ib503a99f8d10661b8bf92410ccf471420f924986
This commit is contained in:
Alessio Quaglino
2025-04-29 05:18:17 -07:00
committed by Copybara-Service
parent 2545ec5383
commit 3e9d130092
8 changed files with 52 additions and 3 deletions
+9
View File
@@ -4401,6 +4401,15 @@ Get string contents.
Get double array contents and optionally its size.
.. _mjs_getPluginAttributes:
`mjs_getPluginAttributes <#mjs_getPluginAttributes>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. mujoco-include:: mjs_getPluginAttributes
Get plugin attributes.
.. _SpecUtilities:
Spec utilities
+1
View File
@@ -3686,6 +3686,7 @@ void mjs_setDouble(mjDoubleVec* dest, const double* array, int size);
void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes);
const char* mjs_getString(const mjString* source);
const double* mjs_getDouble(const mjDoubleVec* source, int* size);
const void* mjs_getPluginAttributes(const mjsPlugin* plugin);
void mjs_setDefault(mjsElement* element, const mjsDefault* def);
int mjs_setFrame(mjsElement* dest, mjsFrame* frame);
const char* mjs_resolveOrientation(double quat[4], mjtByte degree, const char* sequence,
+3
View File
@@ -1622,6 +1622,9 @@ MJAPI const char* mjs_getString(const mjString* source);
// Get double array contents and optionally its size.
MJAPI const double* mjs_getDouble(const mjDoubleVec* source, int* size);
// Get plugin attributes.
MJAPI const void* mjs_getPluginAttributes(const mjsPlugin* plugin);
//---------------------------------- Spec utilities ------------------------------------------------
+16
View File
@@ -10298,6 +10298,22 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
doc='Get double array contents and optionally its size.',
)),
('mjs_getPluginAttributes',
FunctionDecl(
name='mjs_getPluginAttributes',
return_type=PointerType(
inner_type=ValueType(name='void', is_const=True),
),
parameters=(
FunctionParameterDecl(
name='plugin',
type=PointerType(
inner_type=ValueType(name='mjsPlugin', is_const=True),
),
),
),
doc='Get plugin attributes.',
)),
('mjs_setDefault',
FunctionDecl(
name='mjs_setDefault',
+11 -3
View File
@@ -1034,8 +1034,15 @@ PYBIND11_MODULE(_specs, m) {
[](raw::MjsPlugin& self) { mjs_delete(self.element); });
mjsPlugin.def_property(
"config",
[](raw::MjsPlugin& self) -> void {
throw pybind11::value_error("Reading plugin config is not supported.");
[](raw::MjsPlugin& self) -> py::dict {
const std::map<std::string, std::string, std::less<>>* config_attribs =
static_cast<const std::map<std::string, std::string, std::less<>>*>(
mjs_getPluginAttributes(&self));
py::dict config;
for (const auto& [key, value] : *config_attribs) {
config[py::str(key)] = value;
}
return config;
},
[](raw::MjsPlugin& self, py::dict& config) {
std::map<std::string, std::string, std::less<>> config_attribs;
@@ -1047,7 +1054,8 @@ PYBIND11_MODULE(_specs, m) {
config_attribs[key_str] = value.cast<std::string>();
}
mjs_setPluginAttributes(&self, &config_attribs);
});
},
py::return_value_policy::reference_internal);
// ============================= MJVISUAL ====================================
mjVisual.def_property(
"global_",
+1
View File
@@ -844,6 +844,7 @@ class SpecsTest(absltest.TestCase):
info='info'
)
plugin.config = {'twist': '10', 'bend': '1'}
self.assertEqual(plugin.config, {'twist': '10', 'bend': '1'})
body = spec.worldbody.add_body()
body.plugin = plugin
+8
View File
@@ -1302,6 +1302,14 @@ void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes) {
// get plugin attributes
const void* mjs_getPluginAttributes(const mjsPlugin* plugin) {
mjCPlugin* pluginC = static_cast<mjCPlugin*>(plugin->element);
return &pluginC->config_attribs;
}
// -------------------------- GLOBAL ASSET CACHE -------------------------------
void mj_setCacheSize(mjCache cache, std::size_t size) {
+3
View File
@@ -352,6 +352,9 @@ MJAPI const char* mjs_getString(const mjString* source);
// Get double array contents and optionally its size.
MJAPI const double* mjs_getDouble(const mjDoubleVec* source, int* size);
// Get plugin attributes.
MJAPI const void* mjs_getPluginAttributes(const mjsPlugin* plugin);
//---------------------------------- Other utilities -----------------------------------------------