From 095608ef5f5f7577b749ade128cfd21c5222cf34 Mon Sep 17 00:00:00 2001 From: Google DeepMind Date: Tue, 30 Jun 2026 11:55:24 -0700 Subject: [PATCH] Make a bindings.h header file with the declarations, so that other projects can reuse the declared structs. Add parseXMLString overload that supports passing in an MjVFS. PiperOrigin-RevId: 940579266 Change-Id: I8294988bc4279e80795fab21024f64562a9e6743 --- wasm/codegen/generated/bindings.cc | 7408 +------------------ wasm/codegen/generated/bindings.h | 7451 ++++++++++++++++++++ wasm/codegen/generators/binding_builder.py | 32 +- wasm/codegen/templates/bindings.cc | 414 +- wasm/codegen/templates/bindings.h | 455 ++ wasm/codegen/tests/bindings_diff_test.py | 7 +- wasm/codegen/update.py | 11 +- 7 files changed, 7965 insertions(+), 7813 deletions(-) create mode 100644 wasm/codegen/generated/bindings.h create mode 100644 wasm/codegen/templates/bindings.h diff --git a/wasm/codegen/generated/bindings.cc b/wasm/codegen/generated/bindings.cc index bcd95bd0..42916916 100644 --- a/wasm/codegen/generated/bindings.cc +++ b/wasm/codegen/generated/bindings.cc @@ -17,6 +17,8 @@ // NOLINTBEGIN(whitespace/line_length) // NOLINTBEGIN(whitespace/semicolon) +#include "wasm/codegen/generated/bindings.h" + #include #include #include @@ -32,7 +34,7 @@ #include #include // NOLINT #include -#include // NOLINT +#include // NOLINT #include #include @@ -46,74 +48,6 @@ namespace mujoco::wasm { -using emscripten::enum_; -using emscripten::function; -using emscripten::val; -using emscripten::typed_memory_view; -using emscripten::return_value_policy::reference; -using emscripten::return_value_policy::take_ownership; - -EMSCRIPTEN_DECLARE_VAL_TYPE(NumberOrString); -EMSCRIPTEN_DECLARE_VAL_TYPE(NumberArray); -EMSCRIPTEN_DECLARE_VAL_TYPE(String); -EMSCRIPTEN_DECLARE_VAL_TYPE(StringOrNull); - -// Macro to define accessors for different MuJoCo object types within mjModel. -// Each line calls X_ACCESSOR with the following arguments: -// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). -// 2. Name: The object type name in CamelCase (e.g., Actuator). -// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). -// 4. field: The name of the array field in mjModel (e.g., actuator). -// 5. nfield: The name of the count field in mjModel (e.g., nu). -#define MJMODEL_ACCESSORS \ - X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ - X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ - X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ - X_ACCESSOR( EQUALITY, Equality, mjOBJ_EQUALITY, eq, neq ) \ - X_ACCESSOR( EXCLUDE, Exclude, mjOBJ_EXCLUDE, exclude, nexclude ) \ - X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ - X_ACCESSOR( HFIELD, Hfield, mjOBJ_HFIELD, hfield, nhfield ) \ - X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ - X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ - X_ACCESSOR( MATERIAL, Material, mjOBJ_MATERIAL, mat, nmat ) \ - X_ACCESSOR( MESH, Mesh, mjOBJ_MESH, mesh, nmesh ) \ - X_ACCESSOR( NUMERIC, Numeric, mjOBJ_NUMERIC, numeric, nnumeric ) \ - X_ACCESSOR( PAIR, Pair, mjOBJ_PAIR, pair, npair ) \ - X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ - X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ - X_ACCESSOR( SKIN, Skin, mjOBJ_SKIN, skin, nskin ) \ - X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) \ - X_ACCESSOR( TEXTURE, Texture, mjOBJ_TEXTURE, tex, ntex ) \ - X_ACCESSOR( TUPLE, Tuple, mjOBJ_TUPLE, tuple, ntuple ) \ - X_ACCESSOR( KEYFRAME, Keyframe, mjOBJ_KEY, key, nkey ) - -// Macro to define accessors for different MuJoCo object types within mjData. -// Each line calls X_ACCESSOR with the following arguments: -// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). -// 2. Name: The object type name in CamelCase (e.g., Actuator). -// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). -// 4. field: The name of the array field in mjData (e.g., actuator). -// 5. nfield: The name of the count field in mjModel (e.g., nu). -#define MJDATA_ACCESSORS \ - X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ - X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ - X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ - X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ - X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ - X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ - X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ - X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ - X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) - -// Raises an error if the given val is null or undefined. -// A macro is used so that the error contains the name of the variable. -// TODO(matijak): Remove this when we can handle strings using UNPACK_STRING? -#define CHECK_VAL(val) \ - if (val.isNull()) { \ - mju_error("Invalid argument: %s is null", #val); \ - } else if (val.isUndefined()) { \ - mju_error("Invalid argument: %s is undefined", #val); \ - } void ThrowMujocoErrorToJS(const mjLogMessage* msg) { if (msg->level == mjLOG_ERROR) { @@ -216,7096 +150,6 @@ val get_mjFRAMESTRING() { return MakeValArray(mjFRAMESTRING); } val get_mjVISSTRING() { return MakeValArray3(mjVISSTRING); } val get_mjRNDSTRING() { return MakeValArray3(mjRNDSTRING); } - -using mjVisualGlobal = decltype(::mjVisual::global); -using mjVisualHeadlight = decltype(::mjVisual::headlight); -using mjVisualMap = decltype(::mjVisual::map); -using mjVisualQuality = decltype(::mjVisual::quality); -using mjVisualRgba = decltype(::mjVisual::rgba); -using mjVisualScale = decltype(::mjVisual::scale); - -#undef MJ_M -#define MJ_M(n) model_->n -// The X macro expands to a member function within an MjModel...Accessor struct. -// This function returns an emscripten::val, typically a typed memory view, -// providing access to array data within the underlying mjModel. The size and -// offset of the memory view are determined by the arguments: -// - type: The C++ type of the array elements (e.g., mjtNum, int). -// - prefix: The prefix of the field name in mjModel (e.g., jnt_, geom_). -// - var: The name of the field being accessed (e.g., qposadr, size). -// - dim0: Used to determine special indexing logic for dynamically sized arrays -// like joints (nq, nv), hfields, textures, numerics, and tuples. -// - dim1: The fixed dimension of the array if not dynamically sized. If "1", -// a single element is returned. Otherwise, it's used as the stride -// for the typed memory view. -#define X(type, prefix, var, dim0, dim1) \ - emscripten::val get_##var() const { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - return val(typed_memory_view(end - start, model_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - return val(typed_memory_view(end - start, model_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ - int start = model_->hfield_adr[id_]; \ - int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ - return val(typed_memory_view(count, model_->hfield_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ - int start = model_->tex_adr[id_]; \ - int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ - return val(typed_memory_view(count, model_->tex_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ - int start = model_->numeric_adr[id_]; \ - int count = model_->numeric_size[id_]; \ - return val(typed_memory_view(count, model_->numeric_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ - int start = model_->tuple_adr[id_]; \ - int count = model_->tuple_size[id_]; \ - return val(typed_memory_view(count, model_->prefix##var + start)); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(model_->prefix##var[id_]); \ - } else { \ - return val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)); \ - } \ - } \ - } \ - void set_##var(const emscripten::val& value) { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - val(typed_memory_view(end - start, model_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - val(typed_memory_view(end - start, model_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ - int start = model_->hfield_adr[id_]; \ - int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ - val(typed_memory_view(count, model_->hfield_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ - int start = model_->tex_adr[id_]; \ - int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ - val(typed_memory_view(count, model_->tex_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ - int start = model_->numeric_adr[id_]; \ - int count = model_->numeric_size[id_]; \ - val(typed_memory_view(count, model_->numeric_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ - int start = model_->tuple_adr[id_]; \ - int count = model_->tuple_size[id_]; \ - val(typed_memory_view(count, model_->prefix##var + start)) \ - .call("set", value); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - model_->prefix##var[id_] = value.as(); \ - } else { \ - val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)) \ - .call("set", value); \ - } \ - } \ - } - -// Expands to a struct definition for each object type in MJMODEL_ACCESSORS. -// Each struct, named `MjModel{Name}Accessor`, provides: -// - A constructor taking an `mjModel*` and an integer `id`. -// - An `id()` method to get the object's index. -// - A `name()` method to get the object's name using `mj_id2name`. -// - Member functions generated by the `MJMODEL_##NAME` macro, which in turn -// uses the `X` macro to define accessors for fields within `mjModel`. -#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ - struct MjModel##Name##Accessor { \ - MjModel##Name##Accessor(mjModel* model, int id) : model_(model), id_(id) {} \ - \ - int id() const { return id_; } \ - std::string name() const { \ - const char* name = mj_id2name(model_, OBJTYPE, id_); \ - return name ? name : ""; \ - } \ - \ - MJMODEL_##NAME \ - \ - private: \ - mjModel* model_; \ - int id_; \ - }; -MJMODEL_ACCESSORS -#undef X_ACCESSOR - -// Expands to a struct definition for each object type in MJDATA_ACCESSORS. -// Each struct, named `MjData{Name}Accessor`, provides: -// - A constructor taking an `mjData*`, an `mjModel*`, and an integer `id`. -// - An `id()` method to get the object's index. -// - A `name()` method to get the object's name using `mj_id2name`. -// - Member functions generated by the `MJDATA_##NAME` macro, which in turn -// uses the `X` macro to define accessors for fields within `mjData`. -#undef MJ_M -#define MJ_M(n) model_->n -#undef X -#define X(type, prefix, var, dim0, dim1) \ - emscripten::val get_##var() const { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - return val(typed_memory_view(end - start, data_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(typed_memory_view(end - start, data_->prefix##var + start)); \ - } else { \ - return val(typed_memory_view( \ - (end - start) * dim1, data_->prefix##var + start * dim1)); \ - } \ - } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ - int start = model_->sensor_adr[id_]; \ - int count = model_->sensor_dim[id_]; \ - return val(typed_memory_view(count, data_->sensordata + start)); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(data_->prefix##var[id_]); \ - } else { \ - return val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)); \ - } \ - } \ - } \ - void set_##var(const emscripten::val& value) { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - val(typed_memory_view(end - start, data_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - if constexpr (std::string_view(#dim1) == "1") { \ - val(typed_memory_view(end - start, data_->prefix##var + start)) \ - .call("set", value); \ - } else { \ - val(typed_memory_view((end - start) * dim1, \ - data_->prefix##var + start * dim1)) \ - .call("set", value); \ - } \ - } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ - int start = model_->sensor_adr[id_]; \ - int count = model_->sensor_dim[id_]; \ - val(typed_memory_view(count, data_->sensordata + start)) \ - .call("set", value); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - data_->prefix##var[id_] = value.as(); \ - } else { \ - val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)) \ - .call("set", value); \ - } \ - } \ - } - -#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ - struct MjData##Name##Accessor { \ - MjData##Name##Accessor(mjData* data, mjModel* model, int id) : data_(data), model_(model), id_(id) {} \ - \ - int id() const { return id_; } \ - std::string name() const { \ - const char* name = mj_id2name(model_, OBJTYPE, id_); \ - return name ? name : ""; \ - } \ - \ - MJDATA_##NAME \ - \ - private: \ - mjData* data_; \ - mjModel* model_; \ - int id_; \ - }; -MJDATA_ACCESSORS -#undef X_ACCESSOR - -#undef X -#undef MJ_M - -struct MjContact { - ~MjContact(); - MjContact(); - explicit MjContact(mjContact *ptr); - MjContact(const MjContact &); - MjContact &operator=(const MjContact &); - std::unique_ptr copy(); - mjContact* get() const; - void set(mjContact* ptr); - mjtNum dist() const { - return ptr_->dist; - } - void set_dist(mjtNum value) { - ptr_->dist = value; - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val frame() const { - return emscripten::val(emscripten::typed_memory_view(9, ptr_->frame)); - } - mjtNum includemargin() const { - return ptr_->includemargin; - } - void set_includemargin(mjtNum value) { - ptr_->includemargin = value; - } - emscripten::val friction() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->friction)); - } - emscripten::val solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); - } - emscripten::val solreffriction() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solreffriction)); - } - emscripten::val solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); - } - mjtNum mu() const { - return ptr_->mu; - } - void set_mu(mjtNum value) { - ptr_->mu = value; - } - emscripten::val H() const { - return emscripten::val(emscripten::typed_memory_view(36, ptr_->H)); - } - int dim() const { - return ptr_->dim; - } - void set_dim(int value) { - ptr_->dim = value; - } - int geom1() const { - return ptr_->geom1; - } - void set_geom1(int value) { - ptr_->geom1 = value; - } - int geom2() const { - return ptr_->geom2; - } - void set_geom2(int value) { - ptr_->geom2 = value; - } - emscripten::val geom() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->geom)); - } - emscripten::val flex() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->flex)); - } - emscripten::val elem() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->elem)); - } - emscripten::val vert() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->vert)); - } - int exclude() const { - return ptr_->exclude; - } - void set_exclude(int value) { - ptr_->exclude = value; - } - int efc_address() const { - return ptr_->efc_address; - } - void set_efc_address(int value) { - ptr_->efc_address = value; - } - - private: - mjContact* ptr_; - bool owned_ = false; -}; - -struct MjLROpt { - ~MjLROpt(); - MjLROpt(); - explicit MjLROpt(mjLROpt *ptr); - MjLROpt(const MjLROpt &); - MjLROpt &operator=(const MjLROpt &); - std::unique_ptr copy(); - mjLROpt* get() const; - void set(mjLROpt* ptr); - int mode() const { - return ptr_->mode; - } - void set_mode(int value) { - ptr_->mode = value; - } - int useexisting() const { - return ptr_->useexisting; - } - void set_useexisting(int value) { - ptr_->useexisting = value; - } - int uselimit() const { - return ptr_->uselimit; - } - void set_uselimit(int value) { - ptr_->uselimit = value; - } - mjtNum accel() const { - return ptr_->accel; - } - void set_accel(mjtNum value) { - ptr_->accel = value; - } - mjtNum maxforce() const { - return ptr_->maxforce; - } - void set_maxforce(mjtNum value) { - ptr_->maxforce = value; - } - mjtNum timeconst() const { - return ptr_->timeconst; - } - void set_timeconst(mjtNum value) { - ptr_->timeconst = value; - } - mjtNum timestep() const { - return ptr_->timestep; - } - void set_timestep(mjtNum value) { - ptr_->timestep = value; - } - mjtNum inttotal() const { - return ptr_->inttotal; - } - void set_inttotal(mjtNum value) { - ptr_->inttotal = value; - } - mjtNum interval() const { - return ptr_->interval; - } - void set_interval(mjtNum value) { - ptr_->interval = value; - } - mjtNum tolrange() const { - return ptr_->tolrange; - } - void set_tolrange(mjtNum value) { - ptr_->tolrange = value; - } - - private: - mjLROpt* ptr_; - bool owned_ = false; -}; - -struct MjLogConfig { - ~MjLogConfig(); - MjLogConfig(); - explicit MjLogConfig(mjLogConfig *ptr); - MjLogConfig(const MjLogConfig &); - MjLogConfig &operator=(const MjLogConfig &); - std::unique_ptr copy(); - mjLogConfig* get() const; - void set(mjLogConfig* ptr); - mjtBool logto_console() const { - return ptr_->logto_console; - } - void set_logto_console(mjtBool value) { - ptr_->logto_console = value; - } - mjtBool logto_file() const { - return ptr_->logto_file; - } - void set_logto_file(mjtBool value) { - ptr_->logto_file = value; - } - emscripten::val logfile() const { - return emscripten::val(emscripten::typed_memory_view(1024, ptr_->logfile)); - } - int topics() const { - return ptr_->topics; - } - void set_topics(int value) { - ptr_->topics = value; - } - - private: - mjLogConfig* ptr_; - bool owned_ = false; -}; - -struct MjLogMessage { - ~MjLogMessage(); - MjLogMessage(); - explicit MjLogMessage(mjLogMessage *ptr); - mjLogMessage* get() const; - void set(mjLogMessage* ptr); - int level() const { - return ptr_->level; - } - void set_level(int value) { - ptr_->level = value; - } - int topic() const { - return ptr_->topic; - } - void set_topic(int value) { - ptr_->topic = value; - } - emscripten::val subject() const { - return emscripten::val(emscripten::typed_memory_view(1024, ptr_->subject)); - } - std::string body() const { - return ptr_->body ? std::string(ptr_->body) : ""; - } - std::string func() const { - return ptr_->func ? std::string(ptr_->func) : ""; - } - std::string file() const { - return ptr_->file ? std::string(ptr_->file) : ""; - } - int line() const { - return ptr_->line; - } - void set_line(int value) { - ptr_->line = value; - } - mjtBool timestamp() const { - return ptr_->timestamp; - } - void set_timestamp(mjtBool value) { - ptr_->timestamp = value; - } - - private: - mjLogMessage* ptr_; - bool owned_ = false; -}; - -struct MjOption { - ~MjOption(); - MjOption(); - explicit MjOption(mjOption *ptr); - MjOption(const MjOption &); - MjOption &operator=(const MjOption &); - std::unique_ptr copy(); - mjOption* get() const; - void set(mjOption* ptr); - mjtNum timestep() const { - return ptr_->timestep; - } - void set_timestep(mjtNum value) { - ptr_->timestep = value; - } - mjtNum impratio() const { - return ptr_->impratio; - } - void set_impratio(mjtNum value) { - ptr_->impratio = value; - } - mjtNum tolerance() const { - return ptr_->tolerance; - } - void set_tolerance(mjtNum value) { - ptr_->tolerance = value; - } - mjtNum ls_tolerance() const { - return ptr_->ls_tolerance; - } - void set_ls_tolerance(mjtNum value) { - ptr_->ls_tolerance = value; - } - mjtNum noslip_tolerance() const { - return ptr_->noslip_tolerance; - } - void set_noslip_tolerance(mjtNum value) { - ptr_->noslip_tolerance = value; - } - mjtNum ccd_tolerance() const { - return ptr_->ccd_tolerance; - } - void set_ccd_tolerance(mjtNum value) { - ptr_->ccd_tolerance = value; - } - mjtNum sleep_tolerance() const { - return ptr_->sleep_tolerance; - } - void set_sleep_tolerance(mjtNum value) { - ptr_->sleep_tolerance = value; - } - emscripten::val gravity() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->gravity)); - } - emscripten::val wind() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->wind)); - } - emscripten::val magnetic() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->magnetic)); - } - mjtNum density() const { - return ptr_->density; - } - void set_density(mjtNum value) { - ptr_->density = value; - } - mjtNum viscosity() const { - return ptr_->viscosity; - } - void set_viscosity(mjtNum value) { - ptr_->viscosity = value; - } - mjtNum o_margin() const { - return ptr_->o_margin; - } - void set_o_margin(mjtNum value) { - ptr_->o_margin = value; - } - emscripten::val o_solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->o_solref)); - } - emscripten::val o_solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->o_solimp)); - } - emscripten::val o_friction() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->o_friction)); - } - int integrator() const { - return ptr_->integrator; - } - void set_integrator(int value) { - ptr_->integrator = value; - } - int cone() const { - return ptr_->cone; - } - void set_cone(int value) { - ptr_->cone = value; - } - int jacobian() const { - return ptr_->jacobian; - } - void set_jacobian(int value) { - ptr_->jacobian = value; - } - int solver() const { - return ptr_->solver; - } - void set_solver(int value) { - ptr_->solver = value; - } - int iterations() const { - return ptr_->iterations; - } - void set_iterations(int value) { - ptr_->iterations = value; - } - int ls_iterations() const { - return ptr_->ls_iterations; - } - void set_ls_iterations(int value) { - ptr_->ls_iterations = value; - } - int noslip_iterations() const { - return ptr_->noslip_iterations; - } - void set_noslip_iterations(int value) { - ptr_->noslip_iterations = value; - } - int ccd_iterations() const { - return ptr_->ccd_iterations; - } - void set_ccd_iterations(int value) { - ptr_->ccd_iterations = value; - } - int disableflags() const { - return ptr_->disableflags; - } - void set_disableflags(int value) { - ptr_->disableflags = value; - } - int enableflags() const { - return ptr_->enableflags; - } - void set_enableflags(int value) { - ptr_->enableflags = value; - } - int disableactuator() const { - return ptr_->disableactuator; - } - void set_disableactuator(int value) { - ptr_->disableactuator = value; - } - int sdf_initpoints() const { - return ptr_->sdf_initpoints; - } - void set_sdf_initpoints(int value) { - ptr_->sdf_initpoints = value; - } - int sdf_iterations() const { - return ptr_->sdf_iterations; - } - void set_sdf_iterations(int value) { - ptr_->sdf_iterations = value; - } - - private: - mjOption* ptr_; - bool owned_ = false; -}; - -struct MjPreContact { - ~MjPreContact(); - MjPreContact(); - explicit MjPreContact(mjPreContact *ptr); - MjPreContact(const MjPreContact &); - MjPreContact &operator=(const MjPreContact &); - std::unique_ptr copy(); - mjPreContact* get() const; - void set(mjPreContact* ptr); - mjtNum dist() const { - return ptr_->dist; - } - void set_dist(mjtNum value) { - ptr_->dist = value; - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val normal() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->normal)); - } - emscripten::val tangent() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->tangent)); - } - - private: - mjPreContact* ptr_; - bool owned_ = false; -}; - -struct MjSolverStat { - ~MjSolverStat(); - MjSolverStat(); - explicit MjSolverStat(mjSolverStat *ptr); - MjSolverStat(const MjSolverStat &); - MjSolverStat &operator=(const MjSolverStat &); - std::unique_ptr copy(); - mjSolverStat* get() const; - void set(mjSolverStat* ptr); - mjtNum improvement() const { - return ptr_->improvement; - } - void set_improvement(mjtNum value) { - ptr_->improvement = value; - } - mjtNum gradient() const { - return ptr_->gradient; - } - void set_gradient(mjtNum value) { - ptr_->gradient = value; - } - mjtNum lineslope() const { - return ptr_->lineslope; - } - void set_lineslope(mjtNum value) { - ptr_->lineslope = value; - } - int nactive() const { - return ptr_->nactive; - } - void set_nactive(int value) { - ptr_->nactive = value; - } - int nchange() const { - return ptr_->nchange; - } - void set_nchange(int value) { - ptr_->nchange = value; - } - int neval() const { - return ptr_->neval; - } - void set_neval(int value) { - ptr_->neval = value; - } - int nupdate() const { - return ptr_->nupdate; - } - void set_nupdate(int value) { - ptr_->nupdate = value; - } - - private: - mjSolverStat* ptr_; - bool owned_ = false; -}; - -struct MjStatistic { - ~MjStatistic(); - MjStatistic(); - explicit MjStatistic(mjStatistic *ptr); - MjStatistic(const MjStatistic &); - MjStatistic &operator=(const MjStatistic &); - std::unique_ptr copy(); - mjStatistic* get() const; - void set(mjStatistic* ptr); - mjtNum meaninertia() const { - return ptr_->meaninertia; - } - void set_meaninertia(mjtNum value) { - ptr_->meaninertia = value; - } - mjtNum meanmass() const { - return ptr_->meanmass; - } - void set_meanmass(mjtNum value) { - ptr_->meanmass = value; - } - mjtNum meansize() const { - return ptr_->meansize; - } - void set_meansize(mjtNum value) { - ptr_->meansize = value; - } - mjtNum extent() const { - return ptr_->extent; - } - void set_extent(mjtNum value) { - ptr_->extent = value; - } - emscripten::val center() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->center)); - } - - private: - mjStatistic* ptr_; - bool owned_ = false; -}; - -struct MjTimerStat { - ~MjTimerStat(); - MjTimerStat(); - explicit MjTimerStat(mjTimerStat *ptr); - MjTimerStat(const MjTimerStat &); - MjTimerStat &operator=(const MjTimerStat &); - std::unique_ptr copy(); - mjTimerStat* get() const; - void set(mjTimerStat* ptr); - mjtNum duration() const { - return ptr_->duration; - } - void set_duration(mjtNum value) { - ptr_->duration = value; - } - int number() const { - return ptr_->number; - } - void set_number(int value) { - ptr_->number = value; - } - - private: - mjTimerStat* ptr_; - bool owned_ = false; -}; - -struct MjVisualGlobal { - ~MjVisualGlobal(); - MjVisualGlobal(); - explicit MjVisualGlobal(mjVisualGlobal *ptr); - MjVisualGlobal(const MjVisualGlobal &); - MjVisualGlobal &operator=(const MjVisualGlobal &); - std::unique_ptr copy(); - mjVisualGlobal* get() const; - void set(mjVisualGlobal* ptr); - int cameraid() const { - return ptr_->cameraid; - } - void set_cameraid(int value) { - ptr_->cameraid = value; - } - int orthographic() const { - return ptr_->orthographic; - } - void set_orthographic(int value) { - ptr_->orthographic = value; - } - float fovy() const { - return ptr_->fovy; - } - void set_fovy(float value) { - ptr_->fovy = value; - } - float ipd() const { - return ptr_->ipd; - } - void set_ipd(float value) { - ptr_->ipd = value; - } - float azimuth() const { - return ptr_->azimuth; - } - void set_azimuth(float value) { - ptr_->azimuth = value; - } - float elevation() const { - return ptr_->elevation; - } - void set_elevation(float value) { - ptr_->elevation = value; - } - float linewidth() const { - return ptr_->linewidth; - } - void set_linewidth(float value) { - ptr_->linewidth = value; - } - float glow() const { - return ptr_->glow; - } - void set_glow(float value) { - ptr_->glow = value; - } - float realtime() const { - return ptr_->realtime; - } - void set_realtime(float value) { - ptr_->realtime = value; - } - int offwidth() const { - return ptr_->offwidth; - } - void set_offwidth(int value) { - ptr_->offwidth = value; - } - int offheight() const { - return ptr_->offheight; - } - void set_offheight(int value) { - ptr_->offheight = value; - } - int ellipsoidinertia() const { - return ptr_->ellipsoidinertia; - } - void set_ellipsoidinertia(int value) { - ptr_->ellipsoidinertia = value; - } - int bvactive() const { - return ptr_->bvactive; - } - void set_bvactive(int value) { - ptr_->bvactive = value; - } - - private: - mjVisualGlobal* ptr_; - bool owned_ = false; -}; - -struct MjVisualHeadlight { - ~MjVisualHeadlight(); - MjVisualHeadlight(); - explicit MjVisualHeadlight(mjVisualHeadlight *ptr); - MjVisualHeadlight(const MjVisualHeadlight &); - MjVisualHeadlight &operator=(const MjVisualHeadlight &); - std::unique_ptr copy(); - mjVisualHeadlight* get() const; - void set(mjVisualHeadlight* ptr); - emscripten::val ambient() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); - } - emscripten::val diffuse() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); - } - emscripten::val specular() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); - } - int active() const { - return ptr_->active; - } - void set_active(int value) { - ptr_->active = value; - } - - private: - mjVisualHeadlight* ptr_; - bool owned_ = false; -}; - -struct MjVisualMap { - ~MjVisualMap(); - MjVisualMap(); - explicit MjVisualMap(mjVisualMap *ptr); - MjVisualMap(const MjVisualMap &); - MjVisualMap &operator=(const MjVisualMap &); - std::unique_ptr copy(); - mjVisualMap* get() const; - void set(mjVisualMap* ptr); - float stiffness() const { - return ptr_->stiffness; - } - void set_stiffness(float value) { - ptr_->stiffness = value; - } - float stiffnessrot() const { - return ptr_->stiffnessrot; - } - void set_stiffnessrot(float value) { - ptr_->stiffnessrot = value; - } - float force() const { - return ptr_->force; - } - void set_force(float value) { - ptr_->force = value; - } - float torque() const { - return ptr_->torque; - } - void set_torque(float value) { - ptr_->torque = value; - } - float alpha() const { - return ptr_->alpha; - } - void set_alpha(float value) { - ptr_->alpha = value; - } - float fogstart() const { - return ptr_->fogstart; - } - void set_fogstart(float value) { - ptr_->fogstart = value; - } - float fogend() const { - return ptr_->fogend; - } - void set_fogend(float value) { - ptr_->fogend = value; - } - float znear() const { - return ptr_->znear; - } - void set_znear(float value) { - ptr_->znear = value; - } - float zfar() const { - return ptr_->zfar; - } - void set_zfar(float value) { - ptr_->zfar = value; - } - float haze() const { - return ptr_->haze; - } - void set_haze(float value) { - ptr_->haze = value; - } - float shadowclip() const { - return ptr_->shadowclip; - } - void set_shadowclip(float value) { - ptr_->shadowclip = value; - } - float shadowscale() const { - return ptr_->shadowscale; - } - void set_shadowscale(float value) { - ptr_->shadowscale = value; - } - float actuatortendon() const { - return ptr_->actuatortendon; - } - void set_actuatortendon(float value) { - ptr_->actuatortendon = value; - } - - private: - mjVisualMap* ptr_; - bool owned_ = false; -}; - -struct MjVisualQuality { - ~MjVisualQuality(); - MjVisualQuality(); - explicit MjVisualQuality(mjVisualQuality *ptr); - MjVisualQuality(const MjVisualQuality &); - MjVisualQuality &operator=(const MjVisualQuality &); - std::unique_ptr copy(); - mjVisualQuality* get() const; - void set(mjVisualQuality* ptr); - int shadowsize() const { - return ptr_->shadowsize; - } - void set_shadowsize(int value) { - ptr_->shadowsize = value; - } - int offsamples() const { - return ptr_->offsamples; - } - void set_offsamples(int value) { - ptr_->offsamples = value; - } - int numslices() const { - return ptr_->numslices; - } - void set_numslices(int value) { - ptr_->numslices = value; - } - int numstacks() const { - return ptr_->numstacks; - } - void set_numstacks(int value) { - ptr_->numstacks = value; - } - int numquads() const { - return ptr_->numquads; - } - void set_numquads(int value) { - ptr_->numquads = value; - } - - private: - mjVisualQuality* ptr_; - bool owned_ = false; -}; - -struct MjVisualRgba { - ~MjVisualRgba(); - MjVisualRgba(); - explicit MjVisualRgba(mjVisualRgba *ptr); - MjVisualRgba(const MjVisualRgba &); - MjVisualRgba &operator=(const MjVisualRgba &); - std::unique_ptr copy(); - mjVisualRgba* get() const; - void set(mjVisualRgba* ptr); - emscripten::val fog() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->fog)); - } - emscripten::val haze() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->haze)); - } - emscripten::val force() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->force)); - } - emscripten::val inertia() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->inertia)); - } - emscripten::val joint() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->joint)); - } - emscripten::val actuator() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuator)); - } - emscripten::val actuatornegative() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuatornegative)); - } - emscripten::val actuatorpositive() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuatorpositive)); - } - emscripten::val com() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->com)); - } - emscripten::val camera() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->camera)); - } - emscripten::val light() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->light)); - } - emscripten::val selectpoint() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->selectpoint)); - } - emscripten::val connect() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->connect)); - } - emscripten::val contactpoint() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactpoint)); - } - emscripten::val contactforce() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactforce)); - } - emscripten::val contactfriction() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactfriction)); - } - emscripten::val contacttorque() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->contacttorque)); - } - emscripten::val contactgap() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactgap)); - } - emscripten::val rangefinder() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rangefinder)); - } - emscripten::val constraint() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->constraint)); - } - emscripten::val slidercrank() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->slidercrank)); - } - emscripten::val crankbroken() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->crankbroken)); - } - emscripten::val frustum() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->frustum)); - } - emscripten::val bv() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->bv)); - } - emscripten::val bvactive() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->bvactive)); - } - - private: - mjVisualRgba* ptr_; - bool owned_ = false; -}; - -struct MjVisualScale { - ~MjVisualScale(); - MjVisualScale(); - explicit MjVisualScale(mjVisualScale *ptr); - MjVisualScale(const MjVisualScale &); - MjVisualScale &operator=(const MjVisualScale &); - std::unique_ptr copy(); - mjVisualScale* get() const; - void set(mjVisualScale* ptr); - float forcewidth() const { - return ptr_->forcewidth; - } - void set_forcewidth(float value) { - ptr_->forcewidth = value; - } - float contactwidth() const { - return ptr_->contactwidth; - } - void set_contactwidth(float value) { - ptr_->contactwidth = value; - } - float contactheight() const { - return ptr_->contactheight; - } - void set_contactheight(float value) { - ptr_->contactheight = value; - } - float connect() const { - return ptr_->connect; - } - void set_connect(float value) { - ptr_->connect = value; - } - float com() const { - return ptr_->com; - } - void set_com(float value) { - ptr_->com = value; - } - float camera() const { - return ptr_->camera; - } - void set_camera(float value) { - ptr_->camera = value; - } - float light() const { - return ptr_->light; - } - void set_light(float value) { - ptr_->light = value; - } - float selectpoint() const { - return ptr_->selectpoint; - } - void set_selectpoint(float value) { - ptr_->selectpoint = value; - } - float jointlength() const { - return ptr_->jointlength; - } - void set_jointlength(float value) { - ptr_->jointlength = value; - } - float jointwidth() const { - return ptr_->jointwidth; - } - void set_jointwidth(float value) { - ptr_->jointwidth = value; - } - float actuatorlength() const { - return ptr_->actuatorlength; - } - void set_actuatorlength(float value) { - ptr_->actuatorlength = value; - } - float actuatorwidth() const { - return ptr_->actuatorwidth; - } - void set_actuatorwidth(float value) { - ptr_->actuatorwidth = value; - } - float framelength() const { - return ptr_->framelength; - } - void set_framelength(float value) { - ptr_->framelength = value; - } - float framewidth() const { - return ptr_->framewidth; - } - void set_framewidth(float value) { - ptr_->framewidth = value; - } - float constraint() const { - return ptr_->constraint; - } - void set_constraint(float value) { - ptr_->constraint = value; - } - float slidercrank() const { - return ptr_->slidercrank; - } - void set_slidercrank(float value) { - ptr_->slidercrank = value; - } - float frustum() const { - return ptr_->frustum; - } - void set_frustum(float value) { - ptr_->frustum = value; - } - - private: - mjVisualScale* ptr_; - bool owned_ = false; -}; - -struct MjWarningStat { - ~MjWarningStat(); - MjWarningStat(); - explicit MjWarningStat(mjWarningStat *ptr); - MjWarningStat(const MjWarningStat &); - MjWarningStat &operator=(const MjWarningStat &); - std::unique_ptr copy(); - mjWarningStat* get() const; - void set(mjWarningStat* ptr); - int lastinfo() const { - return ptr_->lastinfo; - } - void set_lastinfo(int value) { - ptr_->lastinfo = value; - } - int number() const { - return ptr_->number; - } - void set_number(int value) { - ptr_->number = value; - } - - private: - mjWarningStat* ptr_; - bool owned_ = false; -}; - -struct MjsAuthored { - explicit MjsAuthored(mjsAuthored *ptr); - mjsAuthored* get() const; - void set(mjsAuthored* ptr); - uint64_t option() const { - return ptr_->option; - } - void set_option(uint64_t value) { - ptr_->option = value; - } - int disableflags() const { - return ptr_->disableflags; - } - void set_disableflags(int value) { - ptr_->disableflags = value; - } - int enableflags() const { - return ptr_->enableflags; - } - void set_enableflags(int value) { - ptr_->enableflags = value; - } - int disableactuator() const { - return ptr_->disableactuator; - } - void set_disableactuator(int value) { - ptr_->disableactuator = value; - } - uint64_t visual_global() const { - return ptr_->visual_global; - } - void set_visual_global(uint64_t value) { - ptr_->visual_global = value; - } - uint64_t visual_quality() const { - return ptr_->visual_quality; - } - void set_visual_quality(uint64_t value) { - ptr_->visual_quality = value; - } - uint64_t visual_headlight() const { - return ptr_->visual_headlight; - } - void set_visual_headlight(uint64_t value) { - ptr_->visual_headlight = value; - } - uint64_t visual_map() const { - return ptr_->visual_map; - } - void set_visual_map(uint64_t value) { - ptr_->visual_map = value; - } - uint64_t visual_scale() const { - return ptr_->visual_scale; - } - void set_visual_scale(uint64_t value) { - ptr_->visual_scale = value; - } - uint64_t visual_rgba() const { - return ptr_->visual_rgba; - } - void set_visual_rgba(uint64_t value) { - ptr_->visual_rgba = value; - } - - private: - mjsAuthored* ptr_; -}; - -struct MjsElement { - explicit MjsElement(mjsElement *ptr); - mjsElement* get() const; - void set(mjsElement* ptr); - mjtObj elemtype() const { - return ptr_->elemtype; - } - void set_elemtype(mjtObj value) { - ptr_->elemtype = value; - } - uint64_t signature() const { - return ptr_->signature; - } - void set_signature(uint64_t value) { - ptr_->signature = value; - } - - private: - mjsElement* ptr_; -}; - -struct MjsOrientation { - explicit MjsOrientation(mjsOrientation *ptr); - mjsOrientation* get() const; - void set(mjsOrientation* ptr); - mjtOrientation type() const { - return ptr_->type; - } - void set_type(mjtOrientation value) { - ptr_->type = value; - } - emscripten::val axisangle() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->axisangle)); - } - emscripten::val xyaxes() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->xyaxes)); - } - emscripten::val zaxis() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->zaxis)); - } - emscripten::val euler() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->euler)); - } - - private: - mjsOrientation* ptr_; -}; - -struct MjvCamera { - ~MjvCamera(); - MjvCamera(); - explicit MjvCamera(mjvCamera *ptr); - MjvCamera(const MjvCamera &); - MjvCamera &operator=(const MjvCamera &); - std::unique_ptr copy(); - mjvCamera* get() const; - void set(mjvCamera* ptr); - int type() const { - return ptr_->type; - } - void set_type(int value) { - ptr_->type = value; - } - int fixedcamid() const { - return ptr_->fixedcamid; - } - void set_fixedcamid(int value) { - ptr_->fixedcamid = value; - } - int trackbodyid() const { - return ptr_->trackbodyid; - } - void set_trackbodyid(int value) { - ptr_->trackbodyid = value; - } - emscripten::val lookat() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->lookat)); - } - mjtNum distance() const { - return ptr_->distance; - } - void set_distance(mjtNum value) { - ptr_->distance = value; - } - mjtNum azimuth() const { - return ptr_->azimuth; - } - void set_azimuth(mjtNum value) { - ptr_->azimuth = value; - } - mjtNum elevation() const { - return ptr_->elevation; - } - void set_elevation(mjtNum value) { - ptr_->elevation = value; - } - int orthographic() const { - return ptr_->orthographic; - } - void set_orthographic(int value) { - ptr_->orthographic = value; - } - - private: - mjvCamera* ptr_; - bool owned_ = false; -}; - -struct MjvFigure { - ~MjvFigure(); - MjvFigure(); - explicit MjvFigure(mjvFigure *ptr); - MjvFigure(const MjvFigure &); - MjvFigure &operator=(const MjvFigure &); - std::unique_ptr copy(); - mjvFigure* get() const; - void set(mjvFigure* ptr); - int flg_legend() const { - return ptr_->flg_legend; - } - void set_flg_legend(int value) { - ptr_->flg_legend = value; - } - emscripten::val flg_ticklabel() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->flg_ticklabel)); - } - int flg_extend() const { - return ptr_->flg_extend; - } - void set_flg_extend(int value) { - ptr_->flg_extend = value; - } - int flg_barplot() const { - return ptr_->flg_barplot; - } - void set_flg_barplot(int value) { - ptr_->flg_barplot = value; - } - int flg_selection() const { - return ptr_->flg_selection; - } - void set_flg_selection(int value) { - ptr_->flg_selection = value; - } - int flg_symmetric() const { - return ptr_->flg_symmetric; - } - void set_flg_symmetric(int value) { - ptr_->flg_symmetric = value; - } - float linewidth() const { - return ptr_->linewidth; - } - void set_linewidth(float value) { - ptr_->linewidth = value; - } - float gridwidth() const { - return ptr_->gridwidth; - } - void set_gridwidth(float value) { - ptr_->gridwidth = value; - } - emscripten::val gridsize() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->gridsize)); - } - emscripten::val gridrgb() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->gridrgb)); - } - emscripten::val figurergba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->figurergba)); - } - emscripten::val panergba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->panergba)); - } - emscripten::val legendrgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->legendrgba)); - } - emscripten::val textrgb() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->textrgb)); - } - emscripten::val linergb() const { - return emscripten::val(emscripten::typed_memory_view(300, reinterpret_cast(ptr_->linergb))); - } - emscripten::val range() const { - return emscripten::val(emscripten::typed_memory_view(4, reinterpret_cast(ptr_->range))); - } - emscripten::val xformat() const { - return emscripten::val(emscripten::typed_memory_view(20, ptr_->xformat)); - } - emscripten::val yformat() const { - return emscripten::val(emscripten::typed_memory_view(20, ptr_->yformat)); - } - emscripten::val minwidth() const { - return emscripten::val(emscripten::typed_memory_view(20, ptr_->minwidth)); - } - emscripten::val title() const { - return emscripten::val(emscripten::typed_memory_view(1000, ptr_->title)); - } - emscripten::val xlabel() const { - return emscripten::val(emscripten::typed_memory_view(100, ptr_->xlabel)); - } - emscripten::val linename() const { - return emscripten::val(emscripten::typed_memory_view(10000, reinterpret_cast(ptr_->linename))); - } - int legendoffset() const { - return ptr_->legendoffset; - } - void set_legendoffset(int value) { - ptr_->legendoffset = value; - } - int subplot() const { - return ptr_->subplot; - } - void set_subplot(int value) { - ptr_->subplot = value; - } - emscripten::val highlight() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->highlight)); - } - int highlightid() const { - return ptr_->highlightid; - } - void set_highlightid(int value) { - ptr_->highlightid = value; - } - float selection() const { - return ptr_->selection; - } - void set_selection(float value) { - ptr_->selection = value; - } - emscripten::val linepnt() const { - return emscripten::val(emscripten::typed_memory_view(100, ptr_->linepnt)); - } - emscripten::val linedata() const { - return emscripten::val(emscripten::typed_memory_view(200200, reinterpret_cast(ptr_->linedata))); - } - emscripten::val xaxispixel() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->xaxispixel)); - } - emscripten::val yaxispixel() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->yaxispixel)); - } - emscripten::val xaxisdata() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->xaxisdata)); - } - emscripten::val yaxisdata() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->yaxisdata)); - } - - private: - mjvFigure* ptr_; - bool owned_ = false; -}; - -struct MjvGLCamera { - ~MjvGLCamera(); - MjvGLCamera(); - explicit MjvGLCamera(mjvGLCamera *ptr); - MjvGLCamera(const MjvGLCamera &); - MjvGLCamera &operator=(const MjvGLCamera &); - std::unique_ptr copy(); - mjvGLCamera* get() const; - void set(mjvGLCamera* ptr); - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val forward() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->forward)); - } - emscripten::val up() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->up)); - } - float frustum_center() const { - return ptr_->frustum_center; - } - void set_frustum_center(float value) { - ptr_->frustum_center = value; - } - float frustum_width() const { - return ptr_->frustum_width; - } - void set_frustum_width(float value) { - ptr_->frustum_width = value; - } - float frustum_bottom() const { - return ptr_->frustum_bottom; - } - void set_frustum_bottom(float value) { - ptr_->frustum_bottom = value; - } - float frustum_top() const { - return ptr_->frustum_top; - } - void set_frustum_top(float value) { - ptr_->frustum_top = value; - } - float frustum_near() const { - return ptr_->frustum_near; - } - void set_frustum_near(float value) { - ptr_->frustum_near = value; - } - float frustum_far() const { - return ptr_->frustum_far; - } - void set_frustum_far(float value) { - ptr_->frustum_far = value; - } - int orthographic() const { - return ptr_->orthographic; - } - void set_orthographic(int value) { - ptr_->orthographic = value; - } - - private: - mjvGLCamera* ptr_; - bool owned_ = false; -}; - -struct MjvGeom { - ~MjvGeom(); - MjvGeom(); - explicit MjvGeom(mjvGeom *ptr); - MjvGeom(const MjvGeom &); - MjvGeom &operator=(const MjvGeom &); - std::unique_ptr copy(); - mjvGeom* get() const; - void set(mjvGeom* ptr); - int type() const { - return ptr_->type; - } - void set_type(int value) { - ptr_->type = value; - } - int dataid() const { - return ptr_->dataid; - } - void set_dataid(int value) { - ptr_->dataid = value; - } - int objtype() const { - return ptr_->objtype; - } - void set_objtype(int value) { - ptr_->objtype = value; - } - int objid() const { - return ptr_->objid; - } - void set_objid(int value) { - ptr_->objid = value; - } - int category() const { - return ptr_->category; - } - void set_category(int value) { - ptr_->category = value; - } - int matid() const { - return ptr_->matid; - } - void set_matid(int value) { - ptr_->matid = value; - } - int texcoord() const { - return ptr_->texcoord; - } - void set_texcoord(int value) { - ptr_->texcoord = value; - } - int segid() const { - return ptr_->segid; - } - void set_segid(int value) { - ptr_->segid = value; - } - emscripten::val size() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val mat() const { - return emscripten::val(emscripten::typed_memory_view(9, ptr_->mat)); - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - float emission() const { - return ptr_->emission; - } - void set_emission(float value) { - ptr_->emission = value; - } - float specular() const { - return ptr_->specular; - } - void set_specular(float value) { - ptr_->specular = value; - } - float shininess() const { - return ptr_->shininess; - } - void set_shininess(float value) { - ptr_->shininess = value; - } - float reflectance() const { - return ptr_->reflectance; - } - void set_reflectance(float value) { - ptr_->reflectance = value; - } - emscripten::val label() const { - return emscripten::val(emscripten::typed_memory_view(100, ptr_->label)); - } - float camdist() const { - return ptr_->camdist; - } - void set_camdist(float value) { - ptr_->camdist = value; - } - float modelrbound() const { - return ptr_->modelrbound; - } - void set_modelrbound(float value) { - ptr_->modelrbound = value; - } - mjtByte transparent() const { - return ptr_->transparent; - } - void set_transparent(mjtByte value) { - ptr_->transparent = value; - } - - private: - mjvGeom* ptr_; - bool owned_ = false; -}; - -struct MjvLight { - ~MjvLight(); - MjvLight(); - explicit MjvLight(mjvLight *ptr); - MjvLight(const MjvLight &); - MjvLight &operator=(const MjvLight &); - std::unique_ptr copy(); - mjvLight* get() const; - void set(mjvLight* ptr); - int id() const { - return ptr_->id; - } - void set_id(int value) { - ptr_->id = value; - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val dir() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->dir)); - } - int type() const { - return ptr_->type; - } - void set_type(int value) { - ptr_->type = value; - } - int texid() const { - return ptr_->texid; - } - void set_texid(int value) { - ptr_->texid = value; - } - emscripten::val attenuation() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->attenuation)); - } - float cutoff() const { - return ptr_->cutoff; - } - void set_cutoff(float value) { - ptr_->cutoff = value; - } - float exponent() const { - return ptr_->exponent; - } - void set_exponent(float value) { - ptr_->exponent = value; - } - emscripten::val ambient() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); - } - emscripten::val diffuse() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); - } - emscripten::val specular() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); - } - mjtByte headlight() const { - return ptr_->headlight; - } - void set_headlight(mjtByte value) { - ptr_->headlight = value; - } - mjtByte castshadow() const { - return ptr_->castshadow; - } - void set_castshadow(mjtByte value) { - ptr_->castshadow = value; - } - float bulbradius() const { - return ptr_->bulbradius; - } - void set_bulbradius(float value) { - ptr_->bulbradius = value; - } - float intensity() const { - return ptr_->intensity; - } - void set_intensity(float value) { - ptr_->intensity = value; - } - float range() const { - return ptr_->range; - } - void set_range(float value) { - ptr_->range = value; - } - - private: - mjvLight* ptr_; - bool owned_ = false; -}; - -struct MjvOption { - ~MjvOption(); - MjvOption(); - explicit MjvOption(mjvOption *ptr); - MjvOption(const MjvOption &); - MjvOption &operator=(const MjvOption &); - std::unique_ptr copy(); - mjvOption* get() const; - void set(mjvOption* ptr); - int label() const { - return ptr_->label; - } - void set_label(int value) { - ptr_->label = value; - } - int frame() const { - return ptr_->frame; - } - void set_frame(int value) { - ptr_->frame = value; - } - emscripten::val geomgroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->geomgroup)); - } - emscripten::val sitegroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->sitegroup)); - } - emscripten::val jointgroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->jointgroup)); - } - emscripten::val tendongroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->tendongroup)); - } - emscripten::val actuatorgroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->actuatorgroup)); - } - emscripten::val flexgroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->flexgroup)); - } - emscripten::val skingroup() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->skingroup)); - } - emscripten::val flags() const { - return emscripten::val(emscripten::typed_memory_view(31, ptr_->flags)); - } - int bvh_depth() const { - return ptr_->bvh_depth; - } - void set_bvh_depth(int value) { - ptr_->bvh_depth = value; - } - int flex_layer() const { - return ptr_->flex_layer; - } - void set_flex_layer(int value) { - ptr_->flex_layer = value; - } - - private: - mjvOption* ptr_; - bool owned_ = false; -}; - -struct MjvPerturb { - ~MjvPerturb(); - MjvPerturb(); - explicit MjvPerturb(mjvPerturb *ptr); - MjvPerturb(const MjvPerturb &); - MjvPerturb &operator=(const MjvPerturb &); - std::unique_ptr copy(); - mjvPerturb* get() const; - void set(mjvPerturb* ptr); - int select() const { - return ptr_->select; - } - void set_select(int value) { - ptr_->select = value; - } - int flexselect() const { - return ptr_->flexselect; - } - void set_flexselect(int value) { - ptr_->flexselect = value; - } - int skinselect() const { - return ptr_->skinselect; - } - void set_skinselect(int value) { - ptr_->skinselect = value; - } - int active() const { - return ptr_->active; - } - void set_active(int value) { - ptr_->active = value; - } - int active2() const { - return ptr_->active2; - } - void set_active2(int value) { - ptr_->active2 = value; - } - emscripten::val refpos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->refpos)); - } - emscripten::val refquat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->refquat)); - } - emscripten::val refselpos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->refselpos)); - } - emscripten::val localpos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->localpos)); - } - mjtNum localmass() const { - return ptr_->localmass; - } - void set_localmass(mjtNum value) { - ptr_->localmass = value; - } - mjtNum scale() const { - return ptr_->scale; - } - void set_scale(mjtNum value) { - ptr_->scale = value; - } - - private: - mjvPerturb* ptr_; - bool owned_ = false; -}; - -struct MjsCompiler { - explicit MjsCompiler(mjsCompiler *ptr); - mjsCompiler* get() const; - void set(mjsCompiler* ptr); - mjtByte autolimits() const { - return ptr_->autolimits; - } - void set_autolimits(mjtByte value) { - ptr_->autolimits = value; - } - double boundmass() const { - return ptr_->boundmass; - } - void set_boundmass(double value) { - ptr_->boundmass = value; - } - double boundinertia() const { - return ptr_->boundinertia; - } - void set_boundinertia(double value) { - ptr_->boundinertia = value; - } - double settotalmass() const { - return ptr_->settotalmass; - } - void set_settotalmass(double value) { - ptr_->settotalmass = value; - } - mjtByte balanceinertia() const { - return ptr_->balanceinertia; - } - void set_balanceinertia(mjtByte value) { - ptr_->balanceinertia = value; - } - mjtByte fitaabb() const { - return ptr_->fitaabb; - } - void set_fitaabb(mjtByte value) { - ptr_->fitaabb = value; - } - mjtByte degree() const { - return ptr_->degree; - } - void set_degree(mjtByte value) { - ptr_->degree = value; - } - emscripten::val eulerseq() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->eulerseq)); - } - mjtByte discardvisual() const { - return ptr_->discardvisual; - } - void set_discardvisual(mjtByte value) { - ptr_->discardvisual = value; - } - mjtByte usethread() const { - return ptr_->usethread; - } - void set_usethread(mjtByte value) { - ptr_->usethread = value; - } - mjtByte fusestatic() const { - return ptr_->fusestatic; - } - void set_fusestatic(mjtByte value) { - ptr_->fusestatic = value; - } - int inertiafromgeom() const { - return ptr_->inertiafromgeom; - } - void set_inertiafromgeom(int value) { - ptr_->inertiafromgeom = value; - } - emscripten::val inertiagrouprange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->inertiagrouprange)); - } - mjtByte saveinertial() const { - return ptr_->saveinertial; - } - void set_saveinertial(mjtByte value) { - ptr_->saveinertial = value; - } - int alignfree() const { - return ptr_->alignfree; - } - void set_alignfree(int value) { - ptr_->alignfree = value; - } - int conflict() const { - return ptr_->conflict; - } - void set_conflict(int value) { - ptr_->conflict = value; - } - mjString meshdir() const { - return (ptr_ && ptr_->meshdir) ? *(ptr_->meshdir) : ""; - } - void set_meshdir(const mjString& value) { - if (ptr_ && ptr_->meshdir) { - *(ptr_->meshdir) = value; - } - } - mjString texturedir() const { - return (ptr_ && ptr_->texturedir) ? *(ptr_->texturedir) : ""; - } - void set_texturedir(const mjString& value) { - if (ptr_ && ptr_->texturedir) { - *(ptr_->texturedir) = value; - } - } - uint64_t authored() const { - return ptr_->authored; - } - void set_authored(uint64_t value) { - ptr_->authored = value; - } - - private: - mjsCompiler* ptr_; - - public: - MjLROpt LRopt; -}; - -struct MjVisual { - ~MjVisual(); - MjVisual(); - explicit MjVisual(mjVisual *ptr); - MjVisual(const MjVisual &); - MjVisual &operator=(const MjVisual &); - std::unique_ptr copy(); - mjVisual* get() const; - void set(mjVisual* ptr); - - private: - mjVisual* ptr_; - bool owned_ = false; - - public: - MjVisualGlobal global; - MjVisualQuality quality; - MjVisualHeadlight headlight; - MjVisualMap map; - MjVisualScale scale; - MjVisualRgba rgba; -}; - -struct MjsEquality { - explicit MjsEquality(mjsEquality *ptr); - mjsEquality* get() const; - void set(mjsEquality* ptr); - mjtEq type() const { - return ptr_->type; - } - void set_type(mjtEq value) { - ptr_->type = value; - } - emscripten::val data() const { - return emscripten::val(emscripten::typed_memory_view(11, ptr_->data)); - } - mjtByte active() const { - return ptr_->active; - } - void set_active(mjtByte value) { - ptr_->active = value; - } - mjString name1() const { - return (ptr_ && ptr_->name1) ? *(ptr_->name1) : ""; - } - void set_name1(const mjString& value) { - if (ptr_ && ptr_->name1) { - *(ptr_->name1) = value; - } - } - mjString name2() const { - return (ptr_ && ptr_->name2) ? *(ptr_->name2) : ""; - } - void set_name2(const mjString& value) { - if (ptr_ && ptr_->name2) { - *(ptr_->name2) = value; - } - } - mjtObj objtype() const { - return ptr_->objtype; - } - void set_objtype(mjtObj value) { - ptr_->objtype = value; - } - emscripten::val solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); - } - emscripten::val solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsEquality* ptr_; - - public: - MjsElement element; -}; - -struct MjsExclude { - explicit MjsExclude(mjsExclude *ptr); - mjsExclude* get() const; - void set(mjsExclude* ptr); - mjString bodyname1() const { - return (ptr_ && ptr_->bodyname1) ? *(ptr_->bodyname1) : ""; - } - void set_bodyname1(const mjString& value) { - if (ptr_ && ptr_->bodyname1) { - *(ptr_->bodyname1) = value; - } - } - mjString bodyname2() const { - return (ptr_ && ptr_->bodyname2) ? *(ptr_->bodyname2) : ""; - } - void set_bodyname2(const mjString& value) { - if (ptr_ && ptr_->bodyname2) { - *(ptr_->bodyname2) = value; - } - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsExclude* ptr_; - - public: - MjsElement element; -}; - -struct MjsFlex { - explicit MjsFlex(mjsFlex *ptr); - mjsFlex* get() const; - void set(mjsFlex* ptr); - int contype() const { - return ptr_->contype; - } - void set_contype(int value) { - ptr_->contype = value; - } - int conaffinity() const { - return ptr_->conaffinity; - } - void set_conaffinity(int value) { - ptr_->conaffinity = value; - } - int condim() const { - return ptr_->condim; - } - void set_condim(int value) { - ptr_->condim = value; - } - int priority() const { - return ptr_->priority; - } - void set_priority(int value) { - ptr_->priority = value; - } - emscripten::val friction() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->friction)); - } - double solmix() const { - return ptr_->solmix; - } - void set_solmix(double value) { - ptr_->solmix = value; - } - emscripten::val solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); - } - emscripten::val solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); - } - double margin() const { - return ptr_->margin; - } - void set_margin(double value) { - ptr_->margin = value; - } - double gap() const { - return ptr_->gap; - } - void set_gap(double value) { - ptr_->gap = value; - } - int dim() const { - return ptr_->dim; - } - void set_dim(int value) { - ptr_->dim = value; - } - double radius() const { - return ptr_->radius; - } - void set_radius(double value) { - ptr_->radius = value; - } - emscripten::val size() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); - } - mjtByte internal() const { - return ptr_->internal; - } - void set_internal(mjtByte value) { - ptr_->internal = value; - } - mjtByte flatskin() const { - return ptr_->flatskin; - } - void set_flatskin(mjtByte value) { - ptr_->flatskin = value; - } - int selfcollide() const { - return ptr_->selfcollide; - } - void set_selfcollide(int value) { - ptr_->selfcollide = value; - } - int passive() const { - return ptr_->passive; - } - void set_passive(int value) { - ptr_->passive = value; - } - int activelayers() const { - return ptr_->activelayers; - } - void set_activelayers(int value) { - ptr_->activelayers = value; - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - double edgestiffness() const { - return ptr_->edgestiffness; - } - void set_edgestiffness(double value) { - ptr_->edgestiffness = value; - } - double edgedamping() const { - return ptr_->edgedamping; - } - void set_edgedamping(double value) { - ptr_->edgedamping = value; - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - double young() const { - return ptr_->young; - } - void set_young(double value) { - ptr_->young = value; - } - double poisson() const { - return ptr_->poisson; - } - void set_poisson(double value) { - ptr_->poisson = value; - } - double damping() const { - return ptr_->damping; - } - void set_damping(double value) { - ptr_->damping = value; - } - double thickness() const { - return ptr_->thickness; - } - void set_thickness(double value) { - ptr_->thickness = value; - } - int elastic2d() const { - return ptr_->elastic2d; - } - void set_elastic2d(int value) { - ptr_->elastic2d = value; - } - emscripten::val cellcount() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->cellcount)); - } - int order() const { - return ptr_->order; - } - void set_order(int value) { - ptr_->order = value; - } - mjStringVec &nodebody() const { - return *(ptr_->nodebody); - } - mjStringVec &vertbody() const { - return *(ptr_->vertbody); - } - mjDoubleVec &node() const { - return *(ptr_->node); - } - mjDoubleVec &vert() const { - return *(ptr_->vert); - } - mjIntVec &elem() const { - return *(ptr_->elem); - } - mjFloatVec &texcoord() const { - return *(ptr_->texcoord); - } - mjIntVec &elemtexcoord() const { - return *(ptr_->elemtexcoord); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsFlex* ptr_; - - public: - MjsElement element; -}; - -struct MjsHField { - explicit MjsHField(mjsHField *ptr); - mjsHField* get() const; - void set(mjsHField* ptr); - mjString content_type() const { - return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; - } - void set_content_type(const mjString& value) { - if (ptr_ && ptr_->content_type) { - *(ptr_->content_type) = value; - } - } - mjString file() const { - return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; - } - void set_file(const mjString& value) { - if (ptr_ && ptr_->file) { - *(ptr_->file) = value; - } - } - emscripten::val size() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->size)); - } - int nrow() const { - return ptr_->nrow; - } - void set_nrow(int value) { - ptr_->nrow = value; - } - int ncol() const { - return ptr_->ncol; - } - void set_ncol(int value) { - ptr_->ncol = value; - } - mjFloatVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsHField* ptr_; - - public: - MjsElement element; -}; - -struct MjsJoint { - explicit MjsJoint(mjsJoint *ptr); - mjsJoint* get() const; - void set(mjsJoint* ptr); - mjtJoint type() const { - return ptr_->type; - } - void set_type(mjtJoint value) { - ptr_->type = value; - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val axis() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->axis)); - } - double ref() const { - return ptr_->ref; - } - void set_ref(double value) { - ptr_->ref = value; - } - int align() const { - return ptr_->align; - } - void set_align(int value) { - ptr_->align = value; - } - emscripten::val stiffness() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->stiffness)); - } - double springref() const { - return ptr_->springref; - } - void set_springref(double value) { - ptr_->springref = value; - } - emscripten::val springdamper() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->springdamper)); - } - int limited() const { - return ptr_->limited; - } - void set_limited(int value) { - ptr_->limited = value; - } - emscripten::val range() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->range)); - } - double margin() const { - return ptr_->margin; - } - void set_margin(double value) { - ptr_->margin = value; - } - emscripten::val solref_limit() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_limit)); - } - emscripten::val solimp_limit() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_limit)); - } - int actfrclimited() const { - return ptr_->actfrclimited; - } - void set_actfrclimited(int value) { - ptr_->actfrclimited = value; - } - emscripten::val actfrcrange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->actfrcrange)); - } - double armature() const { - return ptr_->armature; - } - void set_armature(double value) { - ptr_->armature = value; - } - emscripten::val damping() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); - } - double frictionloss() const { - return ptr_->frictionloss; - } - void set_frictionloss(double value) { - ptr_->frictionloss = value; - } - emscripten::val solref_friction() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_friction)); - } - emscripten::val solimp_friction() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_friction)); - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - mjtByte actgravcomp() const { - return ptr_->actgravcomp; - } - void set_actgravcomp(mjtByte value) { - ptr_->actgravcomp = value; - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsJoint* ptr_; - - public: - MjsElement element; -}; - -struct MjsKey { - explicit MjsKey(mjsKey *ptr); - mjsKey* get() const; - void set(mjsKey* ptr); - double time() const { - return ptr_->time; - } - void set_time(double value) { - ptr_->time = value; - } - mjDoubleVec &qpos() const { - return *(ptr_->qpos); - } - mjDoubleVec &qvel() const { - return *(ptr_->qvel); - } - mjDoubleVec &act() const { - return *(ptr_->act); - } - mjDoubleVec &mpos() const { - return *(ptr_->mpos); - } - mjDoubleVec &mquat() const { - return *(ptr_->mquat); - } - mjDoubleVec &ctrl() const { - return *(ptr_->ctrl); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsKey* ptr_; - - public: - MjsElement element; -}; - -struct MjsLight { - explicit MjsLight(mjsLight *ptr); - mjsLight* get() const; - void set(mjsLight* ptr); - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val dir() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->dir)); - } - mjtCamLight mode() const { - return ptr_->mode; - } - void set_mode(mjtCamLight value) { - ptr_->mode = value; - } - mjString targetbody() const { - return (ptr_ && ptr_->targetbody) ? *(ptr_->targetbody) : ""; - } - void set_targetbody(const mjString& value) { - if (ptr_ && ptr_->targetbody) { - *(ptr_->targetbody) = value; - } - } - mjtByte active() const { - return ptr_->active; - } - void set_active(mjtByte value) { - ptr_->active = value; - } - mjtLightType type() const { - return ptr_->type; - } - void set_type(mjtLightType value) { - ptr_->type = value; - } - mjString texture() const { - return (ptr_ && ptr_->texture) ? *(ptr_->texture) : ""; - } - void set_texture(const mjString& value) { - if (ptr_ && ptr_->texture) { - *(ptr_->texture) = value; - } - } - mjtByte castshadow() const { - return ptr_->castshadow; - } - void set_castshadow(mjtByte value) { - ptr_->castshadow = value; - } - float bulbradius() const { - return ptr_->bulbradius; - } - void set_bulbradius(float value) { - ptr_->bulbradius = value; - } - float intensity() const { - return ptr_->intensity; - } - void set_intensity(float value) { - ptr_->intensity = value; - } - float range() const { - return ptr_->range; - } - void set_range(float value) { - ptr_->range = value; - } - emscripten::val attenuation() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->attenuation)); - } - float cutoff() const { - return ptr_->cutoff; - } - void set_cutoff(float value) { - ptr_->cutoff = value; - } - float exponent() const { - return ptr_->exponent; - } - void set_exponent(float value) { - ptr_->exponent = value; - } - emscripten::val ambient() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); - } - emscripten::val diffuse() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); - } - emscripten::val specular() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsLight* ptr_; - - public: - MjsElement element; -}; - -struct MjsMaterial { - explicit MjsMaterial(mjsMaterial *ptr); - mjsMaterial* get() const; - void set(mjsMaterial* ptr); - mjStringVec &textures() const { - return *(ptr_->textures); - } - mjtByte texuniform() const { - return ptr_->texuniform; - } - void set_texuniform(mjtByte value) { - ptr_->texuniform = value; - } - emscripten::val texrepeat() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->texrepeat)); - } - float emission() const { - return ptr_->emission; - } - void set_emission(float value) { - ptr_->emission = value; - } - float specular() const { - return ptr_->specular; - } - void set_specular(float value) { - ptr_->specular = value; - } - float shininess() const { - return ptr_->shininess; - } - void set_shininess(float value) { - ptr_->shininess = value; - } - float reflectance() const { - return ptr_->reflectance; - } - void set_reflectance(float value) { - ptr_->reflectance = value; - } - float metallic() const { - return ptr_->metallic; - } - void set_metallic(float value) { - ptr_->metallic = value; - } - float roughness() const { - return ptr_->roughness; - } - void set_roughness(float value) { - ptr_->roughness = value; - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsMaterial* ptr_; - - public: - MjsElement element; -}; - -struct MjsNumeric { - explicit MjsNumeric(mjsNumeric *ptr); - mjsNumeric* get() const; - void set(mjsNumeric* ptr); - mjDoubleVec &data() const { - return *(ptr_->data); - } - int size() const { - return ptr_->size; - } - void set_size(int value) { - ptr_->size = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsNumeric* ptr_; - - public: - MjsElement element; -}; - -struct MjsPair { - explicit MjsPair(mjsPair *ptr); - mjsPair* get() const; - void set(mjsPair* ptr); - mjString geomname1() const { - return (ptr_ && ptr_->geomname1) ? *(ptr_->geomname1) : ""; - } - void set_geomname1(const mjString& value) { - if (ptr_ && ptr_->geomname1) { - *(ptr_->geomname1) = value; - } - } - mjString geomname2() const { - return (ptr_ && ptr_->geomname2) ? *(ptr_->geomname2) : ""; - } - void set_geomname2(const mjString& value) { - if (ptr_ && ptr_->geomname2) { - *(ptr_->geomname2) = value; - } - } - int condim() const { - return ptr_->condim; - } - void set_condim(int value) { - ptr_->condim = value; - } - emscripten::val solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); - } - emscripten::val solreffriction() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solreffriction)); - } - emscripten::val solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); - } - double margin() const { - return ptr_->margin; - } - void set_margin(double value) { - ptr_->margin = value; - } - double gap() const { - return ptr_->gap; - } - void set_gap(double value) { - ptr_->gap = value; - } - emscripten::val friction() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->friction)); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsPair* ptr_; - - public: - MjsElement element; -}; - -struct MjsPlugin { - explicit MjsPlugin(mjsPlugin *ptr); - mjsPlugin* get() const; - void set(mjsPlugin* ptr); - mjString name() const { - return (ptr_ && ptr_->name) ? *(ptr_->name) : ""; - } - void set_name(const mjString& value) { - if (ptr_ && ptr_->name) { - *(ptr_->name) = value; - } - } - mjString plugin_name() const { - return (ptr_ && ptr_->plugin_name) ? *(ptr_->plugin_name) : ""; - } - void set_plugin_name(const mjString& value) { - if (ptr_ && ptr_->plugin_name) { - *(ptr_->plugin_name) = value; - } - } - mjtByte active() const { - return ptr_->active; - } - void set_active(mjtByte value) { - ptr_->active = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsPlugin* ptr_; - - public: - MjsElement element; -}; - -struct MjsSkin { - explicit MjsSkin(mjsSkin *ptr); - mjsSkin* get() const; - void set(mjsSkin* ptr); - mjString file() const { - return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; - } - void set_file(const mjString& value) { - if (ptr_ && ptr_->file) { - *(ptr_->file) = value; - } - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - float inflate() const { - return ptr_->inflate; - } - void set_inflate(float value) { - ptr_->inflate = value; - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - mjFloatVec &vert() const { - return *(ptr_->vert); - } - mjFloatVec &texcoord() const { - return *(ptr_->texcoord); - } - mjIntVec &face() const { - return *(ptr_->face); - } - mjStringVec &bodyname() const { - return *(ptr_->bodyname); - } - mjFloatVec &bindpos() const { - return *(ptr_->bindpos); - } - mjFloatVec &bindquat() const { - return *(ptr_->bindquat); - } - mjIntVecVec &vertid() const { - return *(ptr_->vertid); - } - mjFloatVecVec &vertweight() const { - return *(ptr_->vertweight); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsSkin* ptr_; - - public: - MjsElement element; -}; - -struct MjsTendon { - explicit MjsTendon(mjsTendon *ptr); - mjsTendon* get() const; - void set(mjsTendon* ptr); - emscripten::val stiffness() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->stiffness)); - } - emscripten::val springlength() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->springlength)); - } - emscripten::val damping() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); - } - double frictionloss() const { - return ptr_->frictionloss; - } - void set_frictionloss(double value) { - ptr_->frictionloss = value; - } - emscripten::val solref_friction() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_friction)); - } - emscripten::val solimp_friction() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_friction)); - } - double armature() const { - return ptr_->armature; - } - void set_armature(double value) { - ptr_->armature = value; - } - int limited() const { - return ptr_->limited; - } - void set_limited(int value) { - ptr_->limited = value; - } - int actfrclimited() const { - return ptr_->actfrclimited; - } - void set_actfrclimited(int value) { - ptr_->actfrclimited = value; - } - emscripten::val range() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->range)); - } - emscripten::val actfrcrange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->actfrcrange)); - } - double margin() const { - return ptr_->margin; - } - void set_margin(double value) { - ptr_->margin = value; - } - emscripten::val solref_limit() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_limit)); - } - emscripten::val solimp_limit() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_limit)); - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - double width() const { - return ptr_->width; - } - void set_width(double value) { - ptr_->width = value; - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsTendon* ptr_; - - public: - MjsElement element; -}; - -struct MjsText { - explicit MjsText(mjsText *ptr); - mjsText* get() const; - void set(mjsText* ptr); - mjString data() const { - return (ptr_ && ptr_->data) ? *(ptr_->data) : ""; - } - void set_data(const mjString& value) { - if (ptr_ && ptr_->data) { - *(ptr_->data) = value; - } - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsText* ptr_; - - public: - MjsElement element; -}; - -struct MjsTexture { - explicit MjsTexture(mjsTexture *ptr); - mjsTexture* get() const; - void set(mjsTexture* ptr); - mjtTexture type() const { - return ptr_->type; - } - void set_type(mjtTexture value) { - ptr_->type = value; - } - mjtColorSpace colorspace() const { - return ptr_->colorspace; - } - void set_colorspace(mjtColorSpace value) { - ptr_->colorspace = value; - } - int builtin() const { - return ptr_->builtin; - } - void set_builtin(int value) { - ptr_->builtin = value; - } - int mark() const { - return ptr_->mark; - } - void set_mark(int value) { - ptr_->mark = value; - } - emscripten::val rgb1() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->rgb1)); - } - emscripten::val rgb2() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->rgb2)); - } - emscripten::val markrgb() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->markrgb)); - } - double random() const { - return ptr_->random; - } - void set_random(double value) { - ptr_->random = value; - } - int height() const { - return ptr_->height; - } - void set_height(int value) { - ptr_->height = value; - } - int width() const { - return ptr_->width; - } - void set_width(int value) { - ptr_->width = value; - } - int nchannel() const { - return ptr_->nchannel; - } - void set_nchannel(int value) { - ptr_->nchannel = value; - } - mjString content_type() const { - return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; - } - void set_content_type(const mjString& value) { - if (ptr_ && ptr_->content_type) { - *(ptr_->content_type) = value; - } - } - mjString file() const { - return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; - } - void set_file(const mjString& value) { - if (ptr_ && ptr_->file) { - *(ptr_->file) = value; - } - } - emscripten::val gridsize() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->gridsize)); - } - emscripten::val gridlayout() const { - return emscripten::val(emscripten::typed_memory_view(12, ptr_->gridlayout)); - } - mjStringVec &cubefiles() const { - return *(ptr_->cubefiles); - } - std::vector &data() const { - return *(reinterpret_cast*>(ptr_->data)); - } - mjtByte hflip() const { - return ptr_->hflip; - } - void set_hflip(mjtByte value) { - ptr_->hflip = value; - } - mjtByte vflip() const { - return ptr_->vflip; - } - void set_vflip(mjtByte value) { - ptr_->vflip = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsTexture* ptr_; - - public: - MjsElement element; -}; - -struct MjsTuple { - explicit MjsTuple(mjsTuple *ptr); - mjsTuple* get() const; - void set(mjsTuple* ptr); - mjIntVec &objtype() const { - return *(ptr_->objtype); - } - mjStringVec &objname() const { - return *(ptr_->objname); - } - mjDoubleVec &objprm() const { - return *(ptr_->objprm); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsTuple* ptr_; - - public: - MjsElement element; -}; - -struct MjsWrap { - explicit MjsWrap(mjsWrap *ptr); - mjsWrap* get() const; - void set(mjsWrap* ptr); - mjtWrap type() const { - return ptr_->type; - } - void set_type(mjtWrap value) { - ptr_->type = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsWrap* ptr_; - - public: - MjsElement element; -}; - -struct MjsCamera { - explicit MjsCamera(mjsCamera *ptr); - mjsCamera* get() const; - void set(mjsCamera* ptr); - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val quat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); - } - mjtCamLight mode() const { - return ptr_->mode; - } - void set_mode(mjtCamLight value) { - ptr_->mode = value; - } - mjString targetbody() const { - return (ptr_ && ptr_->targetbody) ? *(ptr_->targetbody) : ""; - } - void set_targetbody(const mjString& value) { - if (ptr_ && ptr_->targetbody) { - *(ptr_->targetbody) = value; - } - } - mjtProjection proj() const { - return ptr_->proj; - } - void set_proj(mjtProjection value) { - ptr_->proj = value; - } - emscripten::val resolution() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->resolution)); - } - int output() const { - return ptr_->output; - } - void set_output(int value) { - ptr_->output = value; - } - double fovy() const { - return ptr_->fovy; - } - void set_fovy(double value) { - ptr_->fovy = value; - } - double ipd() const { - return ptr_->ipd; - } - void set_ipd(double value) { - ptr_->ipd = value; - } - emscripten::val intrinsic() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->intrinsic)); - } - emscripten::val sensor_size() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->sensor_size)); - } - emscripten::val focal_length() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->focal_length)); - } - emscripten::val focal_pixel() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->focal_pixel)); - } - emscripten::val principal_length() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->principal_length)); - } - emscripten::val principal_pixel() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->principal_pixel)); - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsCamera* ptr_; - - public: - MjsElement element; - MjsOrientation alt; -}; - -struct MjsFrame { - explicit MjsFrame(mjsFrame *ptr); - mjsFrame* get() const; - void set(mjsFrame* ptr); - mjString childclass() const { - return (ptr_ && ptr_->childclass) ? *(ptr_->childclass) : ""; - } - void set_childclass(const mjString& value) { - if (ptr_ && ptr_->childclass) { - *(ptr_->childclass) = value; - } - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val quat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsFrame* ptr_; - - public: - MjsElement element; - MjsOrientation alt; -}; - -struct MjsSite { - explicit MjsSite(mjsSite *ptr); - mjsSite* get() const; - void set(mjsSite* ptr); - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val quat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); - } - emscripten::val fromto() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->fromto)); - } - emscripten::val size() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); - } - mjtGeom type() const { - return ptr_->type; - } - void set_type(mjtGeom value) { - ptr_->type = value; - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsSite* ptr_; - - public: - MjsElement element; - MjsOrientation alt; -}; - -struct MjModel { - ~MjModel(); - explicit MjModel(mjModel *ptr); - MjModel(const MjModel &); - std::unique_ptr copy(); - mjModel* get() const; - void set(mjModel* ptr); - int nq() const { - return static_cast(ptr_->nq); - } - void set_nq(int value) { - ptr_->nq = static_cast(value); - } - int nv() const { - return static_cast(ptr_->nv); - } - void set_nv(int value) { - ptr_->nv = static_cast(value); - } - int nu() const { - return static_cast(ptr_->nu); - } - void set_nu(int value) { - ptr_->nu = static_cast(value); - } - int na() const { - return static_cast(ptr_->na); - } - void set_na(int value) { - ptr_->na = static_cast(value); - } - int nbody() const { - return static_cast(ptr_->nbody); - } - void set_nbody(int value) { - ptr_->nbody = static_cast(value); - } - int nbvh() const { - return static_cast(ptr_->nbvh); - } - void set_nbvh(int value) { - ptr_->nbvh = static_cast(value); - } - int nbvhstatic() const { - return static_cast(ptr_->nbvhstatic); - } - void set_nbvhstatic(int value) { - ptr_->nbvhstatic = static_cast(value); - } - int nbvhdynamic() const { - return static_cast(ptr_->nbvhdynamic); - } - void set_nbvhdynamic(int value) { - ptr_->nbvhdynamic = static_cast(value); - } - int noct() const { - return static_cast(ptr_->noct); - } - void set_noct(int value) { - ptr_->noct = static_cast(value); - } - int njnt() const { - return static_cast(ptr_->njnt); - } - void set_njnt(int value) { - ptr_->njnt = static_cast(value); - } - int ntree() const { - return static_cast(ptr_->ntree); - } - void set_ntree(int value) { - ptr_->ntree = static_cast(value); - } - int nM() const { - return static_cast(ptr_->nM); - } - void set_nM(int value) { - ptr_->nM = static_cast(value); - } - int nB() const { - return static_cast(ptr_->nB); - } - void set_nB(int value) { - ptr_->nB = static_cast(value); - } - int nC() const { - return static_cast(ptr_->nC); - } - void set_nC(int value) { - ptr_->nC = static_cast(value); - } - int nD() const { - return static_cast(ptr_->nD); - } - void set_nD(int value) { - ptr_->nD = static_cast(value); - } - int ngeom() const { - return static_cast(ptr_->ngeom); - } - void set_ngeom(int value) { - ptr_->ngeom = static_cast(value); - } - int nsite() const { - return static_cast(ptr_->nsite); - } - void set_nsite(int value) { - ptr_->nsite = static_cast(value); - } - int ncam() const { - return static_cast(ptr_->ncam); - } - void set_ncam(int value) { - ptr_->ncam = static_cast(value); - } - int nlight() const { - return static_cast(ptr_->nlight); - } - void set_nlight(int value) { - ptr_->nlight = static_cast(value); - } - int nflex() const { - return static_cast(ptr_->nflex); - } - void set_nflex(int value) { - ptr_->nflex = static_cast(value); - } - int nflexnode() const { - return static_cast(ptr_->nflexnode); - } - void set_nflexnode(int value) { - ptr_->nflexnode = static_cast(value); - } - int nflexvert() const { - return static_cast(ptr_->nflexvert); - } - void set_nflexvert(int value) { - ptr_->nflexvert = static_cast(value); - } - int nflexedge() const { - return static_cast(ptr_->nflexedge); - } - void set_nflexedge(int value) { - ptr_->nflexedge = static_cast(value); - } - int nflexelem() const { - return static_cast(ptr_->nflexelem); - } - void set_nflexelem(int value) { - ptr_->nflexelem = static_cast(value); - } - int nflexelemdata() const { - return static_cast(ptr_->nflexelemdata); - } - void set_nflexelemdata(int value) { - ptr_->nflexelemdata = static_cast(value); - } - int nflexstiffness() const { - return static_cast(ptr_->nflexstiffness); - } - void set_nflexstiffness(int value) { - ptr_->nflexstiffness = static_cast(value); - } - int nflexbending() const { - return static_cast(ptr_->nflexbending); - } - void set_nflexbending(int value) { - ptr_->nflexbending = static_cast(value); - } - int nflexelemedge() const { - return static_cast(ptr_->nflexelemedge); - } - void set_nflexelemedge(int value) { - ptr_->nflexelemedge = static_cast(value); - } - int nflexshelldata() const { - return static_cast(ptr_->nflexshelldata); - } - void set_nflexshelldata(int value) { - ptr_->nflexshelldata = static_cast(value); - } - int nflexevpair() const { - return static_cast(ptr_->nflexevpair); - } - void set_nflexevpair(int value) { - ptr_->nflexevpair = static_cast(value); - } - int nflextexcoord() const { - return static_cast(ptr_->nflextexcoord); - } - void set_nflextexcoord(int value) { - ptr_->nflextexcoord = static_cast(value); - } - int nJfe() const { - return static_cast(ptr_->nJfe); - } - void set_nJfe(int value) { - ptr_->nJfe = static_cast(value); - } - int nJfv() const { - return static_cast(ptr_->nJfv); - } - void set_nJfv(int value) { - ptr_->nJfv = static_cast(value); - } - int nmesh() const { - return static_cast(ptr_->nmesh); - } - void set_nmesh(int value) { - ptr_->nmesh = static_cast(value); - } - int nmeshvert() const { - return static_cast(ptr_->nmeshvert); - } - void set_nmeshvert(int value) { - ptr_->nmeshvert = static_cast(value); - } - int nmeshnormal() const { - return static_cast(ptr_->nmeshnormal); - } - void set_nmeshnormal(int value) { - ptr_->nmeshnormal = static_cast(value); - } - int nmeshtexcoord() const { - return static_cast(ptr_->nmeshtexcoord); - } - void set_nmeshtexcoord(int value) { - ptr_->nmeshtexcoord = static_cast(value); - } - int nmeshface() const { - return static_cast(ptr_->nmeshface); - } - void set_nmeshface(int value) { - ptr_->nmeshface = static_cast(value); - } - int nmeshgraph() const { - return static_cast(ptr_->nmeshgraph); - } - void set_nmeshgraph(int value) { - ptr_->nmeshgraph = static_cast(value); - } - int nmeshpoly() const { - return static_cast(ptr_->nmeshpoly); - } - void set_nmeshpoly(int value) { - ptr_->nmeshpoly = static_cast(value); - } - int nmeshpolyvert() const { - return static_cast(ptr_->nmeshpolyvert); - } - void set_nmeshpolyvert(int value) { - ptr_->nmeshpolyvert = static_cast(value); - } - int nmeshpolymap() const { - return static_cast(ptr_->nmeshpolymap); - } - void set_nmeshpolymap(int value) { - ptr_->nmeshpolymap = static_cast(value); - } - int nskin() const { - return static_cast(ptr_->nskin); - } - void set_nskin(int value) { - ptr_->nskin = static_cast(value); - } - int nskinvert() const { - return static_cast(ptr_->nskinvert); - } - void set_nskinvert(int value) { - ptr_->nskinvert = static_cast(value); - } - int nskintexvert() const { - return static_cast(ptr_->nskintexvert); - } - void set_nskintexvert(int value) { - ptr_->nskintexvert = static_cast(value); - } - int nskinface() const { - return static_cast(ptr_->nskinface); - } - void set_nskinface(int value) { - ptr_->nskinface = static_cast(value); - } - int nskinbone() const { - return static_cast(ptr_->nskinbone); - } - void set_nskinbone(int value) { - ptr_->nskinbone = static_cast(value); - } - int nskinbonevert() const { - return static_cast(ptr_->nskinbonevert); - } - void set_nskinbonevert(int value) { - ptr_->nskinbonevert = static_cast(value); - } - int nhfield() const { - return static_cast(ptr_->nhfield); - } - void set_nhfield(int value) { - ptr_->nhfield = static_cast(value); - } - int nhfielddata() const { - return static_cast(ptr_->nhfielddata); - } - void set_nhfielddata(int value) { - ptr_->nhfielddata = static_cast(value); - } - int ntex() const { - return static_cast(ptr_->ntex); - } - void set_ntex(int value) { - ptr_->ntex = static_cast(value); - } - int ntexdata() const { - return static_cast(ptr_->ntexdata); - } - void set_ntexdata(int value) { - ptr_->ntexdata = static_cast(value); - } - int nmat() const { - return static_cast(ptr_->nmat); - } - void set_nmat(int value) { - ptr_->nmat = static_cast(value); - } - int npair() const { - return static_cast(ptr_->npair); - } - void set_npair(int value) { - ptr_->npair = static_cast(value); - } - int nexclude() const { - return static_cast(ptr_->nexclude); - } - void set_nexclude(int value) { - ptr_->nexclude = static_cast(value); - } - int neq() const { - return static_cast(ptr_->neq); - } - void set_neq(int value) { - ptr_->neq = static_cast(value); - } - int ntendon() const { - return static_cast(ptr_->ntendon); - } - void set_ntendon(int value) { - ptr_->ntendon = static_cast(value); - } - int nJten() const { - return static_cast(ptr_->nJten); - } - void set_nJten(int value) { - ptr_->nJten = static_cast(value); - } - int nwrap() const { - return static_cast(ptr_->nwrap); - } - void set_nwrap(int value) { - ptr_->nwrap = static_cast(value); - } - int nsensor() const { - return static_cast(ptr_->nsensor); - } - void set_nsensor(int value) { - ptr_->nsensor = static_cast(value); - } - int nnumeric() const { - return static_cast(ptr_->nnumeric); - } - void set_nnumeric(int value) { - ptr_->nnumeric = static_cast(value); - } - int nnumericdata() const { - return static_cast(ptr_->nnumericdata); - } - void set_nnumericdata(int value) { - ptr_->nnumericdata = static_cast(value); - } - int ntext() const { - return static_cast(ptr_->ntext); - } - void set_ntext(int value) { - ptr_->ntext = static_cast(value); - } - int ntextdata() const { - return static_cast(ptr_->ntextdata); - } - void set_ntextdata(int value) { - ptr_->ntextdata = static_cast(value); - } - int ntuple() const { - return static_cast(ptr_->ntuple); - } - void set_ntuple(int value) { - ptr_->ntuple = static_cast(value); - } - int ntupledata() const { - return static_cast(ptr_->ntupledata); - } - void set_ntupledata(int value) { - ptr_->ntupledata = static_cast(value); - } - int nkey() const { - return static_cast(ptr_->nkey); - } - void set_nkey(int value) { - ptr_->nkey = static_cast(value); - } - int nmocap() const { - return static_cast(ptr_->nmocap); - } - void set_nmocap(int value) { - ptr_->nmocap = static_cast(value); - } - int nplugin() const { - return static_cast(ptr_->nplugin); - } - void set_nplugin(int value) { - ptr_->nplugin = static_cast(value); - } - int npluginattr() const { - return static_cast(ptr_->npluginattr); - } - void set_npluginattr(int value) { - ptr_->npluginattr = static_cast(value); - } - int nuser_body() const { - return static_cast(ptr_->nuser_body); - } - void set_nuser_body(int value) { - ptr_->nuser_body = static_cast(value); - } - int nuser_jnt() const { - return static_cast(ptr_->nuser_jnt); - } - void set_nuser_jnt(int value) { - ptr_->nuser_jnt = static_cast(value); - } - int nuser_geom() const { - return static_cast(ptr_->nuser_geom); - } - void set_nuser_geom(int value) { - ptr_->nuser_geom = static_cast(value); - } - int nuser_site() const { - return static_cast(ptr_->nuser_site); - } - void set_nuser_site(int value) { - ptr_->nuser_site = static_cast(value); - } - int nuser_cam() const { - return static_cast(ptr_->nuser_cam); - } - void set_nuser_cam(int value) { - ptr_->nuser_cam = static_cast(value); - } - int nuser_tendon() const { - return static_cast(ptr_->nuser_tendon); - } - void set_nuser_tendon(int value) { - ptr_->nuser_tendon = static_cast(value); - } - int nuser_actuator() const { - return static_cast(ptr_->nuser_actuator); - } - void set_nuser_actuator(int value) { - ptr_->nuser_actuator = static_cast(value); - } - int nuser_sensor() const { - return static_cast(ptr_->nuser_sensor); - } - void set_nuser_sensor(int value) { - ptr_->nuser_sensor = static_cast(value); - } - int nnames() const { - return static_cast(ptr_->nnames); - } - void set_nnames(int value) { - ptr_->nnames = static_cast(value); - } - int npaths() const { - return static_cast(ptr_->npaths); - } - void set_npaths(int value) { - ptr_->npaths = static_cast(value); - } - int nnames_map() const { - return static_cast(ptr_->nnames_map); - } - void set_nnames_map(int value) { - ptr_->nnames_map = static_cast(value); - } - int nJmom() const { - return static_cast(ptr_->nJmom); - } - void set_nJmom(int value) { - ptr_->nJmom = static_cast(value); - } - int ngravcomp() const { - return static_cast(ptr_->ngravcomp); - } - void set_ngravcomp(int value) { - ptr_->ngravcomp = static_cast(value); - } - int nemax() const { - return static_cast(ptr_->nemax); - } - void set_nemax(int value) { - ptr_->nemax = static_cast(value); - } - int njmax() const { - return static_cast(ptr_->njmax); - } - void set_njmax(int value) { - ptr_->njmax = static_cast(value); - } - int nconmax() const { - return static_cast(ptr_->nconmax); - } - void set_nconmax(int value) { - ptr_->nconmax = static_cast(value); - } - int nuserdata() const { - return static_cast(ptr_->nuserdata); - } - void set_nuserdata(int value) { - ptr_->nuserdata = static_cast(value); - } - int nsensordata() const { - return static_cast(ptr_->nsensordata); - } - void set_nsensordata(int value) { - ptr_->nsensordata = static_cast(value); - } - int npluginstate() const { - return static_cast(ptr_->npluginstate); - } - void set_npluginstate(int value) { - ptr_->npluginstate = static_cast(value); - } - int nhistory() const { - return static_cast(ptr_->nhistory); - } - void set_nhistory(int value) { - ptr_->nhistory = static_cast(value); - } - int narena() const { - return static_cast(ptr_->narena); - } - void set_narena(int value) { - ptr_->narena = static_cast(value); - } - int nbuffer() const { - return static_cast(ptr_->nbuffer); - } - void set_nbuffer(int value) { - ptr_->nbuffer = static_cast(value); - } - emscripten::val buffer() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbuffer, static_cast(ptr_->buffer))); - } - emscripten::val qpos0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nq, ptr_->qpos0)); - } - emscripten::val qpos_spring() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nq, ptr_->qpos_spring)); - } - emscripten::val body_parentid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_parentid)); - } - emscripten::val body_rootid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_rootid)); - } - emscripten::val body_weldid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_weldid)); - } - emscripten::val body_mocapid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_mocapid)); - } - emscripten::val body_jntnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_jntnum)); - } - emscripten::val body_jntadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_jntadr)); - } - emscripten::val body_dofnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_dofnum)); - } - emscripten::val body_dofadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_dofadr)); - } - emscripten::val body_treeid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_treeid)); - } - emscripten::val body_geomnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_geomnum)); - } - emscripten::val body_geomadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_geomadr)); - } - emscripten::val body_simple() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_simple)); - } - emscripten::val body_sameframe() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_sameframe)); - } - emscripten::val body_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_pos)); - } - emscripten::val body_quat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 4, ptr_->body_quat)); - } - emscripten::val body_ipos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_ipos)); - } - emscripten::val body_iquat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 4, ptr_->body_iquat)); - } - emscripten::val body_mass() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_mass)); - } - emscripten::val body_subtreemass() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_subtreemass)); - } - emscripten::val body_inertia() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_inertia)); - } - emscripten::val body_invweight0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 2, ptr_->body_invweight0)); - } - emscripten::val body_gravcomp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_gravcomp)); - } - emscripten::val body_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_margin)); - } - emscripten::val body_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * ptr_->nuser_body, ptr_->body_user)); - } - emscripten::val body_plugin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_plugin)); - } - emscripten::val body_contype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_contype)); - } - emscripten::val body_conaffinity() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_conaffinity)); - } - emscripten::val body_bvhadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_bvhadr)); - } - emscripten::val body_bvhnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_bvhnum)); - } - emscripten::val bvh_depth() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh, ptr_->bvh_depth)); - } - emscripten::val bvh_child() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh * 2, ptr_->bvh_child)); - } - emscripten::val bvh_nodeid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh, ptr_->bvh_nodeid)); - } - emscripten::val bvh_aabb() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbvhstatic * 6, ptr_->bvh_aabb)); - } - emscripten::val oct_depth() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->noct, ptr_->oct_depth)); - } - emscripten::val oct_child() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 8, ptr_->oct_child)); - } - emscripten::val oct_aabb() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 6, ptr_->oct_aabb)); - } - emscripten::val oct_coeff() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 8, ptr_->oct_coeff)); - } - emscripten::val jnt_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_type)); - } - emscripten::val jnt_qposadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_qposadr)); - } - emscripten::val jnt_dofadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_dofadr)); - } - emscripten::val jnt_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_bodyid)); - } - emscripten::val jnt_actuatorid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actuatorid)); - } - emscripten::val jnt_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_group)); - } - emscripten::val jnt_limited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_limited)); - } - emscripten::val jnt_actfrclimited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actfrclimited)); - } - emscripten::val jnt_actgravcomp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actgravcomp)); - } - emscripten::val jnt_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNREF, ptr_->jnt_solref)); - } - emscripten::val jnt_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNIMP, ptr_->jnt_solimp)); - } - emscripten::val jnt_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 3, ptr_->jnt_pos)); - } - emscripten::val jnt_axis() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 3, ptr_->jnt_axis)); - } - emscripten::val jnt_stiffness() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_stiffness)); - } - emscripten::val jnt_stiffnesspoly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNPOLY, ptr_->jnt_stiffnesspoly)); - } - emscripten::val jnt_range() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 2, ptr_->jnt_range)); - } - emscripten::val jnt_actfrcrange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 2, ptr_->jnt_actfrcrange)); - } - emscripten::val jnt_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_margin)); - } - emscripten::val jnt_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * ptr_->nuser_jnt, ptr_->jnt_user)); - } - emscripten::val dof_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_bodyid)); - } - emscripten::val dof_jntid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_jntid)); - } - emscripten::val dof_parentid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_parentid)); - } - emscripten::val dof_treeid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_treeid)); - } - emscripten::val dof_Madr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_Madr)); - } - emscripten::val dof_simplenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_simplenum)); - } - emscripten::val dof_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNREF, ptr_->dof_solref)); - } - emscripten::val dof_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNIMP, ptr_->dof_solimp)); - } - emscripten::val dof_frictionloss() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_frictionloss)); - } - emscripten::val dof_armature() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_armature)); - } - emscripten::val dof_damping() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_damping)); - } - emscripten::val dof_dampingpoly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNPOLY, ptr_->dof_dampingpoly)); - } - emscripten::val dof_invweight0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_invweight0)); - } - emscripten::val dof_M0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_M0)); - } - emscripten::val dof_length() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_length)); - } - emscripten::val tree_bodyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_bodyadr)); - } - emscripten::val tree_bodynum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_bodynum)); - } - emscripten::val tree_dofadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_dofadr)); - } - emscripten::val tree_dofnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_dofnum)); - } - emscripten::val tree_sleep_policy() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_sleep_policy)); - } - emscripten::val geom_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_type)); - } - emscripten::val geom_contype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_contype)); - } - emscripten::val geom_conaffinity() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_conaffinity)); - } - emscripten::val geom_condim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_condim)); - } - emscripten::val geom_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_bodyid)); - } - emscripten::val geom_dataid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_dataid)); - } - emscripten::val geom_matid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_matid)); - } - emscripten::val geom_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_group)); - } - emscripten::val geom_priority() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_priority)); - } - emscripten::val geom_plugin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_plugin)); - } - emscripten::val geom_sameframe() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_sameframe)); - } - emscripten::val geom_solmix() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_solmix)); - } - emscripten::val geom_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNREF, ptr_->geom_solref)); - } - emscripten::val geom_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNIMP, ptr_->geom_solimp)); - } - emscripten::val geom_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_size)); - } - emscripten::val geom_aabb() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 6, ptr_->geom_aabb)); - } - emscripten::val geom_rbound() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_rbound)); - } - emscripten::val geom_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_pos)); - } - emscripten::val geom_quat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 4, ptr_->geom_quat)); - } - emscripten::val geom_friction() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_friction)); - } - emscripten::val geom_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_margin)); - } - emscripten::val geom_gap() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_gap)); - } - emscripten::val geom_fluid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNFLUID, ptr_->geom_fluid)); - } - emscripten::val geom_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * ptr_->nuser_geom, ptr_->geom_user)); - } - emscripten::val geom_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 4, ptr_->geom_rgba)); - } - emscripten::val site_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_type)); - } - emscripten::val site_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_bodyid)); - } - emscripten::val site_matid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_matid)); - } - emscripten::val site_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_group)); - } - emscripten::val site_sameframe() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_sameframe)); - } - emscripten::val site_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 3, ptr_->site_size)); - } - emscripten::val site_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 3, ptr_->site_pos)); - } - emscripten::val site_quat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 4, ptr_->site_quat)); - } - emscripten::val site_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * ptr_->nuser_site, ptr_->site_user)); - } - emscripten::val site_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 4, ptr_->site_rgba)); - } - emscripten::val cam_mode() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_mode)); - } - emscripten::val cam_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_bodyid)); - } - emscripten::val cam_targetbodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_targetbodyid)); - } - emscripten::val cam_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_pos)); - } - emscripten::val cam_quat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 4, ptr_->cam_quat)); - } - emscripten::val cam_poscom0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_poscom0)); - } - emscripten::val cam_pos0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_pos0)); - } - emscripten::val cam_mat0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 9, ptr_->cam_mat0)); - } - emscripten::val cam_projection() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_projection)); - } - emscripten::val cam_fovy() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_fovy)); - } - emscripten::val cam_ipd() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_ipd)); - } - emscripten::val cam_resolution() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 2, ptr_->cam_resolution)); - } - emscripten::val cam_output() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_output)); - } - emscripten::val cam_sensorsize() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 2, ptr_->cam_sensorsize)); - } - emscripten::val cam_intrinsic() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 4, ptr_->cam_intrinsic)); - } - emscripten::val cam_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * ptr_->nuser_cam, ptr_->cam_user)); - } - emscripten::val light_mode() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_mode)); - } - emscripten::val light_bodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_bodyid)); - } - emscripten::val light_targetbodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_targetbodyid)); - } - emscripten::val light_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_type)); - } - emscripten::val light_texid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_texid)); - } - emscripten::val light_castshadow() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_castshadow)); - } - emscripten::val light_bulbradius() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_bulbradius)); - } - emscripten::val light_intensity() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_intensity)); - } - emscripten::val light_range() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_range)); - } - emscripten::val light_active() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_active)); - } - emscripten::val light_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_pos)); - } - emscripten::val light_dir() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_dir)); - } - emscripten::val light_poscom0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_poscom0)); - } - emscripten::val light_pos0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_pos0)); - } - emscripten::val light_dir0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_dir0)); - } - emscripten::val light_attenuation() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_attenuation)); - } - emscripten::val light_cutoff() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_cutoff)); - } - emscripten::val light_exponent() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_exponent)); - } - emscripten::val light_ambient() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_ambient)); - } - emscripten::val light_diffuse() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_diffuse)); - } - emscripten::val light_specular() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_specular)); - } - emscripten::val flex_contype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_contype)); - } - emscripten::val flex_conaffinity() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_conaffinity)); - } - emscripten::val flex_condim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_condim)); - } - emscripten::val flex_priority() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_priority)); - } - emscripten::val flex_solmix() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_solmix)); - } - emscripten::val flex_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * mjNREF, ptr_->flex_solref)); - } - emscripten::val flex_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * mjNIMP, ptr_->flex_solimp)); - } - emscripten::val flex_friction() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_friction)); - } - emscripten::val flex_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_margin)); - } - emscripten::val flex_gap() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_gap)); - } - emscripten::val flex_internal() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_internal)); - } - emscripten::val flex_selfcollide() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_selfcollide)); - } - emscripten::val flex_activelayers() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_activelayers)); - } - emscripten::val flex_passive() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_passive)); - } - emscripten::val flex_dim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_dim)); - } - emscripten::val flex_matid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_matid)); - } - emscripten::val flex_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_group)); - } - emscripten::val flex_interp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_interp)); - } - emscripten::val flex_cellnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_cellnum)); - } - emscripten::val flex_nodeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_nodeadr)); - } - emscripten::val flex_nodenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_nodenum)); - } - emscripten::val flex_vertadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_vertadr)); - } - emscripten::val flex_vertnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_vertnum)); - } - emscripten::val flex_edgeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgeadr)); - } - emscripten::val flex_edgenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgenum)); - } - emscripten::val flex_elemadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemadr)); - } - emscripten::val flex_elemnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemnum)); - } - emscripten::val flex_elemdataadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemdataadr)); - } - emscripten::val flex_stiffnessadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_stiffnessadr)); - } - emscripten::val flex_elemedgeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemedgeadr)); - } - emscripten::val flex_bendingadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bendingadr)); - } - emscripten::val flex_shellnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_shellnum)); - } - emscripten::val flex_shelldataadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_shelldataadr)); - } - emscripten::val flex_evpairadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_evpairadr)); - } - emscripten::val flex_evpairnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_evpairnum)); - } - emscripten::val flex_texcoordadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_texcoordadr)); - } - emscripten::val flex_nodebodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode, ptr_->flex_nodebodyid)); - } - emscripten::val flex_vertbodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertbodyid)); - } - emscripten::val flex_vertedgeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertedgeadr)); - } - emscripten::val flex_vertedgenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertedgenum)); - } - emscripten::val flex_vertedge() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_vertedge)); - } - emscripten::val flex_edge() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_edge)); - } - emscripten::val flex_edgeflap() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_edgeflap)); - } - emscripten::val flex_elem() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemdata, ptr_->flex_elem)); - } - emscripten::val flex_elemtexcoord() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemdata, ptr_->flex_elemtexcoord)); - } - emscripten::val flex_elemedge() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemedge, ptr_->flex_elemedge)); - } - emscripten::val flex_elemlayer() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelem, ptr_->flex_elemlayer)); - } - emscripten::val flex_shell() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexshelldata, ptr_->flex_shell)); - } - emscripten::val flex_evpair() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexevpair * 2, ptr_->flex_evpair)); - } - emscripten::val flex_vert() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 3, ptr_->flex_vert)); - } - emscripten::val flex_vert0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 3, ptr_->flex_vert0)); - } - emscripten::val flex_vertmetric() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 4, ptr_->flex_vertmetric)); - } - emscripten::val flex_node() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode * 3, ptr_->flex_node)); - } - emscripten::val flex_node0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode * 3, ptr_->flex_node0)); - } - emscripten::val flexedge_length0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_length0)); - } - emscripten::val flexedge_invweight0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_invweight0)); - } - emscripten::val flex_radius() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_radius)); - } - emscripten::val flex_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_size)); - } - emscripten::val flex_stiffness() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexstiffness, ptr_->flex_stiffness)); - } - emscripten::val flex_bending() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexbending, ptr_->flex_bending)); - } - emscripten::val flex_damping() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_damping)); - } - emscripten::val flex_edgestiffness() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgestiffness)); - } - emscripten::val flex_edgedamping() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgedamping)); - } - emscripten::val flex_edgeequality() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgeequality)); - } - emscripten::val flex_rigid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_rigid)); - } - emscripten::val flexedge_rigid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_rigid)); - } - emscripten::val flex_centered() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_centered)); - } - emscripten::val flex_flatskin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_flatskin)); - } - emscripten::val flex_bvhadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bvhadr)); - } - emscripten::val flex_bvhnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bvhnum)); - } - emscripten::val flexedge_J_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_J_rownnz)); - } - emscripten::val flexedge_J_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_J_rowadr)); - } - emscripten::val flexedge_J_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nJfe, ptr_->flexedge_J_colind)); - } - emscripten::val flexvert_J_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 2, ptr_->flexvert_J_rownnz)); - } - emscripten::val flexvert_J_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 2, ptr_->flexvert_J_rowadr)); - } - emscripten::val flexvert_J_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nJfv * 2, ptr_->flexvert_J_colind)); - } - emscripten::val flex_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 4, ptr_->flex_rgba)); - } - emscripten::val flex_texcoord() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflextexcoord * 2, ptr_->flex_texcoord)); - } - emscripten::val mesh_vertadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_vertadr)); - } - emscripten::val mesh_vertnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_vertnum)); - } - emscripten::val mesh_faceadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_faceadr)); - } - emscripten::val mesh_facenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_facenum)); - } - emscripten::val mesh_bvhadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_bvhadr)); - } - emscripten::val mesh_bvhnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_bvhnum)); - } - emscripten::val mesh_octadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_octadr)); - } - emscripten::val mesh_octnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_octnum)); - } - emscripten::val mesh_normaladr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_normaladr)); - } - emscripten::val mesh_normalnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_normalnum)); - } - emscripten::val mesh_texcoordadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_texcoordadr)); - } - emscripten::val mesh_texcoordnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_texcoordnum)); - } - emscripten::val mesh_graphadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_graphadr)); - } - emscripten::val mesh_vert() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert * 3, ptr_->mesh_vert)); - } - emscripten::val mesh_normal() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshnormal * 3, ptr_->mesh_normal)); - } - emscripten::val mesh_texcoord() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshtexcoord * 2, ptr_->mesh_texcoord)); - } - emscripten::val mesh_face() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_face)); - } - emscripten::val mesh_facenormal() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_facenormal)); - } - emscripten::val mesh_facetexcoord() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_facetexcoord)); - } - emscripten::val mesh_graph() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshgraph, ptr_->mesh_graph)); - } - emscripten::val mesh_scale() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 3, ptr_->mesh_scale)); - } - emscripten::val mesh_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 3, ptr_->mesh_pos)); - } - emscripten::val mesh_quat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 4, ptr_->mesh_quat)); - } - emscripten::val mesh_pathadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_pathadr)); - } - emscripten::val mesh_polynum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_polynum)); - } - emscripten::val mesh_polyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_polyadr)); - } - emscripten::val mesh_polynormal() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly * 3, ptr_->mesh_polynormal)); - } - emscripten::val mesh_polyvertadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly, ptr_->mesh_polyvertadr)); - } - emscripten::val mesh_polyvertnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly, ptr_->mesh_polyvertnum)); - } - emscripten::val mesh_polyvert() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpolyvert, ptr_->mesh_polyvert)); - } - emscripten::val mesh_polymapadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert, ptr_->mesh_polymapadr)); - } - emscripten::val mesh_polymapnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert, ptr_->mesh_polymapnum)); - } - emscripten::val mesh_polymap() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpolymap, ptr_->mesh_polymap)); - } - emscripten::val skin_matid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_matid)); - } - emscripten::val skin_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_group)); - } - emscripten::val skin_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin * 4, ptr_->skin_rgba)); - } - emscripten::val skin_inflate() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_inflate)); - } - emscripten::val skin_vertadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_vertadr)); - } - emscripten::val skin_vertnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_vertnum)); - } - emscripten::val skin_texcoordadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_texcoordadr)); - } - emscripten::val skin_faceadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_faceadr)); - } - emscripten::val skin_facenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_facenum)); - } - emscripten::val skin_boneadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_boneadr)); - } - emscripten::val skin_bonenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_bonenum)); - } - emscripten::val skin_vert() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinvert * 3, ptr_->skin_vert)); - } - emscripten::val skin_texcoord() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskintexvert * 2, ptr_->skin_texcoord)); - } - emscripten::val skin_face() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinface * 3, ptr_->skin_face)); - } - emscripten::val skin_bonevertadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonevertadr)); - } - emscripten::val skin_bonevertnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonevertnum)); - } - emscripten::val skin_bonebindpos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone * 3, ptr_->skin_bonebindpos)); - } - emscripten::val skin_bonebindquat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone * 4, ptr_->skin_bonebindquat)); - } - emscripten::val skin_bonebodyid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonebodyid)); - } - emscripten::val skin_bonevertid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbonevert, ptr_->skin_bonevertid)); - } - emscripten::val skin_bonevertweight() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbonevert, ptr_->skin_bonevertweight)); - } - emscripten::val skin_pathadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_pathadr)); - } - emscripten::val hfield_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield * 4, ptr_->hfield_size)); - } - emscripten::val hfield_nrow() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_nrow)); - } - emscripten::val hfield_ncol() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_ncol)); - } - emscripten::val hfield_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_adr)); - } - emscripten::val hfield_data() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfielddata, ptr_->hfield_data)); - } - emscripten::val hfield_pathadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_pathadr)); - } - emscripten::val tex_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_type)); - } - emscripten::val tex_colorspace() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_colorspace)); - } - emscripten::val tex_height() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_height)); - } - emscripten::val tex_width() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_width)); - } - emscripten::val tex_nchannel() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_nchannel)); - } - emscripten::val tex_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_adr)); - } - emscripten::val tex_data() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntexdata, ptr_->tex_data)); - } - emscripten::val tex_pathadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_pathadr)); - } - emscripten::val mat_texid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * mjNTEXROLE, ptr_->mat_texid)); - } - emscripten::val mat_texuniform() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_texuniform)); - } - emscripten::val mat_texrepeat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * 2, ptr_->mat_texrepeat)); - } - emscripten::val mat_emission() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_emission)); - } - emscripten::val mat_specular() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_specular)); - } - emscripten::val mat_shininess() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_shininess)); - } - emscripten::val mat_reflectance() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_reflectance)); - } - emscripten::val mat_metallic() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_metallic)); - } - emscripten::val mat_roughness() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_roughness)); - } - emscripten::val mat_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * 4, ptr_->mat_rgba)); - } - emscripten::val pair_dim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_dim)); - } - emscripten::val pair_geom1() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_geom1)); - } - emscripten::val pair_geom2() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_geom2)); - } - emscripten::val pair_signature() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_signature)); - } - emscripten::val pair_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNREF, ptr_->pair_solref)); - } - emscripten::val pair_solreffriction() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNREF, ptr_->pair_solreffriction)); - } - emscripten::val pair_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNIMP, ptr_->pair_solimp)); - } - emscripten::val pair_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_margin)); - } - emscripten::val pair_gap() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_gap)); - } - emscripten::val pair_friction() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair * 5, ptr_->pair_friction)); - } - emscripten::val exclude_signature() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nexclude, ptr_->exclude_signature)); - } - emscripten::val eq_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_type)); - } - emscripten::val eq_obj1id() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_obj1id)); - } - emscripten::val eq_obj2id() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_obj2id)); - } - emscripten::val eq_objtype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_objtype)); - } - emscripten::val eq_active0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_active0)); - } - emscripten::val eq_solref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNREF, ptr_->eq_solref)); - } - emscripten::val eq_solimp() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNIMP, ptr_->eq_solimp)); - } - emscripten::val eq_data() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNEQDATA, ptr_->eq_data)); - } - emscripten::val tendon_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_adr)); - } - emscripten::val tendon_num() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_num)); - } - emscripten::val tendon_matid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_matid)); - } - emscripten::val tendon_actuatorid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_actuatorid)); - } - emscripten::val tendon_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_group)); - } - emscripten::val tendon_treenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_treenum)); - } - emscripten::val tendon_treeid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_treeid)); - } - emscripten::val ten_J_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->ten_J_rownnz)); - } - emscripten::val ten_J_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->ten_J_rowadr)); - } - emscripten::val ten_J_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nJten, ptr_->ten_J_colind)); - } - emscripten::val tendon_limited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_limited)); - } - emscripten::val tendon_actfrclimited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_actfrclimited)); - } - emscripten::val tendon_width() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_width)); - } - emscripten::val tendon_solref_lim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNREF, ptr_->tendon_solref_lim)); - } - emscripten::val tendon_solimp_lim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNIMP, ptr_->tendon_solimp_lim)); - } - emscripten::val tendon_solref_fri() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNREF, ptr_->tendon_solref_fri)); - } - emscripten::val tendon_solimp_fri() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNIMP, ptr_->tendon_solimp_fri)); - } - emscripten::val tendon_range() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_range)); - } - emscripten::val tendon_actfrcrange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_actfrcrange)); - } - emscripten::val tendon_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_margin)); - } - emscripten::val tendon_stiffness() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_stiffness)); - } - emscripten::val tendon_stiffnesspoly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNPOLY, ptr_->tendon_stiffnesspoly)); - } - emscripten::val tendon_damping() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_damping)); - } - emscripten::val tendon_dampingpoly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNPOLY, ptr_->tendon_dampingpoly)); - } - emscripten::val tendon_armature() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_armature)); - } - emscripten::val tendon_frictionloss() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_frictionloss)); - } - emscripten::val tendon_lengthspring() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_lengthspring)); - } - emscripten::val tendon_length0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_length0)); - } - emscripten::val tendon_invweight0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_invweight0)); - } - emscripten::val tendon_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * ptr_->nuser_tendon, ptr_->tendon_user)); - } - emscripten::val tendon_rgba() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 4, ptr_->tendon_rgba)); - } - emscripten::val wrap_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_type)); - } - emscripten::val wrap_objid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_objid)); - } - emscripten::val wrap_prm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_prm)); - } - emscripten::val actuator_trntype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_trntype)); - } - emscripten::val actuator_dyntype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_dyntype)); - } - emscripten::val actuator_gaintype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_gaintype)); - } - emscripten::val actuator_biastype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_biastype)); - } - emscripten::val actuator_trnid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_trnid)); - } - emscripten::val actuator_damping() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_damping)); - } - emscripten::val actuator_dampingpoly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNPOLY, ptr_->actuator_dampingpoly)); - } - emscripten::val actuator_armature() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_armature)); - } - emscripten::val actuator_actadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actadr)); - } - emscripten::val actuator_actnum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actnum)); - } - emscripten::val actuator_group() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_group)); - } - emscripten::val actuator_history() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_history)); - } - emscripten::val actuator_historyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_historyadr)); - } - emscripten::val actuator_delay() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_delay)); - } - emscripten::val actuator_ctrllimited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_ctrllimited)); - } - emscripten::val actuator_forcelimited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_forcelimited)); - } - emscripten::val actuator_actlimited() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actlimited)); - } - emscripten::val actuator_dynprm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNDYN, ptr_->actuator_dynprm)); - } - emscripten::val actuator_gainprm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNGAIN, ptr_->actuator_gainprm)); - } - emscripten::val actuator_biasprm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNBIAS, ptr_->actuator_biasprm)); - } - emscripten::val actuator_actearly() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actearly)); - } - emscripten::val actuator_ctrlrange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_ctrlrange)); - } - emscripten::val actuator_forcerange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_forcerange)); - } - emscripten::val actuator_actrange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_actrange)); - } - emscripten::val actuator_gear() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 6, ptr_->actuator_gear)); - } - emscripten::val actuator_cranklength() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_cranklength)); - } - emscripten::val actuator_acc0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_acc0)); - } - emscripten::val actuator_length0() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_length0)); - } - emscripten::val actuator_lengthrange() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_lengthrange)); - } - emscripten::val actuator_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu * ptr_->nuser_actuator, ptr_->actuator_user)); - } - emscripten::val actuator_plugin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_plugin)); - } - emscripten::val sensor_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_type)); - } - emscripten::val sensor_datatype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_datatype)); - } - emscripten::val sensor_needstage() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_needstage)); - } - emscripten::val sensor_objtype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_objtype)); - } - emscripten::val sensor_objid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_objid)); - } - emscripten::val sensor_reftype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_reftype)); - } - emscripten::val sensor_refid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_refid)); - } - emscripten::val sensor_intprm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * mjNSENS, ptr_->sensor_intprm)); - } - emscripten::val sensor_dim() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_dim)); - } - emscripten::val sensor_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_adr)); - } - emscripten::val sensor_cutoff() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_cutoff)); - } - emscripten::val sensor_noise() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_noise)); - } - emscripten::val sensor_history() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * 2, ptr_->sensor_history)); - } - emscripten::val sensor_historyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_historyadr)); - } - emscripten::val sensor_delay() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_delay)); - } - emscripten::val sensor_interval() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * 2, ptr_->sensor_interval)); - } - emscripten::val sensor_user() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * ptr_->nuser_sensor, ptr_->sensor_user)); - } - emscripten::val sensor_plugin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_plugin)); - } - emscripten::val plugin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin)); - } - emscripten::val plugin_stateadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_stateadr)); - } - emscripten::val plugin_statenum() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_statenum)); - } - emscripten::val plugin_attr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npluginattr, ptr_->plugin_attr)); - } - emscripten::val plugin_attradr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_attradr)); - } - emscripten::val numeric_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->numeric_adr)); - } - emscripten::val numeric_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->numeric_size)); - } - emscripten::val numeric_data() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnumericdata, ptr_->numeric_data)); - } - emscripten::val text_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->text_adr)); - } - emscripten::val text_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->text_size)); - } - emscripten::val text_data() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntextdata, ptr_->text_data)); - } - emscripten::val tuple_adr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->tuple_adr)); - } - emscripten::val tuple_size() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->tuple_size)); - } - emscripten::val tuple_objtype() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objtype)); - } - emscripten::val tuple_objid() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objid)); - } - emscripten::val tuple_objprm() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objprm)); - } - emscripten::val key_time() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey, ptr_->key_time)); - } - emscripten::val key_qpos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nq, ptr_->key_qpos)); - } - emscripten::val key_qvel() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nv, ptr_->key_qvel)); - } - emscripten::val key_act() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->na, ptr_->key_act)); - } - emscripten::val key_mpos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nmocap*3, ptr_->key_mpos)); - } - emscripten::val key_mquat() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nmocap*4, ptr_->key_mquat)); - } - emscripten::val key_ctrl() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nu, ptr_->key_ctrl)); - } - emscripten::val name_bodyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->name_bodyadr)); - } - emscripten::val name_jntadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->name_jntadr)); - } - emscripten::val name_geomadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->name_geomadr)); - } - emscripten::val name_siteadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->name_siteadr)); - } - emscripten::val name_camadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->name_camadr)); - } - emscripten::val name_lightadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->name_lightadr)); - } - emscripten::val name_flexadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->name_flexadr)); - } - emscripten::val name_meshadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->name_meshadr)); - } - emscripten::val name_skinadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->name_skinadr)); - } - emscripten::val name_hfieldadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->name_hfieldadr)); - } - emscripten::val name_texadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->name_texadr)); - } - emscripten::val name_matadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->name_matadr)); - } - emscripten::val name_pairadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->name_pairadr)); - } - emscripten::val name_excludeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nexclude, ptr_->name_excludeadr)); - } - emscripten::val name_eqadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->name_eqadr)); - } - emscripten::val name_tendonadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->name_tendonadr)); - } - emscripten::val name_actuatoradr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->name_actuatoradr)); - } - emscripten::val name_sensoradr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->name_sensoradr)); - } - emscripten::val name_numericadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->name_numericadr)); - } - emscripten::val name_textadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->name_textadr)); - } - emscripten::val name_tupleadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->name_tupleadr)); - } - emscripten::val name_keyadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nkey, ptr_->name_keyadr)); - } - emscripten::val name_pluginadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->name_pluginadr)); - } - emscripten::val names() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnames, ptr_->names)); - } - emscripten::val names_map() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nnames_map, ptr_->names_map)); - } - emscripten::val paths() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->npaths, ptr_->paths)); - } - emscripten::val B_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->B_rownnz)); - } - emscripten::val B_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->B_rowadr)); - } - emscripten::val B_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nB, ptr_->B_colind)); - } - emscripten::val M_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->M_rownnz)); - } - emscripten::val M_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->M_rowadr)); - } - emscripten::val M_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->M_colind)); - } - emscripten::val mapM2M() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->mapM2M)); - } - emscripten::val D_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_rownnz)); - } - emscripten::val D_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_rowadr)); - } - emscripten::val D_diag() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_diag)); - } - emscripten::val D_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nD, ptr_->D_colind)); - } - emscripten::val mapM2D() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nD, ptr_->mapM2D)); - } - emscripten::val mapD2M() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->mapD2M)); - } - uint64_t signature() const { - return ptr_->signature; - } - void set_signature(uint64_t value) { - ptr_->signature = value; - } - // Generates functions to return accessor classes. - #define X_ACCESSOR(NAME, Name, OBJTYPE, accessor_name, nfield) \ - MjModel##Name##Accessor accessor_name(const NumberOrString& val) const { \ - if (val.isString()) { \ - int id = mj_name2id(ptr_, OBJTYPE, val.as().c_str()); \ - if (id == -1) { \ - mju_error("%s", KeyErrorMessage(ptr_, OBJTYPE, ptr_->nfield, val.as(), #accessor_name).c_str()); \ - } \ - return MjModel##Name##Accessor(ptr_, id); \ - } else if (val.isNumber()) { \ - int id = val.as(); \ - if (id < 0 || id >= ptr_->nfield) { \ - mju_error("%s", IndexErrorMessage(id, ptr_->nfield, #accessor_name).c_str()); \ - } \ - return MjModel##Name##Accessor(ptr_, id); \ - } else { \ - mju_error(#accessor_name "() argument must be a string or number"); \ - return MjModel##Name##Accessor(nullptr, 0); \ - } \ - } - - MJMODEL_ACCESSORS - #undef X_ACCESSOR - - private: - mjModel* ptr_; - - public: - MjOption opt; - MjVisual vis; - MjStatistic stat; -}; - -struct MjSpec { - ~MjSpec(); - MjSpec(); - explicit MjSpec(mjSpec *ptr); - MjSpec(const MjSpec &); - MjSpec &operator=(const MjSpec &); - std::unique_ptr copy(); - mjSpec* get() const; - void set(mjSpec* ptr); - emscripten::val timer() const; - mjString modelname() const { - return (ptr_ && ptr_->modelname) ? *(ptr_->modelname) : ""; - } - void set_modelname(const mjString& value) { - if (ptr_ && ptr_->modelname) { - *(ptr_->modelname) = value; - } - } - mjtByte strippath() const { - return ptr_->strippath; - } - void set_strippath(mjtByte value) { - ptr_->strippath = value; - } - int memory() const { - return static_cast(ptr_->memory); - } - void set_memory(int value) { - ptr_->memory = static_cast(value); - } - int nemax() const { - return ptr_->nemax; - } - void set_nemax(int value) { - ptr_->nemax = value; - } - int nuserdata() const { - return ptr_->nuserdata; - } - void set_nuserdata(int value) { - ptr_->nuserdata = value; - } - int nuser_body() const { - return ptr_->nuser_body; - } - void set_nuser_body(int value) { - ptr_->nuser_body = value; - } - int nuser_jnt() const { - return ptr_->nuser_jnt; - } - void set_nuser_jnt(int value) { - ptr_->nuser_jnt = value; - } - int nuser_geom() const { - return ptr_->nuser_geom; - } - void set_nuser_geom(int value) { - ptr_->nuser_geom = value; - } - int nuser_site() const { - return ptr_->nuser_site; - } - void set_nuser_site(int value) { - ptr_->nuser_site = value; - } - int nuser_cam() const { - return ptr_->nuser_cam; - } - void set_nuser_cam(int value) { - ptr_->nuser_cam = value; - } - int nuser_tendon() const { - return ptr_->nuser_tendon; - } - void set_nuser_tendon(int value) { - ptr_->nuser_tendon = value; - } - int nuser_actuator() const { - return ptr_->nuser_actuator; - } - void set_nuser_actuator(int value) { - ptr_->nuser_actuator = value; - } - int nuser_sensor() const { - return ptr_->nuser_sensor; - } - void set_nuser_sensor(int value) { - ptr_->nuser_sensor = value; - } - int nkey() const { - return ptr_->nkey; - } - void set_nkey(int value) { - ptr_->nkey = value; - } - int njmax() const { - return ptr_->njmax; - } - void set_njmax(int value) { - ptr_->njmax = value; - } - int nconmax() const { - return ptr_->nconmax; - } - void set_nconmax(int value) { - ptr_->nconmax = value; - } - int nstack() const { - return static_cast(ptr_->nstack); - } - void set_nstack(int value) { - ptr_->nstack = static_cast(value); - } - mjString comment() const { - return (ptr_ && ptr_->comment) ? *(ptr_->comment) : ""; - } - void set_comment(const mjString& value) { - if (ptr_ && ptr_->comment) { - *(ptr_->comment) = value; - } - } - mjString modelfiledir() const { - return (ptr_ && ptr_->modelfiledir) ? *(ptr_->modelfiledir) : ""; - } - void set_modelfiledir(const mjString& value) { - if (ptr_ && ptr_->modelfiledir) { - *(ptr_->modelfiledir) = value; - } - } - mjtByte hasImplicitPluginElem() const { - return ptr_->hasImplicitPluginElem; - } - void set_hasImplicitPluginElem(mjtByte value) { - ptr_->hasImplicitPluginElem = value; - } - - private: - mjSpec* ptr_; - bool owned_ = false; - - public: - MjsElement element; - MjsCompiler compiler; - MjOption option; - MjVisual visual; - MjStatistic stat; - MjsAuthored authored; -}; - -struct MjsActuator { - explicit MjsActuator(mjsActuator *ptr); - mjsActuator* get() const; - void set(mjsActuator* ptr); - mjtGain gaintype() const { - return ptr_->gaintype; - } - void set_gaintype(mjtGain value) { - ptr_->gaintype = value; - } - emscripten::val gainprm() const { - return emscripten::val(emscripten::typed_memory_view(10, ptr_->gainprm)); - } - mjtBias biastype() const { - return ptr_->biastype; - } - void set_biastype(mjtBias value) { - ptr_->biastype = value; - } - emscripten::val biasprm() const { - return emscripten::val(emscripten::typed_memory_view(10, ptr_->biasprm)); - } - mjtDyn dyntype() const { - return ptr_->dyntype; - } - void set_dyntype(mjtDyn value) { - ptr_->dyntype = value; - } - emscripten::val dynprm() const { - return emscripten::val(emscripten::typed_memory_view(10, ptr_->dynprm)); - } - int actdim() const { - return ptr_->actdim; - } - void set_actdim(int value) { - ptr_->actdim = value; - } - mjtByte actearly() const { - return ptr_->actearly; - } - void set_actearly(mjtByte value) { - ptr_->actearly = value; - } - mjtTrn trntype() const { - return ptr_->trntype; - } - void set_trntype(mjtTrn value) { - ptr_->trntype = value; - } - emscripten::val gear() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->gear)); - } - mjString target() const { - return (ptr_ && ptr_->target) ? *(ptr_->target) : ""; - } - void set_target(const mjString& value) { - if (ptr_ && ptr_->target) { - *(ptr_->target) = value; - } - } - mjString refsite() const { - return (ptr_ && ptr_->refsite) ? *(ptr_->refsite) : ""; - } - void set_refsite(const mjString& value) { - if (ptr_ && ptr_->refsite) { - *(ptr_->refsite) = value; - } - } - mjString slidersite() const { - return (ptr_ && ptr_->slidersite) ? *(ptr_->slidersite) : ""; - } - void set_slidersite(const mjString& value) { - if (ptr_ && ptr_->slidersite) { - *(ptr_->slidersite) = value; - } - } - double cranklength() const { - return ptr_->cranklength; - } - void set_cranklength(double value) { - ptr_->cranklength = value; - } - emscripten::val lengthrange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->lengthrange)); - } - double inheritrange() const { - return ptr_->inheritrange; - } - void set_inheritrange(double value) { - ptr_->inheritrange = value; - } - emscripten::val damping() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); - } - double armature() const { - return ptr_->armature; - } - void set_armature(double value) { - ptr_->armature = value; - } - int ctrllimited() const { - return ptr_->ctrllimited; - } - void set_ctrllimited(int value) { - ptr_->ctrllimited = value; - } - emscripten::val ctrlrange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->ctrlrange)); - } - int forcelimited() const { - return ptr_->forcelimited; - } - void set_forcelimited(int value) { - ptr_->forcelimited = value; - } - emscripten::val forcerange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->forcerange)); - } - int actlimited() const { - return ptr_->actlimited; - } - void set_actlimited(int value) { - ptr_->actlimited = value; - } - emscripten::val actrange() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->actrange)); - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - int nsample() const { - return ptr_->nsample; - } - void set_nsample(int value) { - ptr_->nsample = value; - } - int interp() const { - return ptr_->interp; - } - void set_interp(int value) { - ptr_->interp = value; - } - double delay() const { - return ptr_->delay; - } - void set_delay(double value) { - ptr_->delay = value; - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsActuator* ptr_; - - public: - MjsElement element; - MjsPlugin plugin; -}; - -struct MjsBody { - explicit MjsBody(mjsBody *ptr); - mjsBody* get() const; - void set(mjsBody* ptr); - mjString childclass() const { - return (ptr_ && ptr_->childclass) ? *(ptr_->childclass) : ""; - } - void set_childclass(const mjString& value) { - if (ptr_ && ptr_->childclass) { - *(ptr_->childclass) = value; - } - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val quat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); - } - double mass() const { - return ptr_->mass; - } - void set_mass(double value) { - ptr_->mass = value; - } - emscripten::val ipos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->ipos)); - } - emscripten::val iquat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->iquat)); - } - emscripten::val inertia() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->inertia)); - } - emscripten::val fullinertia() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->fullinertia)); - } - mjtByte mocap() const { - return ptr_->mocap; - } - void set_mocap(mjtByte value) { - ptr_->mocap = value; - } - double gravcomp() const { - return ptr_->gravcomp; - } - void set_gravcomp(double value) { - ptr_->gravcomp = value; - } - mjtSleepPolicy sleep() const { - return ptr_->sleep; - } - void set_sleep(mjtSleepPolicy value) { - ptr_->sleep = value; - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjtByte explicitinertial() const { - return ptr_->explicitinertial; - } - void set_explicitinertial(mjtByte value) { - ptr_->explicitinertial = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsBody* ptr_; - - public: - MjsElement element; - MjsOrientation alt; - MjsOrientation ialt; - MjsPlugin plugin; -}; - -struct MjsGeom { - explicit MjsGeom(mjsGeom *ptr); - mjsGeom* get() const; - void set(mjsGeom* ptr); - mjtGeom type() const { - return ptr_->type; - } - void set_type(mjtGeom value) { - ptr_->type = value; - } - emscripten::val pos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); - } - emscripten::val quat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); - } - emscripten::val fromto() const { - return emscripten::val(emscripten::typed_memory_view(6, ptr_->fromto)); - } - emscripten::val size() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); - } - int contype() const { - return ptr_->contype; - } - void set_contype(int value) { - ptr_->contype = value; - } - int conaffinity() const { - return ptr_->conaffinity; - } - void set_conaffinity(int value) { - ptr_->conaffinity = value; - } - int condim() const { - return ptr_->condim; - } - void set_condim(int value) { - ptr_->condim = value; - } - int priority() const { - return ptr_->priority; - } - void set_priority(int value) { - ptr_->priority = value; - } - emscripten::val friction() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->friction)); - } - double solmix() const { - return ptr_->solmix; - } - void set_solmix(double value) { - ptr_->solmix = value; - } - emscripten::val solref() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); - } - emscripten::val solimp() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); - } - double margin() const { - return ptr_->margin; - } - void set_margin(double value) { - ptr_->margin = value; - } - double gap() const { - return ptr_->gap; - } - void set_gap(double value) { - ptr_->gap = value; - } - double mass() const { - return ptr_->mass; - } - void set_mass(double value) { - ptr_->mass = value; - } - double density() const { - return ptr_->density; - } - void set_density(double value) { - ptr_->density = value; - } - mjtGeomInertia typeinertia() const { - return ptr_->typeinertia; - } - void set_typeinertia(mjtGeomInertia value) { - ptr_->typeinertia = value; - } - mjtNum fluid_ellipsoid() const { - return ptr_->fluid_ellipsoid; - } - void set_fluid_ellipsoid(mjtNum value) { - ptr_->fluid_ellipsoid = value; - } - emscripten::val fluid_coefs() const { - return emscripten::val(emscripten::typed_memory_view(5, ptr_->fluid_coefs)); - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - emscripten::val rgba() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); - } - int group() const { - return ptr_->group; - } - void set_group(int value) { - ptr_->group = value; - } - mjString hfieldname() const { - return (ptr_ && ptr_->hfieldname) ? *(ptr_->hfieldname) : ""; - } - void set_hfieldname(const mjString& value) { - if (ptr_ && ptr_->hfieldname) { - *(ptr_->hfieldname) = value; - } - } - mjString meshname() const { - return (ptr_ && ptr_->meshname) ? *(ptr_->meshname) : ""; - } - void set_meshname(const mjString& value) { - if (ptr_ && ptr_->meshname) { - *(ptr_->meshname) = value; - } - } - double fitscale() const { - return ptr_->fitscale; - } - void set_fitscale(double value) { - ptr_->fitscale = value; - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsGeom* ptr_; - - public: - MjsElement element; - MjsOrientation alt; - MjsPlugin plugin; -}; - -struct MjsMesh { - explicit MjsMesh(mjsMesh *ptr); - mjsMesh* get() const; - void set(mjsMesh* ptr); - mjString content_type() const { - return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; - } - void set_content_type(const mjString& value) { - if (ptr_ && ptr_->content_type) { - *(ptr_->content_type) = value; - } - } - mjString file() const { - return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; - } - void set_file(const mjString& value) { - if (ptr_ && ptr_->file) { - *(ptr_->file) = value; - } - } - emscripten::val refpos() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->refpos)); - } - emscripten::val refquat() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->refquat)); - } - emscripten::val scale() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->scale)); - } - mjtMeshInertia inertia() const { - return ptr_->inertia; - } - void set_inertia(mjtMeshInertia value) { - ptr_->inertia = value; - } - mjtByte smoothnormal() const { - return ptr_->smoothnormal; - } - void set_smoothnormal(mjtByte value) { - ptr_->smoothnormal = value; - } - mjtByte needsdf() const { - return ptr_->needsdf; - } - void set_needsdf(mjtByte value) { - ptr_->needsdf = value; - } - int maxhullvert() const { - return ptr_->maxhullvert; - } - void set_maxhullvert(int value) { - ptr_->maxhullvert = value; - } - mjFloatVec &uservert() const { - return *(ptr_->uservert); - } - mjFloatVec &usernormal() const { - return *(ptr_->usernormal); - } - mjFloatVec &usertexcoord() const { - return *(ptr_->usertexcoord); - } - mjIntVec &userface() const { - return *(ptr_->userface); - } - mjIntVec &userfacenormal() const { - return *(ptr_->userfacenormal); - } - mjIntVec &userfacetexcoord() const { - return *(ptr_->userfacetexcoord); - } - mjString material() const { - return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; - } - void set_material(const mjString& value) { - if (ptr_ && ptr_->material) { - *(ptr_->material) = value; - } - } - int octree_maxdepth() const { - return ptr_->octree_maxdepth; - } - void set_octree_maxdepth(int value) { - ptr_->octree_maxdepth = value; - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsMesh* ptr_; - - public: - MjsElement element; - MjsPlugin plugin; -}; - -struct MjsSensor { - explicit MjsSensor(mjsSensor *ptr); - mjsSensor* get() const; - void set(mjsSensor* ptr); - mjtSensor type() const { - return ptr_->type; - } - void set_type(mjtSensor value) { - ptr_->type = value; - } - mjtObj objtype() const { - return ptr_->objtype; - } - void set_objtype(mjtObj value) { - ptr_->objtype = value; - } - mjString objname() const { - return (ptr_ && ptr_->objname) ? *(ptr_->objname) : ""; - } - void set_objname(const mjString& value) { - if (ptr_ && ptr_->objname) { - *(ptr_->objname) = value; - } - } - mjtObj reftype() const { - return ptr_->reftype; - } - void set_reftype(mjtObj value) { - ptr_->reftype = value; - } - mjString refname() const { - return (ptr_ && ptr_->refname) ? *(ptr_->refname) : ""; - } - void set_refname(const mjString& value) { - if (ptr_ && ptr_->refname) { - *(ptr_->refname) = value; - } - } - emscripten::val intprm() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->intprm)); - } - mjtDataType datatype() const { - return ptr_->datatype; - } - void set_datatype(mjtDataType value) { - ptr_->datatype = value; - } - mjtStage needstage() const { - return ptr_->needstage; - } - void set_needstage(mjtStage value) { - ptr_->needstage = value; - } - int dim() const { - return ptr_->dim; - } - void set_dim(int value) { - ptr_->dim = value; - } - double cutoff() const { - return ptr_->cutoff; - } - void set_cutoff(double value) { - ptr_->cutoff = value; - } - double noise() const { - return ptr_->noise; - } - void set_noise(double value) { - ptr_->noise = value; - } - int nsample() const { - return ptr_->nsample; - } - void set_nsample(int value) { - ptr_->nsample = value; - } - int interp() const { - return ptr_->interp; - } - void set_interp(int value) { - ptr_->interp = value; - } - double delay() const { - return ptr_->delay; - } - void set_delay(double value) { - ptr_->delay = value; - } - emscripten::val interval() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->interval)); - } - mjDoubleVec &userdata() const { - return *(ptr_->userdata); - } - mjString info() const { - return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; - } - void set_info(const mjString& value) { - if (ptr_ && ptr_->info) { - *(ptr_->info) = value; - } - } - - private: - mjsSensor* ptr_; - - public: - MjsElement element; - MjsPlugin plugin; -}; - -struct MjData { - ~MjData(); - MjData(MjModel *m); - explicit MjData(const MjModel &, const MjData &); - std::vector contact() const; - std::unique_ptr copy(); - mjData* get() const; - void set(mjData* ptr); - int narena() const { - return static_cast(ptr_->narena); - } - void set_narena(int value) { - ptr_->narena = static_cast(value); - } - int nbuffer() const { - return static_cast(ptr_->nbuffer); - } - void set_nbuffer(int value) { - ptr_->nbuffer = static_cast(value); - } - int nplugin() const { - return ptr_->nplugin; - } - void set_nplugin(int value) { - ptr_->nplugin = value; - } - size_t pstack() const { - return ptr_->pstack; - } - void set_pstack(size_t value) { - ptr_->pstack = value; - } - size_t pbase() const { - return ptr_->pbase; - } - void set_pbase(size_t value) { - ptr_->pbase = value; - } - size_t parena() const { - return ptr_->parena; - } - void set_parena(size_t value) { - ptr_->parena = value; - } - uintptr_t threadpool() const { - return ptr_->threadpool; - } - void set_threadpool(uintptr_t value) { - ptr_->threadpool = value; - } - mjtBool threadlock() const { - return ptr_->threadlock; - } - void set_threadlock(mjtBool value) { - ptr_->threadlock = value; - } - int maxuse_stack() const { - return static_cast(ptr_->maxuse_stack); - } - void set_maxuse_stack(int value) { - ptr_->maxuse_stack = static_cast(value); - } - int maxuse_arena() const { - return static_cast(ptr_->maxuse_arena); - } - void set_maxuse_arena(int value) { - ptr_->maxuse_arena = static_cast(value); - } - int maxuse_con() const { - return ptr_->maxuse_con; - } - void set_maxuse_con(int value) { - ptr_->maxuse_con = value; - } - int maxuse_efc() const { - return ptr_->maxuse_efc; - } - void set_maxuse_efc(int value) { - ptr_->maxuse_efc = value; - } - emscripten::val solver_niter() const { - return emscripten::val(emscripten::typed_memory_view(20, ptr_->solver_niter)); - } - emscripten::val solver_nnz() const { - return emscripten::val(emscripten::typed_memory_view(20, ptr_->solver_nnz)); - } - emscripten::val solver_fwdinv() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->solver_fwdinv)); - } - int ncon() const { - return ptr_->ncon; - } - void set_ncon(int value) { - ptr_->ncon = value; - } - int ne() const { - return ptr_->ne; - } - void set_ne(int value) { - ptr_->ne = value; - } - int nf() const { - return ptr_->nf; - } - void set_nf(int value) { - ptr_->nf = value; - } - int nl() const { - return ptr_->nl; - } - void set_nl(int value) { - ptr_->nl = value; - } - int nefc() const { - return ptr_->nefc; - } - void set_nefc(int value) { - ptr_->nefc = value; - } - int nJ() const { - return ptr_->nJ; - } - void set_nJ(int value) { - ptr_->nJ = value; - } - int nY() const { - return ptr_->nY; - } - void set_nY(int value) { - ptr_->nY = value; - } - int nA() const { - return ptr_->nA; - } - void set_nA(int value) { - ptr_->nA = value; - } - int nisland() const { - return ptr_->nisland; - } - void set_nisland(int value) { - ptr_->nisland = value; - } - int nidof() const { - return ptr_->nidof; - } - void set_nidof(int value) { - ptr_->nidof = value; - } - int ntree_awake() const { - return ptr_->ntree_awake; - } - void set_ntree_awake(int value) { - ptr_->ntree_awake = value; - } - int nbody_awake() const { - return ptr_->nbody_awake; - } - void set_nbody_awake(int value) { - ptr_->nbody_awake = value; - } - int nparent_awake() const { - return ptr_->nparent_awake; - } - void set_nparent_awake(int value) { - ptr_->nparent_awake = value; - } - int nv_awake() const { - return ptr_->nv_awake; - } - void set_nv_awake(int value) { - ptr_->nv_awake = value; - } - mjtBool flg_energypos() const { - return ptr_->flg_energypos; - } - void set_flg_energypos(mjtBool value) { - ptr_->flg_energypos = value; - } - mjtBool flg_energyvel() const { - return ptr_->flg_energyvel; - } - void set_flg_energyvel(mjtBool value) { - ptr_->flg_energyvel = value; - } - mjtBool flg_subtreevel() const { - return ptr_->flg_subtreevel; - } - void set_flg_subtreevel(mjtBool value) { - ptr_->flg_subtreevel = value; - } - mjtBool flg_rnepost() const { - return ptr_->flg_rnepost; - } - void set_flg_rnepost(mjtBool value) { - ptr_->flg_rnepost = value; - } - mjtNum time() const { - return ptr_->time; - } - void set_time(mjtNum value) { - ptr_->time = value; - } - emscripten::val energy() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->energy)); - } - emscripten::val buffer() const { - return emscripten::val(emscripten::typed_memory_view(model->nbuffer, static_cast(ptr_->buffer))); - } - emscripten::val arena() const { - return emscripten::val(emscripten::typed_memory_view(model->narena, static_cast(ptr_->arena))); - } - emscripten::val qpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nq, ptr_->qpos)); - } - emscripten::val qvel() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qvel)); - } - emscripten::val act() const { - return emscripten::val(emscripten::typed_memory_view(model->na, ptr_->act)); - } - emscripten::val history() const { - return emscripten::val(emscripten::typed_memory_view(model->nhistory, ptr_->history)); - } - emscripten::val qacc_warmstart() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc_warmstart)); - } - emscripten::val plugin_state() const { - return emscripten::val(emscripten::typed_memory_view(model->npluginstate, ptr_->plugin_state)); - } - emscripten::val ctrl() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->ctrl)); - } - emscripten::val qfrc_applied() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_applied)); - } - emscripten::val xfrc_applied() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->xfrc_applied)); - } - emscripten::val eq_active() const { - return emscripten::val(emscripten::typed_memory_view(model->neq, ptr_->eq_active)); - } - emscripten::val mocap_pos() const { - return emscripten::val(emscripten::typed_memory_view(model->nmocap * 3, ptr_->mocap_pos)); - } - emscripten::val mocap_quat() const { - return emscripten::val(emscripten::typed_memory_view(model->nmocap * 4, ptr_->mocap_quat)); - } - emscripten::val qacc() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc)); - } - emscripten::val act_dot() const { - return emscripten::val(emscripten::typed_memory_view(model->na, ptr_->act_dot)); - } - emscripten::val userdata() const { - return emscripten::val(emscripten::typed_memory_view(model->nuserdata, ptr_->userdata)); - } - emscripten::val sensordata() const { - return emscripten::val(emscripten::typed_memory_view(model->nsensordata, ptr_->sensordata)); - } - emscripten::val tree_asleep() const { - return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_asleep)); - } - emscripten::val plugin() const { - return emscripten::val(emscripten::typed_memory_view(model->nplugin, ptr_->plugin)); - } - emscripten::val plugin_data() const { - return emscripten::val(emscripten::typed_memory_view(model->nplugin, ptr_->plugin_data)); - } - emscripten::val xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->xpos)); - } - emscripten::val xquat() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 4, ptr_->xquat)); - } - emscripten::val xmat() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 9, ptr_->xmat)); - } - emscripten::val xipos() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->xipos)); - } - emscripten::val ximat() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 9, ptr_->ximat)); - } - emscripten::val xanchor() const { - return emscripten::val(emscripten::typed_memory_view(model->njnt * 3, ptr_->xanchor)); - } - emscripten::val xaxis() const { - return emscripten::val(emscripten::typed_memory_view(model->njnt * 3, ptr_->xaxis)); - } - emscripten::val geom_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->ngeom * 3, ptr_->geom_xpos)); - } - emscripten::val geom_xmat() const { - return emscripten::val(emscripten::typed_memory_view(model->ngeom * 9, ptr_->geom_xmat)); - } - emscripten::val site_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nsite * 3, ptr_->site_xpos)); - } - emscripten::val site_xmat() const { - return emscripten::val(emscripten::typed_memory_view(model->nsite * 9, ptr_->site_xmat)); - } - emscripten::val cam_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->ncam * 3, ptr_->cam_xpos)); - } - emscripten::val cam_xmat() const { - return emscripten::val(emscripten::typed_memory_view(model->ncam * 9, ptr_->cam_xmat)); - } - emscripten::val light_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nlight * 3, ptr_->light_xpos)); - } - emscripten::val light_xdir() const { - return emscripten::val(emscripten::typed_memory_view(model->nlight * 3, ptr_->light_xdir)); - } - emscripten::val subtree_com() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_com)); - } - emscripten::val cdof() const { - return emscripten::val(emscripten::typed_memory_view(model->nv * 6, ptr_->cdof)); - } - emscripten::val cinert() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 10, ptr_->cinert)); - } - emscripten::val flexvert_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nflexvert * 3, ptr_->flexvert_xpos)); - } - emscripten::val flexelem_aabb() const { - return emscripten::val(emscripten::typed_memory_view(model->nflexelem * 6, ptr_->flexelem_aabb)); - } - emscripten::val flexedge_J() const { - return emscripten::val(emscripten::typed_memory_view(model->nJfe, ptr_->flexedge_J)); - } - emscripten::val flexedge_length() const { - return emscripten::val(emscripten::typed_memory_view(model->nflexedge, ptr_->flexedge_length)); - } - emscripten::val flexvert_J() const { - return emscripten::val(emscripten::typed_memory_view(model->nJfv * 2, ptr_->flexvert_J)); - } - emscripten::val flexvert_length() const { - return emscripten::val(emscripten::typed_memory_view(model->nflexvert * 2, ptr_->flexvert_length)); - } - emscripten::val bvh_aabb_dyn() const { - return emscripten::val(emscripten::typed_memory_view(model->nbvhdynamic * 6, ptr_->bvh_aabb_dyn)); - } - emscripten::val ten_wrapadr() const { - return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_wrapadr)); - } - emscripten::val ten_wrapnum() const { - return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_wrapnum)); - } - emscripten::val ten_J() const { - return emscripten::val(emscripten::typed_memory_view(model->nJten, ptr_->ten_J)); - } - emscripten::val ten_length() const { - return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_length)); - } - emscripten::val wrap_obj() const { - return emscripten::val(emscripten::typed_memory_view(model->nwrap * 2, ptr_->wrap_obj)); - } - emscripten::val wrap_xpos() const { - return emscripten::val(emscripten::typed_memory_view(model->nwrap * 6, ptr_->wrap_xpos)); - } - emscripten::val actuator_length() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_length)); - } - emscripten::val moment_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->moment_rownnz)); - } - emscripten::val moment_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->moment_rowadr)); - } - emscripten::val moment_colind() const { - return emscripten::val(emscripten::typed_memory_view(model->nJmom, ptr_->moment_colind)); - } - emscripten::val actuator_moment() const { - return emscripten::val(emscripten::typed_memory_view(model->nJmom, ptr_->actuator_moment)); - } - emscripten::val crb() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 10, ptr_->crb)); - } - emscripten::val qM() const { - return emscripten::val(emscripten::typed_memory_view(model->nM, ptr_->qM)); - } - emscripten::val M() const { - return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->M)); - } - emscripten::val qLD() const { - return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->qLD)); - } - emscripten::val qLDiagInv() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qLDiagInv)); - } - emscripten::val bvh_active() const { - return emscripten::val(emscripten::typed_memory_view(model->nbvh, ptr_->bvh_active)); - } - emscripten::val tree_awake() const { - return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_awake)); - } - emscripten::val body_awake() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->body_awake)); - } - emscripten::val body_awake_ind() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->body_awake_ind)); - } - emscripten::val parent_awake_ind() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->parent_awake_ind)); - } - emscripten::val dof_awake_ind() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->dof_awake_ind)); - } - emscripten::val flexedge_velocity() const { - return emscripten::val(emscripten::typed_memory_view(model->nflexedge, ptr_->flexedge_velocity)); - } - emscripten::val ten_velocity() const { - return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_velocity)); - } - emscripten::val actuator_velocity() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_velocity)); - } - emscripten::val cvel() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cvel)); - } - emscripten::val cdof_dot() const { - return emscripten::val(emscripten::typed_memory_view(model->nv * 6, ptr_->cdof_dot)); - } - emscripten::val qfrc_bias() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_bias)); - } - emscripten::val qfrc_spring() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_spring)); - } - emscripten::val qfrc_damper() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_damper)); - } - emscripten::val qfrc_gravcomp() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_gravcomp)); - } - emscripten::val qfrc_fluid() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_fluid)); - } - emscripten::val qfrc_passive() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_passive)); - } - emscripten::val subtree_linvel() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_linvel)); - } - emscripten::val subtree_angmom() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_angmom)); - } - emscripten::val qH() const { - return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->qH)); - } - emscripten::val qHDiagInv() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qHDiagInv)); - } - emscripten::val qDeriv() const { - return emscripten::val(emscripten::typed_memory_view(model->nD, ptr_->qDeriv)); - } - emscripten::val qLU() const { - return emscripten::val(emscripten::typed_memory_view(model->nD, ptr_->qLU)); - } - emscripten::val actuator_force() const { - return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_force)); - } - emscripten::val qfrc_actuator() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_actuator)); - } - emscripten::val qfrc_smooth() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_smooth)); - } - emscripten::val qacc_smooth() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc_smooth)); - } - emscripten::val qfrc_constraint() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_constraint)); - } - emscripten::val qfrc_inverse() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_inverse)); - } - emscripten::val cacc() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cacc)); - } - emscripten::val cfrc_int() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cfrc_int)); - } - emscripten::val cfrc_ext() const { - return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cfrc_ext)); - } - // contact field is handled manually in template file struct declaration - emscripten::val efc_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_type)); - } - emscripten::val efc_id() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_id)); - } - emscripten::val efc_J_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rownnz)); - } - emscripten::val efc_J_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rowadr)); - } - emscripten::val efc_J_rowsuper() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rowsuper)); - } - emscripten::val efc_J_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nJ, ptr_->efc_J_colind)); - } - emscripten::val efc_J() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nJ, ptr_->efc_J)); - } - emscripten::val efc_pos() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_pos)); - } - emscripten::val efc_margin() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_margin)); - } - emscripten::val efc_frictionloss() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_frictionloss)); - } - emscripten::val efc_diagA() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_diagA)); - } - emscripten::val efc_KBIP() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc * 4, ptr_->efc_KBIP)); - } - emscripten::val efc_D() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_D)); - } - emscripten::val efc_R() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_R)); - } - emscripten::val tendon_efcadr() const { - return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->tendon_efcadr)); - } - emscripten::val tree_island() const { - return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_island)); - } - emscripten::val island_ntree() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_ntree)); - } - emscripten::val island_itreeadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_itreeadr)); - } - emscripten::val map_itree2tree() const { - return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->map_itree2tree)); - } - emscripten::val dof_island() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->dof_island)); - } - emscripten::val island_nv() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nv)); - } - emscripten::val island_idofadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_idofadr)); - } - emscripten::val island_dofadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_dofadr)); - } - emscripten::val map_dof2idof() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->map_dof2idof)); - } - emscripten::val map_idof2dof() const { - return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->map_idof2dof)); - } - emscripten::val ifrc_smooth() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->ifrc_smooth)); - } - emscripten::val iacc_smooth() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->iacc_smooth)); - } - emscripten::val iacc() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->iacc)); - } - emscripten::val efc_island() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_island)); - } - emscripten::val island_ne() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_ne)); - } - emscripten::val island_nf() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nf)); - } - emscripten::val island_nefc() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nefc)); - } - emscripten::val island_iefcadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_iefcadr)); - } - emscripten::val map_efc2iefc() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->map_efc2iefc)); - } - emscripten::val map_iefc2efc() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->map_iefc2efc)); - } - emscripten::val iefc_type() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_type)); - } - emscripten::val iefc_id() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_id)); - } - emscripten::val iefc_frictionloss() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_frictionloss)); - } - emscripten::val iefc_D() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_D)); - } - emscripten::val iefc_R() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_R)); - } - emscripten::val efc_Y_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_Y_rownnz)); - } - emscripten::val efc_Y_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_Y_rowadr)); - } - emscripten::val efc_Y_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nY, ptr_->efc_Y_colind)); - } - emscripten::val efc_Y() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nY, ptr_->efc_Y)); - } - emscripten::val efc_AR_rownnz() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_AR_rownnz)); - } - emscripten::val efc_AR_rowadr() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_AR_rowadr)); - } - emscripten::val efc_AR_colind() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nA, ptr_->efc_AR_colind)); - } - emscripten::val efc_AR() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nA, ptr_->efc_AR)); - } - emscripten::val efc_vel() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_vel)); - } - emscripten::val efc_aref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_aref)); - } - emscripten::val efc_b() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_b)); - } - emscripten::val iefc_aref() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_aref)); - } - emscripten::val iefc_state() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_state)); - } - emscripten::val iefc_force() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_force)); - } - emscripten::val efc_state() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_state)); - } - emscripten::val efc_force() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_force)); - } - emscripten::val ifrc_constraint() const { - return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->ifrc_constraint)); - } - uint64_t signature() const { - return ptr_->signature; - } - void set_signature(uint64_t value) { - ptr_->signature = value; - } - // Generates functions to return accessor classes. - #define X_ACCESSOR(NAME, Name, OBJTYPE, accessor_name, nfield) \ - MjData##Name##Accessor accessor_name(const NumberOrString& val) const { \ - if (val.isString()) { \ - int id = mj_name2id(model, OBJTYPE, val.as().c_str()); \ - if (id == -1) { \ - mju_error("%s", KeyErrorMessage(model, OBJTYPE, model->nfield, val.as(), #accessor_name).c_str()); \ - } \ - return MjData##Name##Accessor(ptr_, model, id); \ - } else if (val.isNumber()) { \ - int id = val.as(); \ - if (id < 0 || id >= model->nfield) { \ - mju_error("%s", IndexErrorMessage(id, model->nfield, #accessor_name).c_str()); \ - } \ - return MjData##Name##Accessor(ptr_, model, id); \ - } else { \ - mju_error(#accessor_name "() argument must be a string or number"); \ - return MjData##Name##Accessor(nullptr, nullptr, 0); \ - } \ - } - MJDATA_ACCESSORS - #undef X_ACCESSOR - - private: - mjData* ptr_; - - public: - std::vector solver; - std::vector warning; - std::vector timer; - mjModel *model; -}; - -struct MjsDefault { - explicit MjsDefault(mjsDefault *ptr); - mjsDefault* get() const; - void set(mjsDefault* ptr); - - private: - mjsDefault* ptr_; - - public: - MjsElement element; - MjsJoint joint; - MjsGeom geom; - MjsSite site; - MjsCamera camera; - MjsLight light; - MjsFlex flex; - MjsMesh mesh; - MjsMaterial material; - MjsPair pair; - MjsEquality equality; - MjsTendon tendon; - MjsActuator actuator; -}; - - MjContact::MjContact(mjContact *ptr) : ptr_(ptr) {} MjContact::~MjContact() { if (owned_ && ptr_) { @@ -8250,239 +1094,6 @@ void MjsDefault::set(mjsDefault* ptr) { } -struct MjvScene { - MjvScene(); - MjvScene(MjModel *m, int maxgeom); - ~MjvScene(); - std::unique_ptr copy(); - int GetSumFlexFaces() const; - - mjvScene* get() const; - void set(mjvScene* ptr); - - std::vector geoms() const; - - emscripten::val geomorder() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->ngeom, ptr_->geomorder)); - } - emscripten::val flexedgeadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgeadr)); - } - emscripten::val flexedgenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgenum)); - } - emscripten::val flexvertadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertadr)); - } - emscripten::val flexvertnum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertnum)); - } - emscripten::val flexfaceadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceadr)); - } - emscripten::val flexfacenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfacenum)); - } - emscripten::val flexfaceused() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceused)); - } - emscripten::val flexedge() const { - return emscripten::val( - emscripten::typed_memory_view(2 * model->nflexedge, ptr_->flexedge)); - } - emscripten::val flexvert() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nflexvert, ptr_->flexvert)); - } - emscripten::val skinfacenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinfacenum)); - } - emscripten::val skinvertadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertadr)); - } - emscripten::val skinvertnum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertnum)); - } - emscripten::val skinvert() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinvert)); - } - emscripten::val skinnormal() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinnormal)); - } - emscripten::val flexface() const { - return emscripten::val(emscripten::typed_memory_view( - 9 * MjvScene::GetSumFlexFaces(), ptr_->flexface)); - } - emscripten::val flexnormal() const { - return emscripten::val(emscripten::typed_memory_view( - 9 * MjvScene::GetSumFlexFaces(), ptr_->flexnormal)); - } - emscripten::val flextexcoord() const { - return emscripten::val(emscripten::typed_memory_view( - 6 * MjvScene::GetSumFlexFaces(), ptr_->flextexcoord)); - } - // camera field is handled manually in template file struct declaration - // flexedge field is handled manually in template file struct declaration - // flexedgeadr field is handled manually in template file struct declaration - // flexedgenum field is handled manually in template file struct declaration - // flexface field is handled manually in template file struct declaration - // flexfaceadr field is handled manually in template file struct declaration - // flexfacenum field is handled manually in template file struct declaration - // flexfaceused field is handled manually in template file struct declaration - // flexnormal field is handled manually in template file struct declaration - // flextexcoord field is handled manually in template file struct declaration - // flexvert field is handled manually in template file struct declaration - // flexvertadr field is handled manually in template file struct declaration - // flexvertnum field is handled manually in template file struct declaration - // geomorder field is handled manually in template file struct declaration - // geoms field is handled manually in template file struct declaration - // lights field is handled manually in template file struct declaration - // skinfacenum field is handled manually in template file struct declaration - // skinnormal field is handled manually in template file struct declaration - // skinvert field is handled manually in template file struct declaration - // skinvertadr field is handled manually in template file struct declaration - // skinvertnum field is handled manually in template file struct declaration - emscripten::val flags() const { - return emscripten::val(emscripten::typed_memory_view(11, ptr_->flags)); - } - emscripten::val framergb() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->framergb)); - } - emscripten::val rotate() const { - return emscripten::val(emscripten::typed_memory_view(4, ptr_->rotate)); - } - emscripten::val translate() const { - return emscripten::val(emscripten::typed_memory_view(3, ptr_->translate)); - } - float scale() const { - return ptr_->scale; - } - void set_scale(float value) { - ptr_->scale = value; - } - int framewidth() const { - return ptr_->framewidth; - } - void set_framewidth(int value) { - ptr_->framewidth = value; - } - int maxgeom() const { - return ptr_->maxgeom; - } - void set_maxgeom(int value) { - ptr_->maxgeom = value; - } - int nflex() const { - return ptr_->nflex; - } - void set_nflex(int value) { - ptr_->nflex = value; - } - int ngeom() const { - return ptr_->ngeom; - } - void set_ngeom(int value) { - ptr_->ngeom = value; - } - int nlight() const { - return ptr_->nlight; - } - void set_nlight(int value) { - ptr_->nlight = value; - } - int nskin() const { - return ptr_->nskin; - } - void set_nskin(int value) { - ptr_->nskin = value; - } - int status() const { - return ptr_->status; - } - void set_status(int value) { - ptr_->status = value; - } - int stereo() const { - return ptr_->stereo; - } - void set_stereo(int value) { - ptr_->stereo = value; - } - mjtByte enabletransform() const { - return ptr_->enabletransform; - } - void set_enabletransform(mjtByte value) { - ptr_->enabletransform = value; - } - mjtByte flexedgeopt() const { - return ptr_->flexedgeopt; - } - void set_flexedgeopt(mjtByte value) { - ptr_->flexedgeopt = value; - } - mjtByte flexfaceopt() const { - return ptr_->flexfaceopt; - } - void set_flexfaceopt(mjtByte value) { - ptr_->flexfaceopt = value; - } - mjtByte flexskinopt() const { - return ptr_->flexskinopt; - } - void set_flexskinopt(mjtByte value) { - ptr_->flexskinopt = value; - } - mjtByte flexvertopt() const { - return ptr_->flexvertopt; - } - void set_flexvertopt(mjtByte value) { - ptr_->flexvertopt = value; - } - - private: - mjvScene* ptr_; - bool owned_ = false; - - public: - mjModel *model; - std::vector lights; - std::vector camera; -}; - -struct MjVFS { - MjVFS() : ptr_(new mjVFS) { mj_defaultVFS(ptr_); } - ~MjVFS() { - mj_deleteVFS(ptr_); - } - void AddBuffer(const std::string& name, const emscripten::val& buffer) { - std::vector vec = emscripten::vecFromJSArray(buffer); - int result = mj_addBufferVFS(ptr_, name.c_str(), vec.data(), vec.size()); - if (result != 0) { - mju_error("Could not add buffer to VFS: %d", result); - } - } - void DeleteFile(const std::string& filename) { - mj_deleteFileVFS(ptr_, filename.c_str()); - } - mjVFS* get() const { return ptr_; } - - private: - mjVFS* ptr_; -}; - MjModel::MjModel(mjModel* ptr) : ptr_(ptr), opt(&ptr->opt), vis(&ptr->vis), stat(&ptr->stat) {} @@ -8739,6 +1350,15 @@ std::unique_ptr parseXMLString_wrapper(const std::string &xml) { return std::unique_ptr(new MjSpec(ptr)); } +std::unique_ptr parseXMLString_wrapper_2(const std::string &xml, const MjVFS& vfs) { + char error[1000]; + mjSpec *ptr = mj_parseXMLString(xml.c_str(), vfs.get(), error, sizeof(error)); + if (!ptr) { + mju_error("Could not create Spec from XML string: %s\n", error); + } + return std::unique_ptr(new MjSpec(ptr)); +} + std::unique_ptr mj_compile_wrapper_1(const MjSpec& spec) { mjSpec* spec_ptr = spec.get(); @@ -13961,7 +6581,9 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) { function("mjv_updateCamera", &mjv_updateCamera_wrapper); function("mjv_updateScene", &mjv_updateScene_wrapper); function("mjv_updateSkin", &mjv_updateSkin_wrapper); - function("parseXMLString", &parseXMLString_wrapper, take_ownership()); + // parseXMLString is bound using two overloads to handle the optional MjVFS argument. + function("parseXMLString", emscripten::select_overload(const std::string&)>(&parseXMLString_wrapper), take_ownership()); + function("parseXMLString", emscripten::select_overload(const std::string&, const MjVFS&)>(&parseXMLString_wrapper_2), take_ownership()); function("error", &error_wrapper); function("mj_saveModel", &mj_saveModel_wrapper); function("mj_saveLastXML", &mj_saveLastXML_wrapper); diff --git a/wasm/codegen/generated/bindings.h b/wasm/codegen/generated/bindings.h new file mode 100644 index 00000000..24ca89fa --- /dev/null +++ b/wasm/codegen/generated/bindings.h @@ -0,0 +1,7451 @@ +// Copyright 2025 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// DO NOT EDIT. THIS FILE IS AUTOMATICALLY GENERATED. + +// NOLINTBEGIN(whitespace/line_length) +// NOLINTBEGIN(whitespace/semicolon) + +#ifndef MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ +#define MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include // NOLINT +#include +#include // NOLINT +#include +#include // NOLINT +#include +#include + +#include +#include +#include +#include +#include "engine/engine_util_errmem.h" +#include "wasm/unpack.h" +#include "python/mujoco/indexer_xmacro.h" + +namespace mujoco::wasm { + +using emscripten::enum_; +using emscripten::function; +using emscripten::typed_memory_view; +using emscripten::val; +using emscripten::return_value_policy::reference; +using emscripten::return_value_policy::take_ownership; + +EMSCRIPTEN_DECLARE_VAL_TYPE(NumberOrString); +EMSCRIPTEN_DECLARE_VAL_TYPE(NumberArray); +EMSCRIPTEN_DECLARE_VAL_TYPE(String); +EMSCRIPTEN_DECLARE_VAL_TYPE(StringOrNull); + +// Macro to define accessors for different MuJoCo object types within mjModel. +// Each line calls X_ACCESSOR with the following arguments: +// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). +// 2. Name: The object type name in CamelCase (e.g., Actuator). +// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). +// 4. field: The name of the array field in mjModel (e.g., actuator). +// 5. nfield: The name of the count field in mjModel (e.g., nu). +#define MJMODEL_ACCESSORS \ + X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ + X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ + X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ + X_ACCESSOR( EQUALITY, Equality, mjOBJ_EQUALITY, eq, neq ) \ + X_ACCESSOR( EXCLUDE, Exclude, mjOBJ_EXCLUDE, exclude, nexclude ) \ + X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ + X_ACCESSOR( HFIELD, Hfield, mjOBJ_HFIELD, hfield, nhfield ) \ + X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ + X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ + X_ACCESSOR( MATERIAL, Material, mjOBJ_MATERIAL, mat, nmat ) \ + X_ACCESSOR( MESH, Mesh, mjOBJ_MESH, mesh, nmesh ) \ + X_ACCESSOR( NUMERIC, Numeric, mjOBJ_NUMERIC, numeric, nnumeric ) \ + X_ACCESSOR( PAIR, Pair, mjOBJ_PAIR, pair, npair ) \ + X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ + X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ + X_ACCESSOR( SKIN, Skin, mjOBJ_SKIN, skin, nskin ) \ + X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) \ + X_ACCESSOR( TEXTURE, Texture, mjOBJ_TEXTURE, tex, ntex ) \ + X_ACCESSOR( TUPLE, Tuple, mjOBJ_TUPLE, tuple, ntuple ) \ + X_ACCESSOR( KEYFRAME, Keyframe, mjOBJ_KEY, key, nkey ) + +// Macro to define accessors for different MuJoCo object types within mjData. +// Each line calls X_ACCESSOR with the following arguments: +// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). +// 2. Name: The object type name in CamelCase (e.g., Actuator). +// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). +// 4. field: The name of the array field in mjData (e.g., actuator). +// 5. nfield: The name of the count field in mjModel (e.g., nu). +#define MJDATA_ACCESSORS \ + X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ + X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ + X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ + X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ + X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ + X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ + X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ + X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ + X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) + +// Raises an error if the given val is null or undefined. +// A macro is used so that the error contains the name of the variable. +// TODO(matijak): Remove this when we can handle strings using UNPACK_STRING? +#define CHECK_VAL(val) \ + if (val.isNull()) { \ + mju_error("Invalid argument: %s is null", #val); \ + } else if (val.isUndefined()) { \ + mju_error("Invalid argument: %s is undefined", #val); \ + } + +std::string KeyErrorMessage(const mjModel* model, int objtype, int count, + std::string_view name, std::string_view accessor_name); + +std::string IndexErrorMessage(int index, int count, + std::string_view accessor_name); + +using mjVisualGlobal = decltype(::mjVisual::global); +using mjVisualHeadlight = decltype(::mjVisual::headlight); +using mjVisualMap = decltype(::mjVisual::map); +using mjVisualQuality = decltype(::mjVisual::quality); +using mjVisualRgba = decltype(::mjVisual::rgba); +using mjVisualScale = decltype(::mjVisual::scale); + +#undef MJ_M +#define MJ_M(n) model_->n +// The X macro expands to a member function within an MjModel...Accessor struct. +// This function returns an emscripten::val, typically a typed memory view, +// providing access to array data within the underlying mjModel. The size and +// offset of the memory view are determined by the arguments: +// - type: The C++ type of the array elements (e.g., mjtNum, int). +// - prefix: The prefix of the field name in mjModel (e.g., jnt_, geom_). +// - var: The name of the field being accessed (e.g., qposadr, size). +// - dim0: Used to determine special indexing logic for dynamically sized arrays +// like joints (nq, nv), hfields, textures, numerics, and tuples. +// - dim1: The fixed dimension of the array if not dynamically sized. If "1", +// a single element is returned. Otherwise, it's used as the stride +// for the typed memory view. +#define X(type, prefix, var, dim0, dim1) \ + emscripten::val get_##var() const { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + return val(typed_memory_view(end - start, model_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + return val(typed_memory_view(end - start, model_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ + int start = model_->hfield_adr[id_]; \ + int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ + return val(typed_memory_view(count, model_->hfield_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ + int start = model_->tex_adr[id_]; \ + int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ + return val(typed_memory_view(count, model_->tex_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ + int start = model_->numeric_adr[id_]; \ + int count = model_->numeric_size[id_]; \ + return val(typed_memory_view(count, model_->numeric_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ + int start = model_->tuple_adr[id_]; \ + int count = model_->tuple_size[id_]; \ + return val(typed_memory_view(count, model_->prefix##var + start)); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(model_->prefix##var[id_]); \ + } else { \ + return val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)); \ + } \ + } \ + } \ + void set_##var(const emscripten::val& value) { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + val(typed_memory_view(end - start, model_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + val(typed_memory_view(end - start, model_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ + int start = model_->hfield_adr[id_]; \ + int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ + val(typed_memory_view(count, model_->hfield_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ + int start = model_->tex_adr[id_]; \ + int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ + val(typed_memory_view(count, model_->tex_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ + int start = model_->numeric_adr[id_]; \ + int count = model_->numeric_size[id_]; \ + val(typed_memory_view(count, model_->numeric_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ + int start = model_->tuple_adr[id_]; \ + int count = model_->tuple_size[id_]; \ + val(typed_memory_view(count, model_->prefix##var + start)) \ + .call("set", value); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + model_->prefix##var[id_] = value.as(); \ + } else { \ + val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)) \ + .call("set", value); \ + } \ + } \ + } + +// Expands to a struct definition for each object type in MJMODEL_ACCESSORS. +// Each struct, named `MjModel{Name}Accessor`, provides: +// - A constructor taking an `mjModel*` and an integer `id`. +// - An `id()` method to get the object's index. +// - A `name()` method to get the object's name using `mj_id2name`. +// - Member functions generated by the `MJMODEL_##NAME` macro, which in turn +// uses the `X` macro to define accessors for fields within `mjModel`. +#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ + struct MjModel##Name##Accessor { \ + MjModel##Name##Accessor(mjModel* model, int id) : model_(model), id_(id) {} \ + \ + int id() const { return id_; } \ + std::string name() const { \ + const char* name = mj_id2name(model_, OBJTYPE, id_); \ + return name ? name : ""; \ + } \ + \ + MJMODEL_##NAME \ + \ + private: \ + mjModel* model_; \ + int id_; \ + }; +MJMODEL_ACCESSORS +#undef X_ACCESSOR + +// Expands to a struct definition for each object type in MJDATA_ACCESSORS. +// Each struct, named `MjData{Name}Accessor`, provides: +// - A constructor taking an `mjData*`, an `mjModel*`, and an integer `id`. +// - An `id()` method to get the object's index. +// - A `name()` method to get the object's name using `mj_id2name`. +// - Member functions generated by the `MJDATA_##NAME` macro, which in turn +// uses the `X` macro to define accessors for fields within `mjData`. +#undef MJ_M +#define MJ_M(n) model_->n +#undef X +#define X(type, prefix, var, dim0, dim1) \ + emscripten::val get_##var() const { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + return val(typed_memory_view(end - start, data_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(typed_memory_view(end - start, data_->prefix##var + start)); \ + } else { \ + return val(typed_memory_view( \ + (end - start) * dim1, data_->prefix##var + start * dim1)); \ + } \ + } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ + int start = model_->sensor_adr[id_]; \ + int count = model_->sensor_dim[id_]; \ + return val(typed_memory_view(count, data_->sensordata + start)); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(data_->prefix##var[id_]); \ + } else { \ + return val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)); \ + } \ + } \ + } \ + void set_##var(const emscripten::val& value) { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + val(typed_memory_view(end - start, data_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + if constexpr (std::string_view(#dim1) == "1") { \ + val(typed_memory_view(end - start, data_->prefix##var + start)) \ + .call("set", value); \ + } else { \ + val(typed_memory_view((end - start) * dim1, \ + data_->prefix##var + start * dim1)) \ + .call("set", value); \ + } \ + } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ + int start = model_->sensor_adr[id_]; \ + int count = model_->sensor_dim[id_]; \ + val(typed_memory_view(count, data_->sensordata + start)) \ + .call("set", value); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + data_->prefix##var[id_] = value.as(); \ + } else { \ + val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)) \ + .call("set", value); \ + } \ + } \ + } + +#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ + struct MjData##Name##Accessor { \ + MjData##Name##Accessor(mjData* data, mjModel* model, int id) : data_(data), model_(model), id_(id) {} \ + \ + int id() const { return id_; } \ + std::string name() const { \ + const char* name = mj_id2name(model_, OBJTYPE, id_); \ + return name ? name : ""; \ + } \ + \ + MJDATA_##NAME \ + \ + private: \ + mjData* data_; \ + mjModel* model_; \ + int id_; \ + }; +MJDATA_ACCESSORS +#undef X_ACCESSOR + +#undef X +#undef MJ_M + +struct MjContact { + ~MjContact(); + MjContact(); + explicit MjContact(mjContact *ptr); + MjContact(const MjContact &); + MjContact &operator=(const MjContact &); + std::unique_ptr copy(); + mjContact* get() const; + void set(mjContact* ptr); + mjtNum dist() const { + return ptr_->dist; + } + void set_dist(mjtNum value) { + ptr_->dist = value; + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val frame() const { + return emscripten::val(emscripten::typed_memory_view(9, ptr_->frame)); + } + mjtNum includemargin() const { + return ptr_->includemargin; + } + void set_includemargin(mjtNum value) { + ptr_->includemargin = value; + } + emscripten::val friction() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->friction)); + } + emscripten::val solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); + } + emscripten::val solreffriction() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solreffriction)); + } + emscripten::val solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); + } + mjtNum mu() const { + return ptr_->mu; + } + void set_mu(mjtNum value) { + ptr_->mu = value; + } + emscripten::val H() const { + return emscripten::val(emscripten::typed_memory_view(36, ptr_->H)); + } + int dim() const { + return ptr_->dim; + } + void set_dim(int value) { + ptr_->dim = value; + } + int geom1() const { + return ptr_->geom1; + } + void set_geom1(int value) { + ptr_->geom1 = value; + } + int geom2() const { + return ptr_->geom2; + } + void set_geom2(int value) { + ptr_->geom2 = value; + } + emscripten::val geom() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->geom)); + } + emscripten::val flex() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->flex)); + } + emscripten::val elem() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->elem)); + } + emscripten::val vert() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->vert)); + } + int exclude() const { + return ptr_->exclude; + } + void set_exclude(int value) { + ptr_->exclude = value; + } + int efc_address() const { + return ptr_->efc_address; + } + void set_efc_address(int value) { + ptr_->efc_address = value; + } + + private: + mjContact* ptr_; + bool owned_ = false; +}; + +struct MjLROpt { + ~MjLROpt(); + MjLROpt(); + explicit MjLROpt(mjLROpt *ptr); + MjLROpt(const MjLROpt &); + MjLROpt &operator=(const MjLROpt &); + std::unique_ptr copy(); + mjLROpt* get() const; + void set(mjLROpt* ptr); + int mode() const { + return ptr_->mode; + } + void set_mode(int value) { + ptr_->mode = value; + } + int useexisting() const { + return ptr_->useexisting; + } + void set_useexisting(int value) { + ptr_->useexisting = value; + } + int uselimit() const { + return ptr_->uselimit; + } + void set_uselimit(int value) { + ptr_->uselimit = value; + } + mjtNum accel() const { + return ptr_->accel; + } + void set_accel(mjtNum value) { + ptr_->accel = value; + } + mjtNum maxforce() const { + return ptr_->maxforce; + } + void set_maxforce(mjtNum value) { + ptr_->maxforce = value; + } + mjtNum timeconst() const { + return ptr_->timeconst; + } + void set_timeconst(mjtNum value) { + ptr_->timeconst = value; + } + mjtNum timestep() const { + return ptr_->timestep; + } + void set_timestep(mjtNum value) { + ptr_->timestep = value; + } + mjtNum inttotal() const { + return ptr_->inttotal; + } + void set_inttotal(mjtNum value) { + ptr_->inttotal = value; + } + mjtNum interval() const { + return ptr_->interval; + } + void set_interval(mjtNum value) { + ptr_->interval = value; + } + mjtNum tolrange() const { + return ptr_->tolrange; + } + void set_tolrange(mjtNum value) { + ptr_->tolrange = value; + } + + private: + mjLROpt* ptr_; + bool owned_ = false; +}; + +struct MjLogConfig { + ~MjLogConfig(); + MjLogConfig(); + explicit MjLogConfig(mjLogConfig *ptr); + MjLogConfig(const MjLogConfig &); + MjLogConfig &operator=(const MjLogConfig &); + std::unique_ptr copy(); + mjLogConfig* get() const; + void set(mjLogConfig* ptr); + mjtBool logto_console() const { + return ptr_->logto_console; + } + void set_logto_console(mjtBool value) { + ptr_->logto_console = value; + } + mjtBool logto_file() const { + return ptr_->logto_file; + } + void set_logto_file(mjtBool value) { + ptr_->logto_file = value; + } + emscripten::val logfile() const { + return emscripten::val(emscripten::typed_memory_view(1024, ptr_->logfile)); + } + int topics() const { + return ptr_->topics; + } + void set_topics(int value) { + ptr_->topics = value; + } + + private: + mjLogConfig* ptr_; + bool owned_ = false; +}; + +struct MjLogMessage { + ~MjLogMessage(); + MjLogMessage(); + explicit MjLogMessage(mjLogMessage *ptr); + mjLogMessage* get() const; + void set(mjLogMessage* ptr); + int level() const { + return ptr_->level; + } + void set_level(int value) { + ptr_->level = value; + } + int topic() const { + return ptr_->topic; + } + void set_topic(int value) { + ptr_->topic = value; + } + emscripten::val subject() const { + return emscripten::val(emscripten::typed_memory_view(1024, ptr_->subject)); + } + std::string body() const { + return ptr_->body ? std::string(ptr_->body) : ""; + } + std::string func() const { + return ptr_->func ? std::string(ptr_->func) : ""; + } + std::string file() const { + return ptr_->file ? std::string(ptr_->file) : ""; + } + int line() const { + return ptr_->line; + } + void set_line(int value) { + ptr_->line = value; + } + mjtBool timestamp() const { + return ptr_->timestamp; + } + void set_timestamp(mjtBool value) { + ptr_->timestamp = value; + } + + private: + mjLogMessage* ptr_; + bool owned_ = false; +}; + +struct MjOption { + ~MjOption(); + MjOption(); + explicit MjOption(mjOption *ptr); + MjOption(const MjOption &); + MjOption &operator=(const MjOption &); + std::unique_ptr copy(); + mjOption* get() const; + void set(mjOption* ptr); + mjtNum timestep() const { + return ptr_->timestep; + } + void set_timestep(mjtNum value) { + ptr_->timestep = value; + } + mjtNum impratio() const { + return ptr_->impratio; + } + void set_impratio(mjtNum value) { + ptr_->impratio = value; + } + mjtNum tolerance() const { + return ptr_->tolerance; + } + void set_tolerance(mjtNum value) { + ptr_->tolerance = value; + } + mjtNum ls_tolerance() const { + return ptr_->ls_tolerance; + } + void set_ls_tolerance(mjtNum value) { + ptr_->ls_tolerance = value; + } + mjtNum noslip_tolerance() const { + return ptr_->noslip_tolerance; + } + void set_noslip_tolerance(mjtNum value) { + ptr_->noslip_tolerance = value; + } + mjtNum ccd_tolerance() const { + return ptr_->ccd_tolerance; + } + void set_ccd_tolerance(mjtNum value) { + ptr_->ccd_tolerance = value; + } + mjtNum sleep_tolerance() const { + return ptr_->sleep_tolerance; + } + void set_sleep_tolerance(mjtNum value) { + ptr_->sleep_tolerance = value; + } + emscripten::val gravity() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->gravity)); + } + emscripten::val wind() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->wind)); + } + emscripten::val magnetic() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->magnetic)); + } + mjtNum density() const { + return ptr_->density; + } + void set_density(mjtNum value) { + ptr_->density = value; + } + mjtNum viscosity() const { + return ptr_->viscosity; + } + void set_viscosity(mjtNum value) { + ptr_->viscosity = value; + } + mjtNum o_margin() const { + return ptr_->o_margin; + } + void set_o_margin(mjtNum value) { + ptr_->o_margin = value; + } + emscripten::val o_solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->o_solref)); + } + emscripten::val o_solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->o_solimp)); + } + emscripten::val o_friction() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->o_friction)); + } + int integrator() const { + return ptr_->integrator; + } + void set_integrator(int value) { + ptr_->integrator = value; + } + int cone() const { + return ptr_->cone; + } + void set_cone(int value) { + ptr_->cone = value; + } + int jacobian() const { + return ptr_->jacobian; + } + void set_jacobian(int value) { + ptr_->jacobian = value; + } + int solver() const { + return ptr_->solver; + } + void set_solver(int value) { + ptr_->solver = value; + } + int iterations() const { + return ptr_->iterations; + } + void set_iterations(int value) { + ptr_->iterations = value; + } + int ls_iterations() const { + return ptr_->ls_iterations; + } + void set_ls_iterations(int value) { + ptr_->ls_iterations = value; + } + int noslip_iterations() const { + return ptr_->noslip_iterations; + } + void set_noslip_iterations(int value) { + ptr_->noslip_iterations = value; + } + int ccd_iterations() const { + return ptr_->ccd_iterations; + } + void set_ccd_iterations(int value) { + ptr_->ccd_iterations = value; + } + int disableflags() const { + return ptr_->disableflags; + } + void set_disableflags(int value) { + ptr_->disableflags = value; + } + int enableflags() const { + return ptr_->enableflags; + } + void set_enableflags(int value) { + ptr_->enableflags = value; + } + int disableactuator() const { + return ptr_->disableactuator; + } + void set_disableactuator(int value) { + ptr_->disableactuator = value; + } + int sdf_initpoints() const { + return ptr_->sdf_initpoints; + } + void set_sdf_initpoints(int value) { + ptr_->sdf_initpoints = value; + } + int sdf_iterations() const { + return ptr_->sdf_iterations; + } + void set_sdf_iterations(int value) { + ptr_->sdf_iterations = value; + } + + private: + mjOption* ptr_; + bool owned_ = false; +}; + +struct MjPreContact { + ~MjPreContact(); + MjPreContact(); + explicit MjPreContact(mjPreContact *ptr); + MjPreContact(const MjPreContact &); + MjPreContact &operator=(const MjPreContact &); + std::unique_ptr copy(); + mjPreContact* get() const; + void set(mjPreContact* ptr); + mjtNum dist() const { + return ptr_->dist; + } + void set_dist(mjtNum value) { + ptr_->dist = value; + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val normal() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->normal)); + } + emscripten::val tangent() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->tangent)); + } + + private: + mjPreContact* ptr_; + bool owned_ = false; +}; + +struct MjSolverStat { + ~MjSolverStat(); + MjSolverStat(); + explicit MjSolverStat(mjSolverStat *ptr); + MjSolverStat(const MjSolverStat &); + MjSolverStat &operator=(const MjSolverStat &); + std::unique_ptr copy(); + mjSolverStat* get() const; + void set(mjSolverStat* ptr); + mjtNum improvement() const { + return ptr_->improvement; + } + void set_improvement(mjtNum value) { + ptr_->improvement = value; + } + mjtNum gradient() const { + return ptr_->gradient; + } + void set_gradient(mjtNum value) { + ptr_->gradient = value; + } + mjtNum lineslope() const { + return ptr_->lineslope; + } + void set_lineslope(mjtNum value) { + ptr_->lineslope = value; + } + int nactive() const { + return ptr_->nactive; + } + void set_nactive(int value) { + ptr_->nactive = value; + } + int nchange() const { + return ptr_->nchange; + } + void set_nchange(int value) { + ptr_->nchange = value; + } + int neval() const { + return ptr_->neval; + } + void set_neval(int value) { + ptr_->neval = value; + } + int nupdate() const { + return ptr_->nupdate; + } + void set_nupdate(int value) { + ptr_->nupdate = value; + } + + private: + mjSolverStat* ptr_; + bool owned_ = false; +}; + +struct MjStatistic { + ~MjStatistic(); + MjStatistic(); + explicit MjStatistic(mjStatistic *ptr); + MjStatistic(const MjStatistic &); + MjStatistic &operator=(const MjStatistic &); + std::unique_ptr copy(); + mjStatistic* get() const; + void set(mjStatistic* ptr); + mjtNum meaninertia() const { + return ptr_->meaninertia; + } + void set_meaninertia(mjtNum value) { + ptr_->meaninertia = value; + } + mjtNum meanmass() const { + return ptr_->meanmass; + } + void set_meanmass(mjtNum value) { + ptr_->meanmass = value; + } + mjtNum meansize() const { + return ptr_->meansize; + } + void set_meansize(mjtNum value) { + ptr_->meansize = value; + } + mjtNum extent() const { + return ptr_->extent; + } + void set_extent(mjtNum value) { + ptr_->extent = value; + } + emscripten::val center() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->center)); + } + + private: + mjStatistic* ptr_; + bool owned_ = false; +}; + +struct MjTimerStat { + ~MjTimerStat(); + MjTimerStat(); + explicit MjTimerStat(mjTimerStat *ptr); + MjTimerStat(const MjTimerStat &); + MjTimerStat &operator=(const MjTimerStat &); + std::unique_ptr copy(); + mjTimerStat* get() const; + void set(mjTimerStat* ptr); + mjtNum duration() const { + return ptr_->duration; + } + void set_duration(mjtNum value) { + ptr_->duration = value; + } + int number() const { + return ptr_->number; + } + void set_number(int value) { + ptr_->number = value; + } + + private: + mjTimerStat* ptr_; + bool owned_ = false; +}; + +struct MjVisualGlobal { + ~MjVisualGlobal(); + MjVisualGlobal(); + explicit MjVisualGlobal(mjVisualGlobal *ptr); + MjVisualGlobal(const MjVisualGlobal &); + MjVisualGlobal &operator=(const MjVisualGlobal &); + std::unique_ptr copy(); + mjVisualGlobal* get() const; + void set(mjVisualGlobal* ptr); + int cameraid() const { + return ptr_->cameraid; + } + void set_cameraid(int value) { + ptr_->cameraid = value; + } + int orthographic() const { + return ptr_->orthographic; + } + void set_orthographic(int value) { + ptr_->orthographic = value; + } + float fovy() const { + return ptr_->fovy; + } + void set_fovy(float value) { + ptr_->fovy = value; + } + float ipd() const { + return ptr_->ipd; + } + void set_ipd(float value) { + ptr_->ipd = value; + } + float azimuth() const { + return ptr_->azimuth; + } + void set_azimuth(float value) { + ptr_->azimuth = value; + } + float elevation() const { + return ptr_->elevation; + } + void set_elevation(float value) { + ptr_->elevation = value; + } + float linewidth() const { + return ptr_->linewidth; + } + void set_linewidth(float value) { + ptr_->linewidth = value; + } + float glow() const { + return ptr_->glow; + } + void set_glow(float value) { + ptr_->glow = value; + } + float realtime() const { + return ptr_->realtime; + } + void set_realtime(float value) { + ptr_->realtime = value; + } + int offwidth() const { + return ptr_->offwidth; + } + void set_offwidth(int value) { + ptr_->offwidth = value; + } + int offheight() const { + return ptr_->offheight; + } + void set_offheight(int value) { + ptr_->offheight = value; + } + int ellipsoidinertia() const { + return ptr_->ellipsoidinertia; + } + void set_ellipsoidinertia(int value) { + ptr_->ellipsoidinertia = value; + } + int bvactive() const { + return ptr_->bvactive; + } + void set_bvactive(int value) { + ptr_->bvactive = value; + } + + private: + mjVisualGlobal* ptr_; + bool owned_ = false; +}; + +struct MjVisualHeadlight { + ~MjVisualHeadlight(); + MjVisualHeadlight(); + explicit MjVisualHeadlight(mjVisualHeadlight *ptr); + MjVisualHeadlight(const MjVisualHeadlight &); + MjVisualHeadlight &operator=(const MjVisualHeadlight &); + std::unique_ptr copy(); + mjVisualHeadlight* get() const; + void set(mjVisualHeadlight* ptr); + emscripten::val ambient() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); + } + emscripten::val diffuse() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); + } + emscripten::val specular() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); + } + int active() const { + return ptr_->active; + } + void set_active(int value) { + ptr_->active = value; + } + + private: + mjVisualHeadlight* ptr_; + bool owned_ = false; +}; + +struct MjVisualMap { + ~MjVisualMap(); + MjVisualMap(); + explicit MjVisualMap(mjVisualMap *ptr); + MjVisualMap(const MjVisualMap &); + MjVisualMap &operator=(const MjVisualMap &); + std::unique_ptr copy(); + mjVisualMap* get() const; + void set(mjVisualMap* ptr); + float stiffness() const { + return ptr_->stiffness; + } + void set_stiffness(float value) { + ptr_->stiffness = value; + } + float stiffnessrot() const { + return ptr_->stiffnessrot; + } + void set_stiffnessrot(float value) { + ptr_->stiffnessrot = value; + } + float force() const { + return ptr_->force; + } + void set_force(float value) { + ptr_->force = value; + } + float torque() const { + return ptr_->torque; + } + void set_torque(float value) { + ptr_->torque = value; + } + float alpha() const { + return ptr_->alpha; + } + void set_alpha(float value) { + ptr_->alpha = value; + } + float fogstart() const { + return ptr_->fogstart; + } + void set_fogstart(float value) { + ptr_->fogstart = value; + } + float fogend() const { + return ptr_->fogend; + } + void set_fogend(float value) { + ptr_->fogend = value; + } + float znear() const { + return ptr_->znear; + } + void set_znear(float value) { + ptr_->znear = value; + } + float zfar() const { + return ptr_->zfar; + } + void set_zfar(float value) { + ptr_->zfar = value; + } + float haze() const { + return ptr_->haze; + } + void set_haze(float value) { + ptr_->haze = value; + } + float shadowclip() const { + return ptr_->shadowclip; + } + void set_shadowclip(float value) { + ptr_->shadowclip = value; + } + float shadowscale() const { + return ptr_->shadowscale; + } + void set_shadowscale(float value) { + ptr_->shadowscale = value; + } + float actuatortendon() const { + return ptr_->actuatortendon; + } + void set_actuatortendon(float value) { + ptr_->actuatortendon = value; + } + + private: + mjVisualMap* ptr_; + bool owned_ = false; +}; + +struct MjVisualQuality { + ~MjVisualQuality(); + MjVisualQuality(); + explicit MjVisualQuality(mjVisualQuality *ptr); + MjVisualQuality(const MjVisualQuality &); + MjVisualQuality &operator=(const MjVisualQuality &); + std::unique_ptr copy(); + mjVisualQuality* get() const; + void set(mjVisualQuality* ptr); + int shadowsize() const { + return ptr_->shadowsize; + } + void set_shadowsize(int value) { + ptr_->shadowsize = value; + } + int offsamples() const { + return ptr_->offsamples; + } + void set_offsamples(int value) { + ptr_->offsamples = value; + } + int numslices() const { + return ptr_->numslices; + } + void set_numslices(int value) { + ptr_->numslices = value; + } + int numstacks() const { + return ptr_->numstacks; + } + void set_numstacks(int value) { + ptr_->numstacks = value; + } + int numquads() const { + return ptr_->numquads; + } + void set_numquads(int value) { + ptr_->numquads = value; + } + + private: + mjVisualQuality* ptr_; + bool owned_ = false; +}; + +struct MjVisualRgba { + ~MjVisualRgba(); + MjVisualRgba(); + explicit MjVisualRgba(mjVisualRgba *ptr); + MjVisualRgba(const MjVisualRgba &); + MjVisualRgba &operator=(const MjVisualRgba &); + std::unique_ptr copy(); + mjVisualRgba* get() const; + void set(mjVisualRgba* ptr); + emscripten::val fog() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->fog)); + } + emscripten::val haze() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->haze)); + } + emscripten::val force() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->force)); + } + emscripten::val inertia() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->inertia)); + } + emscripten::val joint() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->joint)); + } + emscripten::val actuator() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuator)); + } + emscripten::val actuatornegative() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuatornegative)); + } + emscripten::val actuatorpositive() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->actuatorpositive)); + } + emscripten::val com() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->com)); + } + emscripten::val camera() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->camera)); + } + emscripten::val light() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->light)); + } + emscripten::val selectpoint() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->selectpoint)); + } + emscripten::val connect() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->connect)); + } + emscripten::val contactpoint() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactpoint)); + } + emscripten::val contactforce() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactforce)); + } + emscripten::val contactfriction() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactfriction)); + } + emscripten::val contacttorque() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->contacttorque)); + } + emscripten::val contactgap() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->contactgap)); + } + emscripten::val rangefinder() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rangefinder)); + } + emscripten::val constraint() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->constraint)); + } + emscripten::val slidercrank() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->slidercrank)); + } + emscripten::val crankbroken() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->crankbroken)); + } + emscripten::val frustum() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->frustum)); + } + emscripten::val bv() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->bv)); + } + emscripten::val bvactive() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->bvactive)); + } + + private: + mjVisualRgba* ptr_; + bool owned_ = false; +}; + +struct MjVisualScale { + ~MjVisualScale(); + MjVisualScale(); + explicit MjVisualScale(mjVisualScale *ptr); + MjVisualScale(const MjVisualScale &); + MjVisualScale &operator=(const MjVisualScale &); + std::unique_ptr copy(); + mjVisualScale* get() const; + void set(mjVisualScale* ptr); + float forcewidth() const { + return ptr_->forcewidth; + } + void set_forcewidth(float value) { + ptr_->forcewidth = value; + } + float contactwidth() const { + return ptr_->contactwidth; + } + void set_contactwidth(float value) { + ptr_->contactwidth = value; + } + float contactheight() const { + return ptr_->contactheight; + } + void set_contactheight(float value) { + ptr_->contactheight = value; + } + float connect() const { + return ptr_->connect; + } + void set_connect(float value) { + ptr_->connect = value; + } + float com() const { + return ptr_->com; + } + void set_com(float value) { + ptr_->com = value; + } + float camera() const { + return ptr_->camera; + } + void set_camera(float value) { + ptr_->camera = value; + } + float light() const { + return ptr_->light; + } + void set_light(float value) { + ptr_->light = value; + } + float selectpoint() const { + return ptr_->selectpoint; + } + void set_selectpoint(float value) { + ptr_->selectpoint = value; + } + float jointlength() const { + return ptr_->jointlength; + } + void set_jointlength(float value) { + ptr_->jointlength = value; + } + float jointwidth() const { + return ptr_->jointwidth; + } + void set_jointwidth(float value) { + ptr_->jointwidth = value; + } + float actuatorlength() const { + return ptr_->actuatorlength; + } + void set_actuatorlength(float value) { + ptr_->actuatorlength = value; + } + float actuatorwidth() const { + return ptr_->actuatorwidth; + } + void set_actuatorwidth(float value) { + ptr_->actuatorwidth = value; + } + float framelength() const { + return ptr_->framelength; + } + void set_framelength(float value) { + ptr_->framelength = value; + } + float framewidth() const { + return ptr_->framewidth; + } + void set_framewidth(float value) { + ptr_->framewidth = value; + } + float constraint() const { + return ptr_->constraint; + } + void set_constraint(float value) { + ptr_->constraint = value; + } + float slidercrank() const { + return ptr_->slidercrank; + } + void set_slidercrank(float value) { + ptr_->slidercrank = value; + } + float frustum() const { + return ptr_->frustum; + } + void set_frustum(float value) { + ptr_->frustum = value; + } + + private: + mjVisualScale* ptr_; + bool owned_ = false; +}; + +struct MjWarningStat { + ~MjWarningStat(); + MjWarningStat(); + explicit MjWarningStat(mjWarningStat *ptr); + MjWarningStat(const MjWarningStat &); + MjWarningStat &operator=(const MjWarningStat &); + std::unique_ptr copy(); + mjWarningStat* get() const; + void set(mjWarningStat* ptr); + int lastinfo() const { + return ptr_->lastinfo; + } + void set_lastinfo(int value) { + ptr_->lastinfo = value; + } + int number() const { + return ptr_->number; + } + void set_number(int value) { + ptr_->number = value; + } + + private: + mjWarningStat* ptr_; + bool owned_ = false; +}; + +struct MjsAuthored { + explicit MjsAuthored(mjsAuthored *ptr); + mjsAuthored* get() const; + void set(mjsAuthored* ptr); + uint64_t option() const { + return ptr_->option; + } + void set_option(uint64_t value) { + ptr_->option = value; + } + int disableflags() const { + return ptr_->disableflags; + } + void set_disableflags(int value) { + ptr_->disableflags = value; + } + int enableflags() const { + return ptr_->enableflags; + } + void set_enableflags(int value) { + ptr_->enableflags = value; + } + int disableactuator() const { + return ptr_->disableactuator; + } + void set_disableactuator(int value) { + ptr_->disableactuator = value; + } + uint64_t visual_global() const { + return ptr_->visual_global; + } + void set_visual_global(uint64_t value) { + ptr_->visual_global = value; + } + uint64_t visual_quality() const { + return ptr_->visual_quality; + } + void set_visual_quality(uint64_t value) { + ptr_->visual_quality = value; + } + uint64_t visual_headlight() const { + return ptr_->visual_headlight; + } + void set_visual_headlight(uint64_t value) { + ptr_->visual_headlight = value; + } + uint64_t visual_map() const { + return ptr_->visual_map; + } + void set_visual_map(uint64_t value) { + ptr_->visual_map = value; + } + uint64_t visual_scale() const { + return ptr_->visual_scale; + } + void set_visual_scale(uint64_t value) { + ptr_->visual_scale = value; + } + uint64_t visual_rgba() const { + return ptr_->visual_rgba; + } + void set_visual_rgba(uint64_t value) { + ptr_->visual_rgba = value; + } + + private: + mjsAuthored* ptr_; +}; + +struct MjsElement { + explicit MjsElement(mjsElement *ptr); + mjsElement* get() const; + void set(mjsElement* ptr); + mjtObj elemtype() const { + return ptr_->elemtype; + } + void set_elemtype(mjtObj value) { + ptr_->elemtype = value; + } + uint64_t signature() const { + return ptr_->signature; + } + void set_signature(uint64_t value) { + ptr_->signature = value; + } + + private: + mjsElement* ptr_; +}; + +struct MjsOrientation { + explicit MjsOrientation(mjsOrientation *ptr); + mjsOrientation* get() const; + void set(mjsOrientation* ptr); + mjtOrientation type() const { + return ptr_->type; + } + void set_type(mjtOrientation value) { + ptr_->type = value; + } + emscripten::val axisangle() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->axisangle)); + } + emscripten::val xyaxes() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->xyaxes)); + } + emscripten::val zaxis() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->zaxis)); + } + emscripten::val euler() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->euler)); + } + + private: + mjsOrientation* ptr_; +}; + +struct MjvCamera { + ~MjvCamera(); + MjvCamera(); + explicit MjvCamera(mjvCamera *ptr); + MjvCamera(const MjvCamera &); + MjvCamera &operator=(const MjvCamera &); + std::unique_ptr copy(); + mjvCamera* get() const; + void set(mjvCamera* ptr); + int type() const { + return ptr_->type; + } + void set_type(int value) { + ptr_->type = value; + } + int fixedcamid() const { + return ptr_->fixedcamid; + } + void set_fixedcamid(int value) { + ptr_->fixedcamid = value; + } + int trackbodyid() const { + return ptr_->trackbodyid; + } + void set_trackbodyid(int value) { + ptr_->trackbodyid = value; + } + emscripten::val lookat() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->lookat)); + } + mjtNum distance() const { + return ptr_->distance; + } + void set_distance(mjtNum value) { + ptr_->distance = value; + } + mjtNum azimuth() const { + return ptr_->azimuth; + } + void set_azimuth(mjtNum value) { + ptr_->azimuth = value; + } + mjtNum elevation() const { + return ptr_->elevation; + } + void set_elevation(mjtNum value) { + ptr_->elevation = value; + } + int orthographic() const { + return ptr_->orthographic; + } + void set_orthographic(int value) { + ptr_->orthographic = value; + } + + private: + mjvCamera* ptr_; + bool owned_ = false; +}; + +struct MjvFigure { + ~MjvFigure(); + MjvFigure(); + explicit MjvFigure(mjvFigure *ptr); + MjvFigure(const MjvFigure &); + MjvFigure &operator=(const MjvFigure &); + std::unique_ptr copy(); + mjvFigure* get() const; + void set(mjvFigure* ptr); + int flg_legend() const { + return ptr_->flg_legend; + } + void set_flg_legend(int value) { + ptr_->flg_legend = value; + } + emscripten::val flg_ticklabel() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->flg_ticklabel)); + } + int flg_extend() const { + return ptr_->flg_extend; + } + void set_flg_extend(int value) { + ptr_->flg_extend = value; + } + int flg_barplot() const { + return ptr_->flg_barplot; + } + void set_flg_barplot(int value) { + ptr_->flg_barplot = value; + } + int flg_selection() const { + return ptr_->flg_selection; + } + void set_flg_selection(int value) { + ptr_->flg_selection = value; + } + int flg_symmetric() const { + return ptr_->flg_symmetric; + } + void set_flg_symmetric(int value) { + ptr_->flg_symmetric = value; + } + float linewidth() const { + return ptr_->linewidth; + } + void set_linewidth(float value) { + ptr_->linewidth = value; + } + float gridwidth() const { + return ptr_->gridwidth; + } + void set_gridwidth(float value) { + ptr_->gridwidth = value; + } + emscripten::val gridsize() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->gridsize)); + } + emscripten::val gridrgb() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->gridrgb)); + } + emscripten::val figurergba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->figurergba)); + } + emscripten::val panergba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->panergba)); + } + emscripten::val legendrgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->legendrgba)); + } + emscripten::val textrgb() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->textrgb)); + } + emscripten::val linergb() const { + return emscripten::val(emscripten::typed_memory_view(300, reinterpret_cast(ptr_->linergb))); + } + emscripten::val range() const { + return emscripten::val(emscripten::typed_memory_view(4, reinterpret_cast(ptr_->range))); + } + emscripten::val xformat() const { + return emscripten::val(emscripten::typed_memory_view(20, ptr_->xformat)); + } + emscripten::val yformat() const { + return emscripten::val(emscripten::typed_memory_view(20, ptr_->yformat)); + } + emscripten::val minwidth() const { + return emscripten::val(emscripten::typed_memory_view(20, ptr_->minwidth)); + } + emscripten::val title() const { + return emscripten::val(emscripten::typed_memory_view(1000, ptr_->title)); + } + emscripten::val xlabel() const { + return emscripten::val(emscripten::typed_memory_view(100, ptr_->xlabel)); + } + emscripten::val linename() const { + return emscripten::val(emscripten::typed_memory_view(10000, reinterpret_cast(ptr_->linename))); + } + int legendoffset() const { + return ptr_->legendoffset; + } + void set_legendoffset(int value) { + ptr_->legendoffset = value; + } + int subplot() const { + return ptr_->subplot; + } + void set_subplot(int value) { + ptr_->subplot = value; + } + emscripten::val highlight() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->highlight)); + } + int highlightid() const { + return ptr_->highlightid; + } + void set_highlightid(int value) { + ptr_->highlightid = value; + } + float selection() const { + return ptr_->selection; + } + void set_selection(float value) { + ptr_->selection = value; + } + emscripten::val linepnt() const { + return emscripten::val(emscripten::typed_memory_view(100, ptr_->linepnt)); + } + emscripten::val linedata() const { + return emscripten::val(emscripten::typed_memory_view(200200, reinterpret_cast(ptr_->linedata))); + } + emscripten::val xaxispixel() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->xaxispixel)); + } + emscripten::val yaxispixel() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->yaxispixel)); + } + emscripten::val xaxisdata() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->xaxisdata)); + } + emscripten::val yaxisdata() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->yaxisdata)); + } + + private: + mjvFigure* ptr_; + bool owned_ = false; +}; + +struct MjvGLCamera { + ~MjvGLCamera(); + MjvGLCamera(); + explicit MjvGLCamera(mjvGLCamera *ptr); + MjvGLCamera(const MjvGLCamera &); + MjvGLCamera &operator=(const MjvGLCamera &); + std::unique_ptr copy(); + mjvGLCamera* get() const; + void set(mjvGLCamera* ptr); + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val forward() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->forward)); + } + emscripten::val up() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->up)); + } + float frustum_center() const { + return ptr_->frustum_center; + } + void set_frustum_center(float value) { + ptr_->frustum_center = value; + } + float frustum_width() const { + return ptr_->frustum_width; + } + void set_frustum_width(float value) { + ptr_->frustum_width = value; + } + float frustum_bottom() const { + return ptr_->frustum_bottom; + } + void set_frustum_bottom(float value) { + ptr_->frustum_bottom = value; + } + float frustum_top() const { + return ptr_->frustum_top; + } + void set_frustum_top(float value) { + ptr_->frustum_top = value; + } + float frustum_near() const { + return ptr_->frustum_near; + } + void set_frustum_near(float value) { + ptr_->frustum_near = value; + } + float frustum_far() const { + return ptr_->frustum_far; + } + void set_frustum_far(float value) { + ptr_->frustum_far = value; + } + int orthographic() const { + return ptr_->orthographic; + } + void set_orthographic(int value) { + ptr_->orthographic = value; + } + + private: + mjvGLCamera* ptr_; + bool owned_ = false; +}; + +struct MjvGeom { + ~MjvGeom(); + MjvGeom(); + explicit MjvGeom(mjvGeom *ptr); + MjvGeom(const MjvGeom &); + MjvGeom &operator=(const MjvGeom &); + std::unique_ptr copy(); + mjvGeom* get() const; + void set(mjvGeom* ptr); + int type() const { + return ptr_->type; + } + void set_type(int value) { + ptr_->type = value; + } + int dataid() const { + return ptr_->dataid; + } + void set_dataid(int value) { + ptr_->dataid = value; + } + int objtype() const { + return ptr_->objtype; + } + void set_objtype(int value) { + ptr_->objtype = value; + } + int objid() const { + return ptr_->objid; + } + void set_objid(int value) { + ptr_->objid = value; + } + int category() const { + return ptr_->category; + } + void set_category(int value) { + ptr_->category = value; + } + int matid() const { + return ptr_->matid; + } + void set_matid(int value) { + ptr_->matid = value; + } + int texcoord() const { + return ptr_->texcoord; + } + void set_texcoord(int value) { + ptr_->texcoord = value; + } + int segid() const { + return ptr_->segid; + } + void set_segid(int value) { + ptr_->segid = value; + } + emscripten::val size() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val mat() const { + return emscripten::val(emscripten::typed_memory_view(9, ptr_->mat)); + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + float emission() const { + return ptr_->emission; + } + void set_emission(float value) { + ptr_->emission = value; + } + float specular() const { + return ptr_->specular; + } + void set_specular(float value) { + ptr_->specular = value; + } + float shininess() const { + return ptr_->shininess; + } + void set_shininess(float value) { + ptr_->shininess = value; + } + float reflectance() const { + return ptr_->reflectance; + } + void set_reflectance(float value) { + ptr_->reflectance = value; + } + emscripten::val label() const { + return emscripten::val(emscripten::typed_memory_view(100, ptr_->label)); + } + float camdist() const { + return ptr_->camdist; + } + void set_camdist(float value) { + ptr_->camdist = value; + } + float modelrbound() const { + return ptr_->modelrbound; + } + void set_modelrbound(float value) { + ptr_->modelrbound = value; + } + mjtByte transparent() const { + return ptr_->transparent; + } + void set_transparent(mjtByte value) { + ptr_->transparent = value; + } + + private: + mjvGeom* ptr_; + bool owned_ = false; +}; + +struct MjvLight { + ~MjvLight(); + MjvLight(); + explicit MjvLight(mjvLight *ptr); + MjvLight(const MjvLight &); + MjvLight &operator=(const MjvLight &); + std::unique_ptr copy(); + mjvLight* get() const; + void set(mjvLight* ptr); + int id() const { + return ptr_->id; + } + void set_id(int value) { + ptr_->id = value; + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val dir() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->dir)); + } + int type() const { + return ptr_->type; + } + void set_type(int value) { + ptr_->type = value; + } + int texid() const { + return ptr_->texid; + } + void set_texid(int value) { + ptr_->texid = value; + } + emscripten::val attenuation() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->attenuation)); + } + float cutoff() const { + return ptr_->cutoff; + } + void set_cutoff(float value) { + ptr_->cutoff = value; + } + float exponent() const { + return ptr_->exponent; + } + void set_exponent(float value) { + ptr_->exponent = value; + } + emscripten::val ambient() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); + } + emscripten::val diffuse() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); + } + emscripten::val specular() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); + } + mjtByte headlight() const { + return ptr_->headlight; + } + void set_headlight(mjtByte value) { + ptr_->headlight = value; + } + mjtByte castshadow() const { + return ptr_->castshadow; + } + void set_castshadow(mjtByte value) { + ptr_->castshadow = value; + } + float bulbradius() const { + return ptr_->bulbradius; + } + void set_bulbradius(float value) { + ptr_->bulbradius = value; + } + float intensity() const { + return ptr_->intensity; + } + void set_intensity(float value) { + ptr_->intensity = value; + } + float range() const { + return ptr_->range; + } + void set_range(float value) { + ptr_->range = value; + } + + private: + mjvLight* ptr_; + bool owned_ = false; +}; + +struct MjvOption { + ~MjvOption(); + MjvOption(); + explicit MjvOption(mjvOption *ptr); + MjvOption(const MjvOption &); + MjvOption &operator=(const MjvOption &); + std::unique_ptr copy(); + mjvOption* get() const; + void set(mjvOption* ptr); + int label() const { + return ptr_->label; + } + void set_label(int value) { + ptr_->label = value; + } + int frame() const { + return ptr_->frame; + } + void set_frame(int value) { + ptr_->frame = value; + } + emscripten::val geomgroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->geomgroup)); + } + emscripten::val sitegroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->sitegroup)); + } + emscripten::val jointgroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->jointgroup)); + } + emscripten::val tendongroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->tendongroup)); + } + emscripten::val actuatorgroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->actuatorgroup)); + } + emscripten::val flexgroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->flexgroup)); + } + emscripten::val skingroup() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->skingroup)); + } + emscripten::val flags() const { + return emscripten::val(emscripten::typed_memory_view(31, ptr_->flags)); + } + int bvh_depth() const { + return ptr_->bvh_depth; + } + void set_bvh_depth(int value) { + ptr_->bvh_depth = value; + } + int flex_layer() const { + return ptr_->flex_layer; + } + void set_flex_layer(int value) { + ptr_->flex_layer = value; + } + + private: + mjvOption* ptr_; + bool owned_ = false; +}; + +struct MjvPerturb { + ~MjvPerturb(); + MjvPerturb(); + explicit MjvPerturb(mjvPerturb *ptr); + MjvPerturb(const MjvPerturb &); + MjvPerturb &operator=(const MjvPerturb &); + std::unique_ptr copy(); + mjvPerturb* get() const; + void set(mjvPerturb* ptr); + int select() const { + return ptr_->select; + } + void set_select(int value) { + ptr_->select = value; + } + int flexselect() const { + return ptr_->flexselect; + } + void set_flexselect(int value) { + ptr_->flexselect = value; + } + int skinselect() const { + return ptr_->skinselect; + } + void set_skinselect(int value) { + ptr_->skinselect = value; + } + int active() const { + return ptr_->active; + } + void set_active(int value) { + ptr_->active = value; + } + int active2() const { + return ptr_->active2; + } + void set_active2(int value) { + ptr_->active2 = value; + } + emscripten::val refpos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->refpos)); + } + emscripten::val refquat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->refquat)); + } + emscripten::val refselpos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->refselpos)); + } + emscripten::val localpos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->localpos)); + } + mjtNum localmass() const { + return ptr_->localmass; + } + void set_localmass(mjtNum value) { + ptr_->localmass = value; + } + mjtNum scale() const { + return ptr_->scale; + } + void set_scale(mjtNum value) { + ptr_->scale = value; + } + + private: + mjvPerturb* ptr_; + bool owned_ = false; +}; + +struct MjsCompiler { + explicit MjsCompiler(mjsCompiler *ptr); + mjsCompiler* get() const; + void set(mjsCompiler* ptr); + mjtByte autolimits() const { + return ptr_->autolimits; + } + void set_autolimits(mjtByte value) { + ptr_->autolimits = value; + } + double boundmass() const { + return ptr_->boundmass; + } + void set_boundmass(double value) { + ptr_->boundmass = value; + } + double boundinertia() const { + return ptr_->boundinertia; + } + void set_boundinertia(double value) { + ptr_->boundinertia = value; + } + double settotalmass() const { + return ptr_->settotalmass; + } + void set_settotalmass(double value) { + ptr_->settotalmass = value; + } + mjtByte balanceinertia() const { + return ptr_->balanceinertia; + } + void set_balanceinertia(mjtByte value) { + ptr_->balanceinertia = value; + } + mjtByte fitaabb() const { + return ptr_->fitaabb; + } + void set_fitaabb(mjtByte value) { + ptr_->fitaabb = value; + } + mjtByte degree() const { + return ptr_->degree; + } + void set_degree(mjtByte value) { + ptr_->degree = value; + } + emscripten::val eulerseq() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->eulerseq)); + } + mjtByte discardvisual() const { + return ptr_->discardvisual; + } + void set_discardvisual(mjtByte value) { + ptr_->discardvisual = value; + } + mjtByte usethread() const { + return ptr_->usethread; + } + void set_usethread(mjtByte value) { + ptr_->usethread = value; + } + mjtByte fusestatic() const { + return ptr_->fusestatic; + } + void set_fusestatic(mjtByte value) { + ptr_->fusestatic = value; + } + int inertiafromgeom() const { + return ptr_->inertiafromgeom; + } + void set_inertiafromgeom(int value) { + ptr_->inertiafromgeom = value; + } + emscripten::val inertiagrouprange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->inertiagrouprange)); + } + mjtByte saveinertial() const { + return ptr_->saveinertial; + } + void set_saveinertial(mjtByte value) { + ptr_->saveinertial = value; + } + int alignfree() const { + return ptr_->alignfree; + } + void set_alignfree(int value) { + ptr_->alignfree = value; + } + int conflict() const { + return ptr_->conflict; + } + void set_conflict(int value) { + ptr_->conflict = value; + } + mjString meshdir() const { + return (ptr_ && ptr_->meshdir) ? *(ptr_->meshdir) : ""; + } + void set_meshdir(const mjString& value) { + if (ptr_ && ptr_->meshdir) { + *(ptr_->meshdir) = value; + } + } + mjString texturedir() const { + return (ptr_ && ptr_->texturedir) ? *(ptr_->texturedir) : ""; + } + void set_texturedir(const mjString& value) { + if (ptr_ && ptr_->texturedir) { + *(ptr_->texturedir) = value; + } + } + uint64_t authored() const { + return ptr_->authored; + } + void set_authored(uint64_t value) { + ptr_->authored = value; + } + + private: + mjsCompiler* ptr_; + + public: + MjLROpt LRopt; +}; + +struct MjVisual { + ~MjVisual(); + MjVisual(); + explicit MjVisual(mjVisual *ptr); + MjVisual(const MjVisual &); + MjVisual &operator=(const MjVisual &); + std::unique_ptr copy(); + mjVisual* get() const; + void set(mjVisual* ptr); + + private: + mjVisual* ptr_; + bool owned_ = false; + + public: + MjVisualGlobal global; + MjVisualQuality quality; + MjVisualHeadlight headlight; + MjVisualMap map; + MjVisualScale scale; + MjVisualRgba rgba; +}; + +struct MjsEquality { + explicit MjsEquality(mjsEquality *ptr); + mjsEquality* get() const; + void set(mjsEquality* ptr); + mjtEq type() const { + return ptr_->type; + } + void set_type(mjtEq value) { + ptr_->type = value; + } + emscripten::val data() const { + return emscripten::val(emscripten::typed_memory_view(11, ptr_->data)); + } + mjtByte active() const { + return ptr_->active; + } + void set_active(mjtByte value) { + ptr_->active = value; + } + mjString name1() const { + return (ptr_ && ptr_->name1) ? *(ptr_->name1) : ""; + } + void set_name1(const mjString& value) { + if (ptr_ && ptr_->name1) { + *(ptr_->name1) = value; + } + } + mjString name2() const { + return (ptr_ && ptr_->name2) ? *(ptr_->name2) : ""; + } + void set_name2(const mjString& value) { + if (ptr_ && ptr_->name2) { + *(ptr_->name2) = value; + } + } + mjtObj objtype() const { + return ptr_->objtype; + } + void set_objtype(mjtObj value) { + ptr_->objtype = value; + } + emscripten::val solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); + } + emscripten::val solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsEquality* ptr_; + + public: + MjsElement element; +}; + +struct MjsExclude { + explicit MjsExclude(mjsExclude *ptr); + mjsExclude* get() const; + void set(mjsExclude* ptr); + mjString bodyname1() const { + return (ptr_ && ptr_->bodyname1) ? *(ptr_->bodyname1) : ""; + } + void set_bodyname1(const mjString& value) { + if (ptr_ && ptr_->bodyname1) { + *(ptr_->bodyname1) = value; + } + } + mjString bodyname2() const { + return (ptr_ && ptr_->bodyname2) ? *(ptr_->bodyname2) : ""; + } + void set_bodyname2(const mjString& value) { + if (ptr_ && ptr_->bodyname2) { + *(ptr_->bodyname2) = value; + } + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsExclude* ptr_; + + public: + MjsElement element; +}; + +struct MjsFlex { + explicit MjsFlex(mjsFlex *ptr); + mjsFlex* get() const; + void set(mjsFlex* ptr); + int contype() const { + return ptr_->contype; + } + void set_contype(int value) { + ptr_->contype = value; + } + int conaffinity() const { + return ptr_->conaffinity; + } + void set_conaffinity(int value) { + ptr_->conaffinity = value; + } + int condim() const { + return ptr_->condim; + } + void set_condim(int value) { + ptr_->condim = value; + } + int priority() const { + return ptr_->priority; + } + void set_priority(int value) { + ptr_->priority = value; + } + emscripten::val friction() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->friction)); + } + double solmix() const { + return ptr_->solmix; + } + void set_solmix(double value) { + ptr_->solmix = value; + } + emscripten::val solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); + } + emscripten::val solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); + } + double margin() const { + return ptr_->margin; + } + void set_margin(double value) { + ptr_->margin = value; + } + double gap() const { + return ptr_->gap; + } + void set_gap(double value) { + ptr_->gap = value; + } + int dim() const { + return ptr_->dim; + } + void set_dim(int value) { + ptr_->dim = value; + } + double radius() const { + return ptr_->radius; + } + void set_radius(double value) { + ptr_->radius = value; + } + emscripten::val size() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); + } + mjtByte internal() const { + return ptr_->internal; + } + void set_internal(mjtByte value) { + ptr_->internal = value; + } + mjtByte flatskin() const { + return ptr_->flatskin; + } + void set_flatskin(mjtByte value) { + ptr_->flatskin = value; + } + int selfcollide() const { + return ptr_->selfcollide; + } + void set_selfcollide(int value) { + ptr_->selfcollide = value; + } + int passive() const { + return ptr_->passive; + } + void set_passive(int value) { + ptr_->passive = value; + } + int activelayers() const { + return ptr_->activelayers; + } + void set_activelayers(int value) { + ptr_->activelayers = value; + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + double edgestiffness() const { + return ptr_->edgestiffness; + } + void set_edgestiffness(double value) { + ptr_->edgestiffness = value; + } + double edgedamping() const { + return ptr_->edgedamping; + } + void set_edgedamping(double value) { + ptr_->edgedamping = value; + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + double young() const { + return ptr_->young; + } + void set_young(double value) { + ptr_->young = value; + } + double poisson() const { + return ptr_->poisson; + } + void set_poisson(double value) { + ptr_->poisson = value; + } + double damping() const { + return ptr_->damping; + } + void set_damping(double value) { + ptr_->damping = value; + } + double thickness() const { + return ptr_->thickness; + } + void set_thickness(double value) { + ptr_->thickness = value; + } + int elastic2d() const { + return ptr_->elastic2d; + } + void set_elastic2d(int value) { + ptr_->elastic2d = value; + } + emscripten::val cellcount() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->cellcount)); + } + int order() const { + return ptr_->order; + } + void set_order(int value) { + ptr_->order = value; + } + mjStringVec &nodebody() const { + return *(ptr_->nodebody); + } + mjStringVec &vertbody() const { + return *(ptr_->vertbody); + } + mjDoubleVec &node() const { + return *(ptr_->node); + } + mjDoubleVec &vert() const { + return *(ptr_->vert); + } + mjIntVec &elem() const { + return *(ptr_->elem); + } + mjFloatVec &texcoord() const { + return *(ptr_->texcoord); + } + mjIntVec &elemtexcoord() const { + return *(ptr_->elemtexcoord); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsFlex* ptr_; + + public: + MjsElement element; +}; + +struct MjsHField { + explicit MjsHField(mjsHField *ptr); + mjsHField* get() const; + void set(mjsHField* ptr); + mjString content_type() const { + return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; + } + void set_content_type(const mjString& value) { + if (ptr_ && ptr_->content_type) { + *(ptr_->content_type) = value; + } + } + mjString file() const { + return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; + } + void set_file(const mjString& value) { + if (ptr_ && ptr_->file) { + *(ptr_->file) = value; + } + } + emscripten::val size() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->size)); + } + int nrow() const { + return ptr_->nrow; + } + void set_nrow(int value) { + ptr_->nrow = value; + } + int ncol() const { + return ptr_->ncol; + } + void set_ncol(int value) { + ptr_->ncol = value; + } + mjFloatVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsHField* ptr_; + + public: + MjsElement element; +}; + +struct MjsJoint { + explicit MjsJoint(mjsJoint *ptr); + mjsJoint* get() const; + void set(mjsJoint* ptr); + mjtJoint type() const { + return ptr_->type; + } + void set_type(mjtJoint value) { + ptr_->type = value; + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val axis() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->axis)); + } + double ref() const { + return ptr_->ref; + } + void set_ref(double value) { + ptr_->ref = value; + } + int align() const { + return ptr_->align; + } + void set_align(int value) { + ptr_->align = value; + } + emscripten::val stiffness() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->stiffness)); + } + double springref() const { + return ptr_->springref; + } + void set_springref(double value) { + ptr_->springref = value; + } + emscripten::val springdamper() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->springdamper)); + } + int limited() const { + return ptr_->limited; + } + void set_limited(int value) { + ptr_->limited = value; + } + emscripten::val range() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->range)); + } + double margin() const { + return ptr_->margin; + } + void set_margin(double value) { + ptr_->margin = value; + } + emscripten::val solref_limit() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_limit)); + } + emscripten::val solimp_limit() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_limit)); + } + int actfrclimited() const { + return ptr_->actfrclimited; + } + void set_actfrclimited(int value) { + ptr_->actfrclimited = value; + } + emscripten::val actfrcrange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->actfrcrange)); + } + double armature() const { + return ptr_->armature; + } + void set_armature(double value) { + ptr_->armature = value; + } + emscripten::val damping() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); + } + double frictionloss() const { + return ptr_->frictionloss; + } + void set_frictionloss(double value) { + ptr_->frictionloss = value; + } + emscripten::val solref_friction() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_friction)); + } + emscripten::val solimp_friction() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_friction)); + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + mjtByte actgravcomp() const { + return ptr_->actgravcomp; + } + void set_actgravcomp(mjtByte value) { + ptr_->actgravcomp = value; + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsJoint* ptr_; + + public: + MjsElement element; +}; + +struct MjsKey { + explicit MjsKey(mjsKey *ptr); + mjsKey* get() const; + void set(mjsKey* ptr); + double time() const { + return ptr_->time; + } + void set_time(double value) { + ptr_->time = value; + } + mjDoubleVec &qpos() const { + return *(ptr_->qpos); + } + mjDoubleVec &qvel() const { + return *(ptr_->qvel); + } + mjDoubleVec &act() const { + return *(ptr_->act); + } + mjDoubleVec &mpos() const { + return *(ptr_->mpos); + } + mjDoubleVec &mquat() const { + return *(ptr_->mquat); + } + mjDoubleVec &ctrl() const { + return *(ptr_->ctrl); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsKey* ptr_; + + public: + MjsElement element; +}; + +struct MjsLight { + explicit MjsLight(mjsLight *ptr); + mjsLight* get() const; + void set(mjsLight* ptr); + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val dir() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->dir)); + } + mjtCamLight mode() const { + return ptr_->mode; + } + void set_mode(mjtCamLight value) { + ptr_->mode = value; + } + mjString targetbody() const { + return (ptr_ && ptr_->targetbody) ? *(ptr_->targetbody) : ""; + } + void set_targetbody(const mjString& value) { + if (ptr_ && ptr_->targetbody) { + *(ptr_->targetbody) = value; + } + } + mjtByte active() const { + return ptr_->active; + } + void set_active(mjtByte value) { + ptr_->active = value; + } + mjtLightType type() const { + return ptr_->type; + } + void set_type(mjtLightType value) { + ptr_->type = value; + } + mjString texture() const { + return (ptr_ && ptr_->texture) ? *(ptr_->texture) : ""; + } + void set_texture(const mjString& value) { + if (ptr_ && ptr_->texture) { + *(ptr_->texture) = value; + } + } + mjtByte castshadow() const { + return ptr_->castshadow; + } + void set_castshadow(mjtByte value) { + ptr_->castshadow = value; + } + float bulbradius() const { + return ptr_->bulbradius; + } + void set_bulbradius(float value) { + ptr_->bulbradius = value; + } + float intensity() const { + return ptr_->intensity; + } + void set_intensity(float value) { + ptr_->intensity = value; + } + float range() const { + return ptr_->range; + } + void set_range(float value) { + ptr_->range = value; + } + emscripten::val attenuation() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->attenuation)); + } + float cutoff() const { + return ptr_->cutoff; + } + void set_cutoff(float value) { + ptr_->cutoff = value; + } + float exponent() const { + return ptr_->exponent; + } + void set_exponent(float value) { + ptr_->exponent = value; + } + emscripten::val ambient() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->ambient)); + } + emscripten::val diffuse() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->diffuse)); + } + emscripten::val specular() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->specular)); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsLight* ptr_; + + public: + MjsElement element; +}; + +struct MjsMaterial { + explicit MjsMaterial(mjsMaterial *ptr); + mjsMaterial* get() const; + void set(mjsMaterial* ptr); + mjStringVec &textures() const { + return *(ptr_->textures); + } + mjtByte texuniform() const { + return ptr_->texuniform; + } + void set_texuniform(mjtByte value) { + ptr_->texuniform = value; + } + emscripten::val texrepeat() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->texrepeat)); + } + float emission() const { + return ptr_->emission; + } + void set_emission(float value) { + ptr_->emission = value; + } + float specular() const { + return ptr_->specular; + } + void set_specular(float value) { + ptr_->specular = value; + } + float shininess() const { + return ptr_->shininess; + } + void set_shininess(float value) { + ptr_->shininess = value; + } + float reflectance() const { + return ptr_->reflectance; + } + void set_reflectance(float value) { + ptr_->reflectance = value; + } + float metallic() const { + return ptr_->metallic; + } + void set_metallic(float value) { + ptr_->metallic = value; + } + float roughness() const { + return ptr_->roughness; + } + void set_roughness(float value) { + ptr_->roughness = value; + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsMaterial* ptr_; + + public: + MjsElement element; +}; + +struct MjsNumeric { + explicit MjsNumeric(mjsNumeric *ptr); + mjsNumeric* get() const; + void set(mjsNumeric* ptr); + mjDoubleVec &data() const { + return *(ptr_->data); + } + int size() const { + return ptr_->size; + } + void set_size(int value) { + ptr_->size = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsNumeric* ptr_; + + public: + MjsElement element; +}; + +struct MjsPair { + explicit MjsPair(mjsPair *ptr); + mjsPair* get() const; + void set(mjsPair* ptr); + mjString geomname1() const { + return (ptr_ && ptr_->geomname1) ? *(ptr_->geomname1) : ""; + } + void set_geomname1(const mjString& value) { + if (ptr_ && ptr_->geomname1) { + *(ptr_->geomname1) = value; + } + } + mjString geomname2() const { + return (ptr_ && ptr_->geomname2) ? *(ptr_->geomname2) : ""; + } + void set_geomname2(const mjString& value) { + if (ptr_ && ptr_->geomname2) { + *(ptr_->geomname2) = value; + } + } + int condim() const { + return ptr_->condim; + } + void set_condim(int value) { + ptr_->condim = value; + } + emscripten::val solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); + } + emscripten::val solreffriction() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solreffriction)); + } + emscripten::val solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); + } + double margin() const { + return ptr_->margin; + } + void set_margin(double value) { + ptr_->margin = value; + } + double gap() const { + return ptr_->gap; + } + void set_gap(double value) { + ptr_->gap = value; + } + emscripten::val friction() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->friction)); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsPair* ptr_; + + public: + MjsElement element; +}; + +struct MjsPlugin { + explicit MjsPlugin(mjsPlugin *ptr); + mjsPlugin* get() const; + void set(mjsPlugin* ptr); + mjString name() const { + return (ptr_ && ptr_->name) ? *(ptr_->name) : ""; + } + void set_name(const mjString& value) { + if (ptr_ && ptr_->name) { + *(ptr_->name) = value; + } + } + mjString plugin_name() const { + return (ptr_ && ptr_->plugin_name) ? *(ptr_->plugin_name) : ""; + } + void set_plugin_name(const mjString& value) { + if (ptr_ && ptr_->plugin_name) { + *(ptr_->plugin_name) = value; + } + } + mjtByte active() const { + return ptr_->active; + } + void set_active(mjtByte value) { + ptr_->active = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsPlugin* ptr_; + + public: + MjsElement element; +}; + +struct MjsSkin { + explicit MjsSkin(mjsSkin *ptr); + mjsSkin* get() const; + void set(mjsSkin* ptr); + mjString file() const { + return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; + } + void set_file(const mjString& value) { + if (ptr_ && ptr_->file) { + *(ptr_->file) = value; + } + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + float inflate() const { + return ptr_->inflate; + } + void set_inflate(float value) { + ptr_->inflate = value; + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + mjFloatVec &vert() const { + return *(ptr_->vert); + } + mjFloatVec &texcoord() const { + return *(ptr_->texcoord); + } + mjIntVec &face() const { + return *(ptr_->face); + } + mjStringVec &bodyname() const { + return *(ptr_->bodyname); + } + mjFloatVec &bindpos() const { + return *(ptr_->bindpos); + } + mjFloatVec &bindquat() const { + return *(ptr_->bindquat); + } + mjIntVecVec &vertid() const { + return *(ptr_->vertid); + } + mjFloatVecVec &vertweight() const { + return *(ptr_->vertweight); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsSkin* ptr_; + + public: + MjsElement element; +}; + +struct MjsTendon { + explicit MjsTendon(mjsTendon *ptr); + mjsTendon* get() const; + void set(mjsTendon* ptr); + emscripten::val stiffness() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->stiffness)); + } + emscripten::val springlength() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->springlength)); + } + emscripten::val damping() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); + } + double frictionloss() const { + return ptr_->frictionloss; + } + void set_frictionloss(double value) { + ptr_->frictionloss = value; + } + emscripten::val solref_friction() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_friction)); + } + emscripten::val solimp_friction() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_friction)); + } + double armature() const { + return ptr_->armature; + } + void set_armature(double value) { + ptr_->armature = value; + } + int limited() const { + return ptr_->limited; + } + void set_limited(int value) { + ptr_->limited = value; + } + int actfrclimited() const { + return ptr_->actfrclimited; + } + void set_actfrclimited(int value) { + ptr_->actfrclimited = value; + } + emscripten::val range() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->range)); + } + emscripten::val actfrcrange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->actfrcrange)); + } + double margin() const { + return ptr_->margin; + } + void set_margin(double value) { + ptr_->margin = value; + } + emscripten::val solref_limit() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref_limit)); + } + emscripten::val solimp_limit() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp_limit)); + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + double width() const { + return ptr_->width; + } + void set_width(double value) { + ptr_->width = value; + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsTendon* ptr_; + + public: + MjsElement element; +}; + +struct MjsText { + explicit MjsText(mjsText *ptr); + mjsText* get() const; + void set(mjsText* ptr); + mjString data() const { + return (ptr_ && ptr_->data) ? *(ptr_->data) : ""; + } + void set_data(const mjString& value) { + if (ptr_ && ptr_->data) { + *(ptr_->data) = value; + } + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsText* ptr_; + + public: + MjsElement element; +}; + +struct MjsTexture { + explicit MjsTexture(mjsTexture *ptr); + mjsTexture* get() const; + void set(mjsTexture* ptr); + mjtTexture type() const { + return ptr_->type; + } + void set_type(mjtTexture value) { + ptr_->type = value; + } + mjtColorSpace colorspace() const { + return ptr_->colorspace; + } + void set_colorspace(mjtColorSpace value) { + ptr_->colorspace = value; + } + int builtin() const { + return ptr_->builtin; + } + void set_builtin(int value) { + ptr_->builtin = value; + } + int mark() const { + return ptr_->mark; + } + void set_mark(int value) { + ptr_->mark = value; + } + emscripten::val rgb1() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->rgb1)); + } + emscripten::val rgb2() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->rgb2)); + } + emscripten::val markrgb() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->markrgb)); + } + double random() const { + return ptr_->random; + } + void set_random(double value) { + ptr_->random = value; + } + int height() const { + return ptr_->height; + } + void set_height(int value) { + ptr_->height = value; + } + int width() const { + return ptr_->width; + } + void set_width(int value) { + ptr_->width = value; + } + int nchannel() const { + return ptr_->nchannel; + } + void set_nchannel(int value) { + ptr_->nchannel = value; + } + mjString content_type() const { + return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; + } + void set_content_type(const mjString& value) { + if (ptr_ && ptr_->content_type) { + *(ptr_->content_type) = value; + } + } + mjString file() const { + return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; + } + void set_file(const mjString& value) { + if (ptr_ && ptr_->file) { + *(ptr_->file) = value; + } + } + emscripten::val gridsize() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->gridsize)); + } + emscripten::val gridlayout() const { + return emscripten::val(emscripten::typed_memory_view(12, ptr_->gridlayout)); + } + mjStringVec &cubefiles() const { + return *(ptr_->cubefiles); + } + std::vector &data() const { + return *(reinterpret_cast*>(ptr_->data)); + } + mjtByte hflip() const { + return ptr_->hflip; + } + void set_hflip(mjtByte value) { + ptr_->hflip = value; + } + mjtByte vflip() const { + return ptr_->vflip; + } + void set_vflip(mjtByte value) { + ptr_->vflip = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsTexture* ptr_; + + public: + MjsElement element; +}; + +struct MjsTuple { + explicit MjsTuple(mjsTuple *ptr); + mjsTuple* get() const; + void set(mjsTuple* ptr); + mjIntVec &objtype() const { + return *(ptr_->objtype); + } + mjStringVec &objname() const { + return *(ptr_->objname); + } + mjDoubleVec &objprm() const { + return *(ptr_->objprm); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsTuple* ptr_; + + public: + MjsElement element; +}; + +struct MjsWrap { + explicit MjsWrap(mjsWrap *ptr); + mjsWrap* get() const; + void set(mjsWrap* ptr); + mjtWrap type() const { + return ptr_->type; + } + void set_type(mjtWrap value) { + ptr_->type = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsWrap* ptr_; + + public: + MjsElement element; +}; + +struct MjsCamera { + explicit MjsCamera(mjsCamera *ptr); + mjsCamera* get() const; + void set(mjsCamera* ptr); + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val quat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); + } + mjtCamLight mode() const { + return ptr_->mode; + } + void set_mode(mjtCamLight value) { + ptr_->mode = value; + } + mjString targetbody() const { + return (ptr_ && ptr_->targetbody) ? *(ptr_->targetbody) : ""; + } + void set_targetbody(const mjString& value) { + if (ptr_ && ptr_->targetbody) { + *(ptr_->targetbody) = value; + } + } + mjtProjection proj() const { + return ptr_->proj; + } + void set_proj(mjtProjection value) { + ptr_->proj = value; + } + emscripten::val resolution() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->resolution)); + } + int output() const { + return ptr_->output; + } + void set_output(int value) { + ptr_->output = value; + } + double fovy() const { + return ptr_->fovy; + } + void set_fovy(double value) { + ptr_->fovy = value; + } + double ipd() const { + return ptr_->ipd; + } + void set_ipd(double value) { + ptr_->ipd = value; + } + emscripten::val intrinsic() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->intrinsic)); + } + emscripten::val sensor_size() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->sensor_size)); + } + emscripten::val focal_length() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->focal_length)); + } + emscripten::val focal_pixel() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->focal_pixel)); + } + emscripten::val principal_length() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->principal_length)); + } + emscripten::val principal_pixel() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->principal_pixel)); + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsCamera* ptr_; + + public: + MjsElement element; + MjsOrientation alt; +}; + +struct MjsFrame { + explicit MjsFrame(mjsFrame *ptr); + mjsFrame* get() const; + void set(mjsFrame* ptr); + mjString childclass() const { + return (ptr_ && ptr_->childclass) ? *(ptr_->childclass) : ""; + } + void set_childclass(const mjString& value) { + if (ptr_ && ptr_->childclass) { + *(ptr_->childclass) = value; + } + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val quat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsFrame* ptr_; + + public: + MjsElement element; + MjsOrientation alt; +}; + +struct MjsSite { + explicit MjsSite(mjsSite *ptr); + mjsSite* get() const; + void set(mjsSite* ptr); + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val quat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); + } + emscripten::val fromto() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->fromto)); + } + emscripten::val size() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); + } + mjtGeom type() const { + return ptr_->type; + } + void set_type(mjtGeom value) { + ptr_->type = value; + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsSite* ptr_; + + public: + MjsElement element; + MjsOrientation alt; +}; + +struct MjModel { + ~MjModel(); + explicit MjModel(mjModel *ptr); + MjModel(const MjModel &); + std::unique_ptr copy(); + mjModel* get() const; + void set(mjModel* ptr); + int nq() const { + return static_cast(ptr_->nq); + } + void set_nq(int value) { + ptr_->nq = static_cast(value); + } + int nv() const { + return static_cast(ptr_->nv); + } + void set_nv(int value) { + ptr_->nv = static_cast(value); + } + int nu() const { + return static_cast(ptr_->nu); + } + void set_nu(int value) { + ptr_->nu = static_cast(value); + } + int na() const { + return static_cast(ptr_->na); + } + void set_na(int value) { + ptr_->na = static_cast(value); + } + int nbody() const { + return static_cast(ptr_->nbody); + } + void set_nbody(int value) { + ptr_->nbody = static_cast(value); + } + int nbvh() const { + return static_cast(ptr_->nbvh); + } + void set_nbvh(int value) { + ptr_->nbvh = static_cast(value); + } + int nbvhstatic() const { + return static_cast(ptr_->nbvhstatic); + } + void set_nbvhstatic(int value) { + ptr_->nbvhstatic = static_cast(value); + } + int nbvhdynamic() const { + return static_cast(ptr_->nbvhdynamic); + } + void set_nbvhdynamic(int value) { + ptr_->nbvhdynamic = static_cast(value); + } + int noct() const { + return static_cast(ptr_->noct); + } + void set_noct(int value) { + ptr_->noct = static_cast(value); + } + int njnt() const { + return static_cast(ptr_->njnt); + } + void set_njnt(int value) { + ptr_->njnt = static_cast(value); + } + int ntree() const { + return static_cast(ptr_->ntree); + } + void set_ntree(int value) { + ptr_->ntree = static_cast(value); + } + int nM() const { + return static_cast(ptr_->nM); + } + void set_nM(int value) { + ptr_->nM = static_cast(value); + } + int nB() const { + return static_cast(ptr_->nB); + } + void set_nB(int value) { + ptr_->nB = static_cast(value); + } + int nC() const { + return static_cast(ptr_->nC); + } + void set_nC(int value) { + ptr_->nC = static_cast(value); + } + int nD() const { + return static_cast(ptr_->nD); + } + void set_nD(int value) { + ptr_->nD = static_cast(value); + } + int ngeom() const { + return static_cast(ptr_->ngeom); + } + void set_ngeom(int value) { + ptr_->ngeom = static_cast(value); + } + int nsite() const { + return static_cast(ptr_->nsite); + } + void set_nsite(int value) { + ptr_->nsite = static_cast(value); + } + int ncam() const { + return static_cast(ptr_->ncam); + } + void set_ncam(int value) { + ptr_->ncam = static_cast(value); + } + int nlight() const { + return static_cast(ptr_->nlight); + } + void set_nlight(int value) { + ptr_->nlight = static_cast(value); + } + int nflex() const { + return static_cast(ptr_->nflex); + } + void set_nflex(int value) { + ptr_->nflex = static_cast(value); + } + int nflexnode() const { + return static_cast(ptr_->nflexnode); + } + void set_nflexnode(int value) { + ptr_->nflexnode = static_cast(value); + } + int nflexvert() const { + return static_cast(ptr_->nflexvert); + } + void set_nflexvert(int value) { + ptr_->nflexvert = static_cast(value); + } + int nflexedge() const { + return static_cast(ptr_->nflexedge); + } + void set_nflexedge(int value) { + ptr_->nflexedge = static_cast(value); + } + int nflexelem() const { + return static_cast(ptr_->nflexelem); + } + void set_nflexelem(int value) { + ptr_->nflexelem = static_cast(value); + } + int nflexelemdata() const { + return static_cast(ptr_->nflexelemdata); + } + void set_nflexelemdata(int value) { + ptr_->nflexelemdata = static_cast(value); + } + int nflexstiffness() const { + return static_cast(ptr_->nflexstiffness); + } + void set_nflexstiffness(int value) { + ptr_->nflexstiffness = static_cast(value); + } + int nflexbending() const { + return static_cast(ptr_->nflexbending); + } + void set_nflexbending(int value) { + ptr_->nflexbending = static_cast(value); + } + int nflexelemedge() const { + return static_cast(ptr_->nflexelemedge); + } + void set_nflexelemedge(int value) { + ptr_->nflexelemedge = static_cast(value); + } + int nflexshelldata() const { + return static_cast(ptr_->nflexshelldata); + } + void set_nflexshelldata(int value) { + ptr_->nflexshelldata = static_cast(value); + } + int nflexevpair() const { + return static_cast(ptr_->nflexevpair); + } + void set_nflexevpair(int value) { + ptr_->nflexevpair = static_cast(value); + } + int nflextexcoord() const { + return static_cast(ptr_->nflextexcoord); + } + void set_nflextexcoord(int value) { + ptr_->nflextexcoord = static_cast(value); + } + int nJfe() const { + return static_cast(ptr_->nJfe); + } + void set_nJfe(int value) { + ptr_->nJfe = static_cast(value); + } + int nJfv() const { + return static_cast(ptr_->nJfv); + } + void set_nJfv(int value) { + ptr_->nJfv = static_cast(value); + } + int nmesh() const { + return static_cast(ptr_->nmesh); + } + void set_nmesh(int value) { + ptr_->nmesh = static_cast(value); + } + int nmeshvert() const { + return static_cast(ptr_->nmeshvert); + } + void set_nmeshvert(int value) { + ptr_->nmeshvert = static_cast(value); + } + int nmeshnormal() const { + return static_cast(ptr_->nmeshnormal); + } + void set_nmeshnormal(int value) { + ptr_->nmeshnormal = static_cast(value); + } + int nmeshtexcoord() const { + return static_cast(ptr_->nmeshtexcoord); + } + void set_nmeshtexcoord(int value) { + ptr_->nmeshtexcoord = static_cast(value); + } + int nmeshface() const { + return static_cast(ptr_->nmeshface); + } + void set_nmeshface(int value) { + ptr_->nmeshface = static_cast(value); + } + int nmeshgraph() const { + return static_cast(ptr_->nmeshgraph); + } + void set_nmeshgraph(int value) { + ptr_->nmeshgraph = static_cast(value); + } + int nmeshpoly() const { + return static_cast(ptr_->nmeshpoly); + } + void set_nmeshpoly(int value) { + ptr_->nmeshpoly = static_cast(value); + } + int nmeshpolyvert() const { + return static_cast(ptr_->nmeshpolyvert); + } + void set_nmeshpolyvert(int value) { + ptr_->nmeshpolyvert = static_cast(value); + } + int nmeshpolymap() const { + return static_cast(ptr_->nmeshpolymap); + } + void set_nmeshpolymap(int value) { + ptr_->nmeshpolymap = static_cast(value); + } + int nskin() const { + return static_cast(ptr_->nskin); + } + void set_nskin(int value) { + ptr_->nskin = static_cast(value); + } + int nskinvert() const { + return static_cast(ptr_->nskinvert); + } + void set_nskinvert(int value) { + ptr_->nskinvert = static_cast(value); + } + int nskintexvert() const { + return static_cast(ptr_->nskintexvert); + } + void set_nskintexvert(int value) { + ptr_->nskintexvert = static_cast(value); + } + int nskinface() const { + return static_cast(ptr_->nskinface); + } + void set_nskinface(int value) { + ptr_->nskinface = static_cast(value); + } + int nskinbone() const { + return static_cast(ptr_->nskinbone); + } + void set_nskinbone(int value) { + ptr_->nskinbone = static_cast(value); + } + int nskinbonevert() const { + return static_cast(ptr_->nskinbonevert); + } + void set_nskinbonevert(int value) { + ptr_->nskinbonevert = static_cast(value); + } + int nhfield() const { + return static_cast(ptr_->nhfield); + } + void set_nhfield(int value) { + ptr_->nhfield = static_cast(value); + } + int nhfielddata() const { + return static_cast(ptr_->nhfielddata); + } + void set_nhfielddata(int value) { + ptr_->nhfielddata = static_cast(value); + } + int ntex() const { + return static_cast(ptr_->ntex); + } + void set_ntex(int value) { + ptr_->ntex = static_cast(value); + } + int ntexdata() const { + return static_cast(ptr_->ntexdata); + } + void set_ntexdata(int value) { + ptr_->ntexdata = static_cast(value); + } + int nmat() const { + return static_cast(ptr_->nmat); + } + void set_nmat(int value) { + ptr_->nmat = static_cast(value); + } + int npair() const { + return static_cast(ptr_->npair); + } + void set_npair(int value) { + ptr_->npair = static_cast(value); + } + int nexclude() const { + return static_cast(ptr_->nexclude); + } + void set_nexclude(int value) { + ptr_->nexclude = static_cast(value); + } + int neq() const { + return static_cast(ptr_->neq); + } + void set_neq(int value) { + ptr_->neq = static_cast(value); + } + int ntendon() const { + return static_cast(ptr_->ntendon); + } + void set_ntendon(int value) { + ptr_->ntendon = static_cast(value); + } + int nJten() const { + return static_cast(ptr_->nJten); + } + void set_nJten(int value) { + ptr_->nJten = static_cast(value); + } + int nwrap() const { + return static_cast(ptr_->nwrap); + } + void set_nwrap(int value) { + ptr_->nwrap = static_cast(value); + } + int nsensor() const { + return static_cast(ptr_->nsensor); + } + void set_nsensor(int value) { + ptr_->nsensor = static_cast(value); + } + int nnumeric() const { + return static_cast(ptr_->nnumeric); + } + void set_nnumeric(int value) { + ptr_->nnumeric = static_cast(value); + } + int nnumericdata() const { + return static_cast(ptr_->nnumericdata); + } + void set_nnumericdata(int value) { + ptr_->nnumericdata = static_cast(value); + } + int ntext() const { + return static_cast(ptr_->ntext); + } + void set_ntext(int value) { + ptr_->ntext = static_cast(value); + } + int ntextdata() const { + return static_cast(ptr_->ntextdata); + } + void set_ntextdata(int value) { + ptr_->ntextdata = static_cast(value); + } + int ntuple() const { + return static_cast(ptr_->ntuple); + } + void set_ntuple(int value) { + ptr_->ntuple = static_cast(value); + } + int ntupledata() const { + return static_cast(ptr_->ntupledata); + } + void set_ntupledata(int value) { + ptr_->ntupledata = static_cast(value); + } + int nkey() const { + return static_cast(ptr_->nkey); + } + void set_nkey(int value) { + ptr_->nkey = static_cast(value); + } + int nmocap() const { + return static_cast(ptr_->nmocap); + } + void set_nmocap(int value) { + ptr_->nmocap = static_cast(value); + } + int nplugin() const { + return static_cast(ptr_->nplugin); + } + void set_nplugin(int value) { + ptr_->nplugin = static_cast(value); + } + int npluginattr() const { + return static_cast(ptr_->npluginattr); + } + void set_npluginattr(int value) { + ptr_->npluginattr = static_cast(value); + } + int nuser_body() const { + return static_cast(ptr_->nuser_body); + } + void set_nuser_body(int value) { + ptr_->nuser_body = static_cast(value); + } + int nuser_jnt() const { + return static_cast(ptr_->nuser_jnt); + } + void set_nuser_jnt(int value) { + ptr_->nuser_jnt = static_cast(value); + } + int nuser_geom() const { + return static_cast(ptr_->nuser_geom); + } + void set_nuser_geom(int value) { + ptr_->nuser_geom = static_cast(value); + } + int nuser_site() const { + return static_cast(ptr_->nuser_site); + } + void set_nuser_site(int value) { + ptr_->nuser_site = static_cast(value); + } + int nuser_cam() const { + return static_cast(ptr_->nuser_cam); + } + void set_nuser_cam(int value) { + ptr_->nuser_cam = static_cast(value); + } + int nuser_tendon() const { + return static_cast(ptr_->nuser_tendon); + } + void set_nuser_tendon(int value) { + ptr_->nuser_tendon = static_cast(value); + } + int nuser_actuator() const { + return static_cast(ptr_->nuser_actuator); + } + void set_nuser_actuator(int value) { + ptr_->nuser_actuator = static_cast(value); + } + int nuser_sensor() const { + return static_cast(ptr_->nuser_sensor); + } + void set_nuser_sensor(int value) { + ptr_->nuser_sensor = static_cast(value); + } + int nnames() const { + return static_cast(ptr_->nnames); + } + void set_nnames(int value) { + ptr_->nnames = static_cast(value); + } + int npaths() const { + return static_cast(ptr_->npaths); + } + void set_npaths(int value) { + ptr_->npaths = static_cast(value); + } + int nnames_map() const { + return static_cast(ptr_->nnames_map); + } + void set_nnames_map(int value) { + ptr_->nnames_map = static_cast(value); + } + int nJmom() const { + return static_cast(ptr_->nJmom); + } + void set_nJmom(int value) { + ptr_->nJmom = static_cast(value); + } + int ngravcomp() const { + return static_cast(ptr_->ngravcomp); + } + void set_ngravcomp(int value) { + ptr_->ngravcomp = static_cast(value); + } + int nemax() const { + return static_cast(ptr_->nemax); + } + void set_nemax(int value) { + ptr_->nemax = static_cast(value); + } + int njmax() const { + return static_cast(ptr_->njmax); + } + void set_njmax(int value) { + ptr_->njmax = static_cast(value); + } + int nconmax() const { + return static_cast(ptr_->nconmax); + } + void set_nconmax(int value) { + ptr_->nconmax = static_cast(value); + } + int nuserdata() const { + return static_cast(ptr_->nuserdata); + } + void set_nuserdata(int value) { + ptr_->nuserdata = static_cast(value); + } + int nsensordata() const { + return static_cast(ptr_->nsensordata); + } + void set_nsensordata(int value) { + ptr_->nsensordata = static_cast(value); + } + int npluginstate() const { + return static_cast(ptr_->npluginstate); + } + void set_npluginstate(int value) { + ptr_->npluginstate = static_cast(value); + } + int nhistory() const { + return static_cast(ptr_->nhistory); + } + void set_nhistory(int value) { + ptr_->nhistory = static_cast(value); + } + int narena() const { + return static_cast(ptr_->narena); + } + void set_narena(int value) { + ptr_->narena = static_cast(value); + } + int nbuffer() const { + return static_cast(ptr_->nbuffer); + } + void set_nbuffer(int value) { + ptr_->nbuffer = static_cast(value); + } + emscripten::val buffer() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbuffer, static_cast(ptr_->buffer))); + } + emscripten::val qpos0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nq, ptr_->qpos0)); + } + emscripten::val qpos_spring() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nq, ptr_->qpos_spring)); + } + emscripten::val body_parentid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_parentid)); + } + emscripten::val body_rootid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_rootid)); + } + emscripten::val body_weldid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_weldid)); + } + emscripten::val body_mocapid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_mocapid)); + } + emscripten::val body_jntnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_jntnum)); + } + emscripten::val body_jntadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_jntadr)); + } + emscripten::val body_dofnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_dofnum)); + } + emscripten::val body_dofadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_dofadr)); + } + emscripten::val body_treeid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_treeid)); + } + emscripten::val body_geomnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_geomnum)); + } + emscripten::val body_geomadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_geomadr)); + } + emscripten::val body_simple() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_simple)); + } + emscripten::val body_sameframe() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_sameframe)); + } + emscripten::val body_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_pos)); + } + emscripten::val body_quat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 4, ptr_->body_quat)); + } + emscripten::val body_ipos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_ipos)); + } + emscripten::val body_iquat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 4, ptr_->body_iquat)); + } + emscripten::val body_mass() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_mass)); + } + emscripten::val body_subtreemass() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_subtreemass)); + } + emscripten::val body_inertia() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 3, ptr_->body_inertia)); + } + emscripten::val body_invweight0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * 2, ptr_->body_invweight0)); + } + emscripten::val body_gravcomp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_gravcomp)); + } + emscripten::val body_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_margin)); + } + emscripten::val body_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody * ptr_->nuser_body, ptr_->body_user)); + } + emscripten::val body_plugin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_plugin)); + } + emscripten::val body_contype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_contype)); + } + emscripten::val body_conaffinity() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_conaffinity)); + } + emscripten::val body_bvhadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_bvhadr)); + } + emscripten::val body_bvhnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->body_bvhnum)); + } + emscripten::val bvh_depth() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh, ptr_->bvh_depth)); + } + emscripten::val bvh_child() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh * 2, ptr_->bvh_child)); + } + emscripten::val bvh_nodeid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbvh, ptr_->bvh_nodeid)); + } + emscripten::val bvh_aabb() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbvhstatic * 6, ptr_->bvh_aabb)); + } + emscripten::val oct_depth() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->noct, ptr_->oct_depth)); + } + emscripten::val oct_child() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 8, ptr_->oct_child)); + } + emscripten::val oct_aabb() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 6, ptr_->oct_aabb)); + } + emscripten::val oct_coeff() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->noct * 8, ptr_->oct_coeff)); + } + emscripten::val jnt_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_type)); + } + emscripten::val jnt_qposadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_qposadr)); + } + emscripten::val jnt_dofadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_dofadr)); + } + emscripten::val jnt_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_bodyid)); + } + emscripten::val jnt_actuatorid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actuatorid)); + } + emscripten::val jnt_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_group)); + } + emscripten::val jnt_limited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_limited)); + } + emscripten::val jnt_actfrclimited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actfrclimited)); + } + emscripten::val jnt_actgravcomp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_actgravcomp)); + } + emscripten::val jnt_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNREF, ptr_->jnt_solref)); + } + emscripten::val jnt_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNIMP, ptr_->jnt_solimp)); + } + emscripten::val jnt_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 3, ptr_->jnt_pos)); + } + emscripten::val jnt_axis() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 3, ptr_->jnt_axis)); + } + emscripten::val jnt_stiffness() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_stiffness)); + } + emscripten::val jnt_stiffnesspoly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * mjNPOLY, ptr_->jnt_stiffnesspoly)); + } + emscripten::val jnt_range() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 2, ptr_->jnt_range)); + } + emscripten::val jnt_actfrcrange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * 2, ptr_->jnt_actfrcrange)); + } + emscripten::val jnt_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->jnt_margin)); + } + emscripten::val jnt_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt * ptr_->nuser_jnt, ptr_->jnt_user)); + } + emscripten::val dof_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_bodyid)); + } + emscripten::val dof_jntid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_jntid)); + } + emscripten::val dof_parentid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_parentid)); + } + emscripten::val dof_treeid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_treeid)); + } + emscripten::val dof_Madr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_Madr)); + } + emscripten::val dof_simplenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_simplenum)); + } + emscripten::val dof_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNREF, ptr_->dof_solref)); + } + emscripten::val dof_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNIMP, ptr_->dof_solimp)); + } + emscripten::val dof_frictionloss() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_frictionloss)); + } + emscripten::val dof_armature() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_armature)); + } + emscripten::val dof_damping() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_damping)); + } + emscripten::val dof_dampingpoly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv * mjNPOLY, ptr_->dof_dampingpoly)); + } + emscripten::val dof_invweight0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_invweight0)); + } + emscripten::val dof_M0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_M0)); + } + emscripten::val dof_length() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->dof_length)); + } + emscripten::val tree_bodyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_bodyadr)); + } + emscripten::val tree_bodynum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_bodynum)); + } + emscripten::val tree_dofadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_dofadr)); + } + emscripten::val tree_dofnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_dofnum)); + } + emscripten::val tree_sleep_policy() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntree, ptr_->tree_sleep_policy)); + } + emscripten::val geom_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_type)); + } + emscripten::val geom_contype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_contype)); + } + emscripten::val geom_conaffinity() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_conaffinity)); + } + emscripten::val geom_condim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_condim)); + } + emscripten::val geom_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_bodyid)); + } + emscripten::val geom_dataid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_dataid)); + } + emscripten::val geom_matid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_matid)); + } + emscripten::val geom_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_group)); + } + emscripten::val geom_priority() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_priority)); + } + emscripten::val geom_plugin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_plugin)); + } + emscripten::val geom_sameframe() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_sameframe)); + } + emscripten::val geom_solmix() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_solmix)); + } + emscripten::val geom_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNREF, ptr_->geom_solref)); + } + emscripten::val geom_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNIMP, ptr_->geom_solimp)); + } + emscripten::val geom_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_size)); + } + emscripten::val geom_aabb() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 6, ptr_->geom_aabb)); + } + emscripten::val geom_rbound() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_rbound)); + } + emscripten::val geom_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_pos)); + } + emscripten::val geom_quat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 4, ptr_->geom_quat)); + } + emscripten::val geom_friction() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 3, ptr_->geom_friction)); + } + emscripten::val geom_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_margin)); + } + emscripten::val geom_gap() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->geom_gap)); + } + emscripten::val geom_fluid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * mjNFLUID, ptr_->geom_fluid)); + } + emscripten::val geom_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * ptr_->nuser_geom, ptr_->geom_user)); + } + emscripten::val geom_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 4, ptr_->geom_rgba)); + } + emscripten::val site_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_type)); + } + emscripten::val site_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_bodyid)); + } + emscripten::val site_matid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_matid)); + } + emscripten::val site_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_group)); + } + emscripten::val site_sameframe() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->site_sameframe)); + } + emscripten::val site_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 3, ptr_->site_size)); + } + emscripten::val site_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 3, ptr_->site_pos)); + } + emscripten::val site_quat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 4, ptr_->site_quat)); + } + emscripten::val site_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * ptr_->nuser_site, ptr_->site_user)); + } + emscripten::val site_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite * 4, ptr_->site_rgba)); + } + emscripten::val cam_mode() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_mode)); + } + emscripten::val cam_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_bodyid)); + } + emscripten::val cam_targetbodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_targetbodyid)); + } + emscripten::val cam_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_pos)); + } + emscripten::val cam_quat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 4, ptr_->cam_quat)); + } + emscripten::val cam_poscom0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_poscom0)); + } + emscripten::val cam_pos0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 3, ptr_->cam_pos0)); + } + emscripten::val cam_mat0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 9, ptr_->cam_mat0)); + } + emscripten::val cam_projection() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_projection)); + } + emscripten::val cam_fovy() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_fovy)); + } + emscripten::val cam_ipd() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_ipd)); + } + emscripten::val cam_resolution() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 2, ptr_->cam_resolution)); + } + emscripten::val cam_output() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->cam_output)); + } + emscripten::val cam_sensorsize() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 2, ptr_->cam_sensorsize)); + } + emscripten::val cam_intrinsic() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * 4, ptr_->cam_intrinsic)); + } + emscripten::val cam_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam * ptr_->nuser_cam, ptr_->cam_user)); + } + emscripten::val light_mode() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_mode)); + } + emscripten::val light_bodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_bodyid)); + } + emscripten::val light_targetbodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_targetbodyid)); + } + emscripten::val light_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_type)); + } + emscripten::val light_texid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_texid)); + } + emscripten::val light_castshadow() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_castshadow)); + } + emscripten::val light_bulbradius() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_bulbradius)); + } + emscripten::val light_intensity() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_intensity)); + } + emscripten::val light_range() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_range)); + } + emscripten::val light_active() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_active)); + } + emscripten::val light_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_pos)); + } + emscripten::val light_dir() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_dir)); + } + emscripten::val light_poscom0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_poscom0)); + } + emscripten::val light_pos0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_pos0)); + } + emscripten::val light_dir0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_dir0)); + } + emscripten::val light_attenuation() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_attenuation)); + } + emscripten::val light_cutoff() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_cutoff)); + } + emscripten::val light_exponent() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->light_exponent)); + } + emscripten::val light_ambient() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_ambient)); + } + emscripten::val light_diffuse() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_diffuse)); + } + emscripten::val light_specular() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight * 3, ptr_->light_specular)); + } + emscripten::val flex_contype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_contype)); + } + emscripten::val flex_conaffinity() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_conaffinity)); + } + emscripten::val flex_condim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_condim)); + } + emscripten::val flex_priority() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_priority)); + } + emscripten::val flex_solmix() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_solmix)); + } + emscripten::val flex_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * mjNREF, ptr_->flex_solref)); + } + emscripten::val flex_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * mjNIMP, ptr_->flex_solimp)); + } + emscripten::val flex_friction() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_friction)); + } + emscripten::val flex_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_margin)); + } + emscripten::val flex_gap() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_gap)); + } + emscripten::val flex_internal() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_internal)); + } + emscripten::val flex_selfcollide() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_selfcollide)); + } + emscripten::val flex_activelayers() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_activelayers)); + } + emscripten::val flex_passive() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_passive)); + } + emscripten::val flex_dim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_dim)); + } + emscripten::val flex_matid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_matid)); + } + emscripten::val flex_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_group)); + } + emscripten::val flex_interp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_interp)); + } + emscripten::val flex_cellnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_cellnum)); + } + emscripten::val flex_nodeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_nodeadr)); + } + emscripten::val flex_nodenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_nodenum)); + } + emscripten::val flex_vertadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_vertadr)); + } + emscripten::val flex_vertnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_vertnum)); + } + emscripten::val flex_edgeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgeadr)); + } + emscripten::val flex_edgenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgenum)); + } + emscripten::val flex_elemadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemadr)); + } + emscripten::val flex_elemnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemnum)); + } + emscripten::val flex_elemdataadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemdataadr)); + } + emscripten::val flex_stiffnessadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_stiffnessadr)); + } + emscripten::val flex_elemedgeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemedgeadr)); + } + emscripten::val flex_bendingadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bendingadr)); + } + emscripten::val flex_shellnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_shellnum)); + } + emscripten::val flex_shelldataadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_shelldataadr)); + } + emscripten::val flex_evpairadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_evpairadr)); + } + emscripten::val flex_evpairnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_evpairnum)); + } + emscripten::val flex_texcoordadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_texcoordadr)); + } + emscripten::val flex_nodebodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode, ptr_->flex_nodebodyid)); + } + emscripten::val flex_vertbodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertbodyid)); + } + emscripten::val flex_vertedgeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertedgeadr)); + } + emscripten::val flex_vertedgenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert, ptr_->flex_vertedgenum)); + } + emscripten::val flex_vertedge() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_vertedge)); + } + emscripten::val flex_edge() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_edge)); + } + emscripten::val flex_edgeflap() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 2, ptr_->flex_edgeflap)); + } + emscripten::val flex_elem() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemdata, ptr_->flex_elem)); + } + emscripten::val flex_elemtexcoord() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemdata, ptr_->flex_elemtexcoord)); + } + emscripten::val flex_elemedge() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelemedge, ptr_->flex_elemedge)); + } + emscripten::val flex_elemlayer() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelem, ptr_->flex_elemlayer)); + } + emscripten::val flex_shell() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexshelldata, ptr_->flex_shell)); + } + emscripten::val flex_evpair() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexevpair * 2, ptr_->flex_evpair)); + } + emscripten::val flex_vert() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 3, ptr_->flex_vert)); + } + emscripten::val flex_vert0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 3, ptr_->flex_vert0)); + } + emscripten::val flex_vertmetric() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 4, ptr_->flex_vertmetric)); + } + emscripten::val flex_node() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode * 3, ptr_->flex_node)); + } + emscripten::val flex_node0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexnode * 3, ptr_->flex_node0)); + } + emscripten::val flexedge_length0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_length0)); + } + emscripten::val flexedge_invweight0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_invweight0)); + } + emscripten::val flex_radius() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_radius)); + } + emscripten::val flex_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_size)); + } + emscripten::val flex_stiffness() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexstiffness, ptr_->flex_stiffness)); + } + emscripten::val flex_bending() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexbending, ptr_->flex_bending)); + } + emscripten::val flex_damping() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_damping)); + } + emscripten::val flex_edgestiffness() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgestiffness)); + } + emscripten::val flex_edgedamping() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgedamping)); + } + emscripten::val flex_edgeequality() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_edgeequality)); + } + emscripten::val flex_rigid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_rigid)); + } + emscripten::val flexedge_rigid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_rigid)); + } + emscripten::val flex_centered() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_centered)); + } + emscripten::val flex_flatskin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_flatskin)); + } + emscripten::val flex_bvhadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bvhadr)); + } + emscripten::val flex_bvhnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_bvhnum)); + } + emscripten::val flexedge_J_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_J_rownnz)); + } + emscripten::val flexedge_J_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge, ptr_->flexedge_J_rowadr)); + } + emscripten::val flexedge_J_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nJfe, ptr_->flexedge_J_colind)); + } + emscripten::val flexvert_J_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 2, ptr_->flexvert_J_rownnz)); + } + emscripten::val flexvert_J_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflexvert * 2, ptr_->flexvert_J_rowadr)); + } + emscripten::val flexvert_J_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nJfv * 2, ptr_->flexvert_J_colind)); + } + emscripten::val flex_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 4, ptr_->flex_rgba)); + } + emscripten::val flex_texcoord() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflextexcoord * 2, ptr_->flex_texcoord)); + } + emscripten::val mesh_vertadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_vertadr)); + } + emscripten::val mesh_vertnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_vertnum)); + } + emscripten::val mesh_faceadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_faceadr)); + } + emscripten::val mesh_facenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_facenum)); + } + emscripten::val mesh_bvhadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_bvhadr)); + } + emscripten::val mesh_bvhnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_bvhnum)); + } + emscripten::val mesh_octadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_octadr)); + } + emscripten::val mesh_octnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_octnum)); + } + emscripten::val mesh_normaladr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_normaladr)); + } + emscripten::val mesh_normalnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_normalnum)); + } + emscripten::val mesh_texcoordadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_texcoordadr)); + } + emscripten::val mesh_texcoordnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_texcoordnum)); + } + emscripten::val mesh_graphadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_graphadr)); + } + emscripten::val mesh_vert() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert * 3, ptr_->mesh_vert)); + } + emscripten::val mesh_normal() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshnormal * 3, ptr_->mesh_normal)); + } + emscripten::val mesh_texcoord() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshtexcoord * 2, ptr_->mesh_texcoord)); + } + emscripten::val mesh_face() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_face)); + } + emscripten::val mesh_facenormal() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_facenormal)); + } + emscripten::val mesh_facetexcoord() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshface * 3, ptr_->mesh_facetexcoord)); + } + emscripten::val mesh_graph() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshgraph, ptr_->mesh_graph)); + } + emscripten::val mesh_scale() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 3, ptr_->mesh_scale)); + } + emscripten::val mesh_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 3, ptr_->mesh_pos)); + } + emscripten::val mesh_quat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh * 4, ptr_->mesh_quat)); + } + emscripten::val mesh_pathadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_pathadr)); + } + emscripten::val mesh_polynum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_polynum)); + } + emscripten::val mesh_polyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->mesh_polyadr)); + } + emscripten::val mesh_polynormal() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly * 3, ptr_->mesh_polynormal)); + } + emscripten::val mesh_polyvertadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly, ptr_->mesh_polyvertadr)); + } + emscripten::val mesh_polyvertnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpoly, ptr_->mesh_polyvertnum)); + } + emscripten::val mesh_polyvert() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpolyvert, ptr_->mesh_polyvert)); + } + emscripten::val mesh_polymapadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert, ptr_->mesh_polymapadr)); + } + emscripten::val mesh_polymapnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshvert, ptr_->mesh_polymapnum)); + } + emscripten::val mesh_polymap() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmeshpolymap, ptr_->mesh_polymap)); + } + emscripten::val skin_matid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_matid)); + } + emscripten::val skin_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_group)); + } + emscripten::val skin_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin * 4, ptr_->skin_rgba)); + } + emscripten::val skin_inflate() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_inflate)); + } + emscripten::val skin_vertadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_vertadr)); + } + emscripten::val skin_vertnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_vertnum)); + } + emscripten::val skin_texcoordadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_texcoordadr)); + } + emscripten::val skin_faceadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_faceadr)); + } + emscripten::val skin_facenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_facenum)); + } + emscripten::val skin_boneadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_boneadr)); + } + emscripten::val skin_bonenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_bonenum)); + } + emscripten::val skin_vert() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinvert * 3, ptr_->skin_vert)); + } + emscripten::val skin_texcoord() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskintexvert * 2, ptr_->skin_texcoord)); + } + emscripten::val skin_face() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinface * 3, ptr_->skin_face)); + } + emscripten::val skin_bonevertadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonevertadr)); + } + emscripten::val skin_bonevertnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonevertnum)); + } + emscripten::val skin_bonebindpos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone * 3, ptr_->skin_bonebindpos)); + } + emscripten::val skin_bonebindquat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone * 4, ptr_->skin_bonebindquat)); + } + emscripten::val skin_bonebodyid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbone, ptr_->skin_bonebodyid)); + } + emscripten::val skin_bonevertid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbonevert, ptr_->skin_bonevertid)); + } + emscripten::val skin_bonevertweight() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskinbonevert, ptr_->skin_bonevertweight)); + } + emscripten::val skin_pathadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->skin_pathadr)); + } + emscripten::val hfield_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield * 4, ptr_->hfield_size)); + } + emscripten::val hfield_nrow() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_nrow)); + } + emscripten::val hfield_ncol() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_ncol)); + } + emscripten::val hfield_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_adr)); + } + emscripten::val hfield_data() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfielddata, ptr_->hfield_data)); + } + emscripten::val hfield_pathadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->hfield_pathadr)); + } + emscripten::val tex_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_type)); + } + emscripten::val tex_colorspace() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_colorspace)); + } + emscripten::val tex_height() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_height)); + } + emscripten::val tex_width() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_width)); + } + emscripten::val tex_nchannel() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_nchannel)); + } + emscripten::val tex_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_adr)); + } + emscripten::val tex_data() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntexdata, ptr_->tex_data)); + } + emscripten::val tex_pathadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->tex_pathadr)); + } + emscripten::val mat_texid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * mjNTEXROLE, ptr_->mat_texid)); + } + emscripten::val mat_texuniform() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_texuniform)); + } + emscripten::val mat_texrepeat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * 2, ptr_->mat_texrepeat)); + } + emscripten::val mat_emission() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_emission)); + } + emscripten::val mat_specular() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_specular)); + } + emscripten::val mat_shininess() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_shininess)); + } + emscripten::val mat_reflectance() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_reflectance)); + } + emscripten::val mat_metallic() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_metallic)); + } + emscripten::val mat_roughness() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->mat_roughness)); + } + emscripten::val mat_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat * 4, ptr_->mat_rgba)); + } + emscripten::val pair_dim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_dim)); + } + emscripten::val pair_geom1() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_geom1)); + } + emscripten::val pair_geom2() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_geom2)); + } + emscripten::val pair_signature() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_signature)); + } + emscripten::val pair_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNREF, ptr_->pair_solref)); + } + emscripten::val pair_solreffriction() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNREF, ptr_->pair_solreffriction)); + } + emscripten::val pair_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair * mjNIMP, ptr_->pair_solimp)); + } + emscripten::val pair_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_margin)); + } + emscripten::val pair_gap() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->pair_gap)); + } + emscripten::val pair_friction() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair * 5, ptr_->pair_friction)); + } + emscripten::val exclude_signature() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nexclude, ptr_->exclude_signature)); + } + emscripten::val eq_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_type)); + } + emscripten::val eq_obj1id() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_obj1id)); + } + emscripten::val eq_obj2id() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_obj2id)); + } + emscripten::val eq_objtype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_objtype)); + } + emscripten::val eq_active0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->eq_active0)); + } + emscripten::val eq_solref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNREF, ptr_->eq_solref)); + } + emscripten::val eq_solimp() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNIMP, ptr_->eq_solimp)); + } + emscripten::val eq_data() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq * mjNEQDATA, ptr_->eq_data)); + } + emscripten::val tendon_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_adr)); + } + emscripten::val tendon_num() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_num)); + } + emscripten::val tendon_matid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_matid)); + } + emscripten::val tendon_actuatorid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_actuatorid)); + } + emscripten::val tendon_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_group)); + } + emscripten::val tendon_treenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_treenum)); + } + emscripten::val tendon_treeid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_treeid)); + } + emscripten::val ten_J_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->ten_J_rownnz)); + } + emscripten::val ten_J_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->ten_J_rowadr)); + } + emscripten::val ten_J_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nJten, ptr_->ten_J_colind)); + } + emscripten::val tendon_limited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_limited)); + } + emscripten::val tendon_actfrclimited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_actfrclimited)); + } + emscripten::val tendon_width() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_width)); + } + emscripten::val tendon_solref_lim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNREF, ptr_->tendon_solref_lim)); + } + emscripten::val tendon_solimp_lim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNIMP, ptr_->tendon_solimp_lim)); + } + emscripten::val tendon_solref_fri() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNREF, ptr_->tendon_solref_fri)); + } + emscripten::val tendon_solimp_fri() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNIMP, ptr_->tendon_solimp_fri)); + } + emscripten::val tendon_range() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_range)); + } + emscripten::val tendon_actfrcrange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_actfrcrange)); + } + emscripten::val tendon_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_margin)); + } + emscripten::val tendon_stiffness() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_stiffness)); + } + emscripten::val tendon_stiffnesspoly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNPOLY, ptr_->tendon_stiffnesspoly)); + } + emscripten::val tendon_damping() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_damping)); + } + emscripten::val tendon_dampingpoly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * mjNPOLY, ptr_->tendon_dampingpoly)); + } + emscripten::val tendon_armature() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_armature)); + } + emscripten::val tendon_frictionloss() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_frictionloss)); + } + emscripten::val tendon_lengthspring() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 2, ptr_->tendon_lengthspring)); + } + emscripten::val tendon_length0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_length0)); + } + emscripten::val tendon_invweight0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->tendon_invweight0)); + } + emscripten::val tendon_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * ptr_->nuser_tendon, ptr_->tendon_user)); + } + emscripten::val tendon_rgba() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon * 4, ptr_->tendon_rgba)); + } + emscripten::val wrap_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_type)); + } + emscripten::val wrap_objid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_objid)); + } + emscripten::val wrap_prm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nwrap, ptr_->wrap_prm)); + } + emscripten::val actuator_trntype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_trntype)); + } + emscripten::val actuator_dyntype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_dyntype)); + } + emscripten::val actuator_gaintype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_gaintype)); + } + emscripten::val actuator_biastype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_biastype)); + } + emscripten::val actuator_trnid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_trnid)); + } + emscripten::val actuator_damping() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_damping)); + } + emscripten::val actuator_dampingpoly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNPOLY, ptr_->actuator_dampingpoly)); + } + emscripten::val actuator_armature() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_armature)); + } + emscripten::val actuator_actadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actadr)); + } + emscripten::val actuator_actnum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actnum)); + } + emscripten::val actuator_group() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_group)); + } + emscripten::val actuator_history() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_history)); + } + emscripten::val actuator_historyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_historyadr)); + } + emscripten::val actuator_delay() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_delay)); + } + emscripten::val actuator_ctrllimited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_ctrllimited)); + } + emscripten::val actuator_forcelimited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_forcelimited)); + } + emscripten::val actuator_actlimited() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actlimited)); + } + emscripten::val actuator_dynprm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNDYN, ptr_->actuator_dynprm)); + } + emscripten::val actuator_gainprm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNGAIN, ptr_->actuator_gainprm)); + } + emscripten::val actuator_biasprm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * mjNBIAS, ptr_->actuator_biasprm)); + } + emscripten::val actuator_actearly() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_actearly)); + } + emscripten::val actuator_ctrlrange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_ctrlrange)); + } + emscripten::val actuator_forcerange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_forcerange)); + } + emscripten::val actuator_actrange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_actrange)); + } + emscripten::val actuator_gear() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 6, ptr_->actuator_gear)); + } + emscripten::val actuator_cranklength() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_cranklength)); + } + emscripten::val actuator_acc0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_acc0)); + } + emscripten::val actuator_length0() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_length0)); + } + emscripten::val actuator_lengthrange() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * 2, ptr_->actuator_lengthrange)); + } + emscripten::val actuator_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu * ptr_->nuser_actuator, ptr_->actuator_user)); + } + emscripten::val actuator_plugin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->actuator_plugin)); + } + emscripten::val sensor_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_type)); + } + emscripten::val sensor_datatype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_datatype)); + } + emscripten::val sensor_needstage() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_needstage)); + } + emscripten::val sensor_objtype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_objtype)); + } + emscripten::val sensor_objid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_objid)); + } + emscripten::val sensor_reftype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_reftype)); + } + emscripten::val sensor_refid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_refid)); + } + emscripten::val sensor_intprm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * mjNSENS, ptr_->sensor_intprm)); + } + emscripten::val sensor_dim() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_dim)); + } + emscripten::val sensor_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_adr)); + } + emscripten::val sensor_cutoff() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_cutoff)); + } + emscripten::val sensor_noise() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_noise)); + } + emscripten::val sensor_history() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * 2, ptr_->sensor_history)); + } + emscripten::val sensor_historyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_historyadr)); + } + emscripten::val sensor_delay() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_delay)); + } + emscripten::val sensor_interval() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * 2, ptr_->sensor_interval)); + } + emscripten::val sensor_user() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor * ptr_->nuser_sensor, ptr_->sensor_user)); + } + emscripten::val sensor_plugin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->sensor_plugin)); + } + emscripten::val plugin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin)); + } + emscripten::val plugin_stateadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_stateadr)); + } + emscripten::val plugin_statenum() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_statenum)); + } + emscripten::val plugin_attr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npluginattr, ptr_->plugin_attr)); + } + emscripten::val plugin_attradr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->plugin_attradr)); + } + emscripten::val numeric_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->numeric_adr)); + } + emscripten::val numeric_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->numeric_size)); + } + emscripten::val numeric_data() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnumericdata, ptr_->numeric_data)); + } + emscripten::val text_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->text_adr)); + } + emscripten::val text_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->text_size)); + } + emscripten::val text_data() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntextdata, ptr_->text_data)); + } + emscripten::val tuple_adr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->tuple_adr)); + } + emscripten::val tuple_size() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->tuple_size)); + } + emscripten::val tuple_objtype() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objtype)); + } + emscripten::val tuple_objid() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objid)); + } + emscripten::val tuple_objprm() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntupledata, ptr_->tuple_objprm)); + } + emscripten::val key_time() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey, ptr_->key_time)); + } + emscripten::val key_qpos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nq, ptr_->key_qpos)); + } + emscripten::val key_qvel() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nv, ptr_->key_qvel)); + } + emscripten::val key_act() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->na, ptr_->key_act)); + } + emscripten::val key_mpos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nmocap*3, ptr_->key_mpos)); + } + emscripten::val key_mquat() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nmocap*4, ptr_->key_mquat)); + } + emscripten::val key_ctrl() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey * ptr_->nu, ptr_->key_ctrl)); + } + emscripten::val name_bodyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->name_bodyadr)); + } + emscripten::val name_jntadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->njnt, ptr_->name_jntadr)); + } + emscripten::val name_geomadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom, ptr_->name_geomadr)); + } + emscripten::val name_siteadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsite, ptr_->name_siteadr)); + } + emscripten::val name_camadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ncam, ptr_->name_camadr)); + } + emscripten::val name_lightadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nlight, ptr_->name_lightadr)); + } + emscripten::val name_flexadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->name_flexadr)); + } + emscripten::val name_meshadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmesh, ptr_->name_meshadr)); + } + emscripten::val name_skinadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nskin, ptr_->name_skinadr)); + } + emscripten::val name_hfieldadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nhfield, ptr_->name_hfieldadr)); + } + emscripten::val name_texadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntex, ptr_->name_texadr)); + } + emscripten::val name_matadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nmat, ptr_->name_matadr)); + } + emscripten::val name_pairadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npair, ptr_->name_pairadr)); + } + emscripten::val name_excludeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nexclude, ptr_->name_excludeadr)); + } + emscripten::val name_eqadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->neq, ptr_->name_eqadr)); + } + emscripten::val name_tendonadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntendon, ptr_->name_tendonadr)); + } + emscripten::val name_actuatoradr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nu, ptr_->name_actuatoradr)); + } + emscripten::val name_sensoradr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nsensor, ptr_->name_sensoradr)); + } + emscripten::val name_numericadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnumeric, ptr_->name_numericadr)); + } + emscripten::val name_textadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntext, ptr_->name_textadr)); + } + emscripten::val name_tupleadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->ntuple, ptr_->name_tupleadr)); + } + emscripten::val name_keyadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nkey, ptr_->name_keyadr)); + } + emscripten::val name_pluginadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nplugin, ptr_->name_pluginadr)); + } + emscripten::val names() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnames, ptr_->names)); + } + emscripten::val names_map() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nnames_map, ptr_->names_map)); + } + emscripten::val paths() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->npaths, ptr_->paths)); + } + emscripten::val B_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->B_rownnz)); + } + emscripten::val B_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nbody, ptr_->B_rowadr)); + } + emscripten::val B_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nB, ptr_->B_colind)); + } + emscripten::val M_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->M_rownnz)); + } + emscripten::val M_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->M_rowadr)); + } + emscripten::val M_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->M_colind)); + } + emscripten::val mapM2M() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->mapM2M)); + } + emscripten::val D_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_rownnz)); + } + emscripten::val D_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_rowadr)); + } + emscripten::val D_diag() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nv, ptr_->D_diag)); + } + emscripten::val D_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nD, ptr_->D_colind)); + } + emscripten::val mapM2D() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nD, ptr_->mapM2D)); + } + emscripten::val mapD2M() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nC, ptr_->mapD2M)); + } + uint64_t signature() const { + return ptr_->signature; + } + void set_signature(uint64_t value) { + ptr_->signature = value; + } + // Generates functions to return accessor classes. + #define X_ACCESSOR(NAME, Name, OBJTYPE, accessor_name, nfield) \ + MjModel##Name##Accessor accessor_name(const NumberOrString& val) const { \ + if (val.isString()) { \ + int id = mj_name2id(ptr_, OBJTYPE, val.as().c_str()); \ + if (id == -1) { \ + mju_error("%s", KeyErrorMessage(ptr_, OBJTYPE, ptr_->nfield, val.as(), #accessor_name).c_str()); \ + } \ + return MjModel##Name##Accessor(ptr_, id); \ + } else if (val.isNumber()) { \ + int id = val.as(); \ + if (id < 0 || id >= ptr_->nfield) { \ + mju_error("%s", IndexErrorMessage(id, ptr_->nfield, #accessor_name).c_str()); \ + } \ + return MjModel##Name##Accessor(ptr_, id); \ + } else { \ + mju_error(#accessor_name "() argument must be a string or number"); \ + return MjModel##Name##Accessor(nullptr, 0); \ + } \ + } + + MJMODEL_ACCESSORS + #undef X_ACCESSOR + + private: + mjModel* ptr_; + + public: + MjOption opt; + MjVisual vis; + MjStatistic stat; +}; + +struct MjSpec { + ~MjSpec(); + MjSpec(); + explicit MjSpec(mjSpec *ptr); + MjSpec(const MjSpec &); + MjSpec &operator=(const MjSpec &); + std::unique_ptr copy(); + mjSpec* get() const; + void set(mjSpec* ptr); + emscripten::val timer() const; + mjString modelname() const { + return (ptr_ && ptr_->modelname) ? *(ptr_->modelname) : ""; + } + void set_modelname(const mjString& value) { + if (ptr_ && ptr_->modelname) { + *(ptr_->modelname) = value; + } + } + mjtByte strippath() const { + return ptr_->strippath; + } + void set_strippath(mjtByte value) { + ptr_->strippath = value; + } + int memory() const { + return static_cast(ptr_->memory); + } + void set_memory(int value) { + ptr_->memory = static_cast(value); + } + int nemax() const { + return ptr_->nemax; + } + void set_nemax(int value) { + ptr_->nemax = value; + } + int nuserdata() const { + return ptr_->nuserdata; + } + void set_nuserdata(int value) { + ptr_->nuserdata = value; + } + int nuser_body() const { + return ptr_->nuser_body; + } + void set_nuser_body(int value) { + ptr_->nuser_body = value; + } + int nuser_jnt() const { + return ptr_->nuser_jnt; + } + void set_nuser_jnt(int value) { + ptr_->nuser_jnt = value; + } + int nuser_geom() const { + return ptr_->nuser_geom; + } + void set_nuser_geom(int value) { + ptr_->nuser_geom = value; + } + int nuser_site() const { + return ptr_->nuser_site; + } + void set_nuser_site(int value) { + ptr_->nuser_site = value; + } + int nuser_cam() const { + return ptr_->nuser_cam; + } + void set_nuser_cam(int value) { + ptr_->nuser_cam = value; + } + int nuser_tendon() const { + return ptr_->nuser_tendon; + } + void set_nuser_tendon(int value) { + ptr_->nuser_tendon = value; + } + int nuser_actuator() const { + return ptr_->nuser_actuator; + } + void set_nuser_actuator(int value) { + ptr_->nuser_actuator = value; + } + int nuser_sensor() const { + return ptr_->nuser_sensor; + } + void set_nuser_sensor(int value) { + ptr_->nuser_sensor = value; + } + int nkey() const { + return ptr_->nkey; + } + void set_nkey(int value) { + ptr_->nkey = value; + } + int njmax() const { + return ptr_->njmax; + } + void set_njmax(int value) { + ptr_->njmax = value; + } + int nconmax() const { + return ptr_->nconmax; + } + void set_nconmax(int value) { + ptr_->nconmax = value; + } + int nstack() const { + return static_cast(ptr_->nstack); + } + void set_nstack(int value) { + ptr_->nstack = static_cast(value); + } + mjString comment() const { + return (ptr_ && ptr_->comment) ? *(ptr_->comment) : ""; + } + void set_comment(const mjString& value) { + if (ptr_ && ptr_->comment) { + *(ptr_->comment) = value; + } + } + mjString modelfiledir() const { + return (ptr_ && ptr_->modelfiledir) ? *(ptr_->modelfiledir) : ""; + } + void set_modelfiledir(const mjString& value) { + if (ptr_ && ptr_->modelfiledir) { + *(ptr_->modelfiledir) = value; + } + } + mjtByte hasImplicitPluginElem() const { + return ptr_->hasImplicitPluginElem; + } + void set_hasImplicitPluginElem(mjtByte value) { + ptr_->hasImplicitPluginElem = value; + } + + private: + mjSpec* ptr_; + bool owned_ = false; + + public: + MjsElement element; + MjsCompiler compiler; + MjOption option; + MjVisual visual; + MjStatistic stat; + MjsAuthored authored; +}; + +struct MjsActuator { + explicit MjsActuator(mjsActuator *ptr); + mjsActuator* get() const; + void set(mjsActuator* ptr); + mjtGain gaintype() const { + return ptr_->gaintype; + } + void set_gaintype(mjtGain value) { + ptr_->gaintype = value; + } + emscripten::val gainprm() const { + return emscripten::val(emscripten::typed_memory_view(10, ptr_->gainprm)); + } + mjtBias biastype() const { + return ptr_->biastype; + } + void set_biastype(mjtBias value) { + ptr_->biastype = value; + } + emscripten::val biasprm() const { + return emscripten::val(emscripten::typed_memory_view(10, ptr_->biasprm)); + } + mjtDyn dyntype() const { + return ptr_->dyntype; + } + void set_dyntype(mjtDyn value) { + ptr_->dyntype = value; + } + emscripten::val dynprm() const { + return emscripten::val(emscripten::typed_memory_view(10, ptr_->dynprm)); + } + int actdim() const { + return ptr_->actdim; + } + void set_actdim(int value) { + ptr_->actdim = value; + } + mjtByte actearly() const { + return ptr_->actearly; + } + void set_actearly(mjtByte value) { + ptr_->actearly = value; + } + mjtTrn trntype() const { + return ptr_->trntype; + } + void set_trntype(mjtTrn value) { + ptr_->trntype = value; + } + emscripten::val gear() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->gear)); + } + mjString target() const { + return (ptr_ && ptr_->target) ? *(ptr_->target) : ""; + } + void set_target(const mjString& value) { + if (ptr_ && ptr_->target) { + *(ptr_->target) = value; + } + } + mjString refsite() const { + return (ptr_ && ptr_->refsite) ? *(ptr_->refsite) : ""; + } + void set_refsite(const mjString& value) { + if (ptr_ && ptr_->refsite) { + *(ptr_->refsite) = value; + } + } + mjString slidersite() const { + return (ptr_ && ptr_->slidersite) ? *(ptr_->slidersite) : ""; + } + void set_slidersite(const mjString& value) { + if (ptr_ && ptr_->slidersite) { + *(ptr_->slidersite) = value; + } + } + double cranklength() const { + return ptr_->cranklength; + } + void set_cranklength(double value) { + ptr_->cranklength = value; + } + emscripten::val lengthrange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->lengthrange)); + } + double inheritrange() const { + return ptr_->inheritrange; + } + void set_inheritrange(double value) { + ptr_->inheritrange = value; + } + emscripten::val damping() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->damping)); + } + double armature() const { + return ptr_->armature; + } + void set_armature(double value) { + ptr_->armature = value; + } + int ctrllimited() const { + return ptr_->ctrllimited; + } + void set_ctrllimited(int value) { + ptr_->ctrllimited = value; + } + emscripten::val ctrlrange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->ctrlrange)); + } + int forcelimited() const { + return ptr_->forcelimited; + } + void set_forcelimited(int value) { + ptr_->forcelimited = value; + } + emscripten::val forcerange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->forcerange)); + } + int actlimited() const { + return ptr_->actlimited; + } + void set_actlimited(int value) { + ptr_->actlimited = value; + } + emscripten::val actrange() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->actrange)); + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + int nsample() const { + return ptr_->nsample; + } + void set_nsample(int value) { + ptr_->nsample = value; + } + int interp() const { + return ptr_->interp; + } + void set_interp(int value) { + ptr_->interp = value; + } + double delay() const { + return ptr_->delay; + } + void set_delay(double value) { + ptr_->delay = value; + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsActuator* ptr_; + + public: + MjsElement element; + MjsPlugin plugin; +}; + +struct MjsBody { + explicit MjsBody(mjsBody *ptr); + mjsBody* get() const; + void set(mjsBody* ptr); + mjString childclass() const { + return (ptr_ && ptr_->childclass) ? *(ptr_->childclass) : ""; + } + void set_childclass(const mjString& value) { + if (ptr_ && ptr_->childclass) { + *(ptr_->childclass) = value; + } + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val quat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); + } + double mass() const { + return ptr_->mass; + } + void set_mass(double value) { + ptr_->mass = value; + } + emscripten::val ipos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->ipos)); + } + emscripten::val iquat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->iquat)); + } + emscripten::val inertia() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->inertia)); + } + emscripten::val fullinertia() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->fullinertia)); + } + mjtByte mocap() const { + return ptr_->mocap; + } + void set_mocap(mjtByte value) { + ptr_->mocap = value; + } + double gravcomp() const { + return ptr_->gravcomp; + } + void set_gravcomp(double value) { + ptr_->gravcomp = value; + } + mjtSleepPolicy sleep() const { + return ptr_->sleep; + } + void set_sleep(mjtSleepPolicy value) { + ptr_->sleep = value; + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjtByte explicitinertial() const { + return ptr_->explicitinertial; + } + void set_explicitinertial(mjtByte value) { + ptr_->explicitinertial = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsBody* ptr_; + + public: + MjsElement element; + MjsOrientation alt; + MjsOrientation ialt; + MjsPlugin plugin; +}; + +struct MjsGeom { + explicit MjsGeom(mjsGeom *ptr); + mjsGeom* get() const; + void set(mjsGeom* ptr); + mjtGeom type() const { + return ptr_->type; + } + void set_type(mjtGeom value) { + ptr_->type = value; + } + emscripten::val pos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->pos)); + } + emscripten::val quat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->quat)); + } + emscripten::val fromto() const { + return emscripten::val(emscripten::typed_memory_view(6, ptr_->fromto)); + } + emscripten::val size() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->size)); + } + int contype() const { + return ptr_->contype; + } + void set_contype(int value) { + ptr_->contype = value; + } + int conaffinity() const { + return ptr_->conaffinity; + } + void set_conaffinity(int value) { + ptr_->conaffinity = value; + } + int condim() const { + return ptr_->condim; + } + void set_condim(int value) { + ptr_->condim = value; + } + int priority() const { + return ptr_->priority; + } + void set_priority(int value) { + ptr_->priority = value; + } + emscripten::val friction() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->friction)); + } + double solmix() const { + return ptr_->solmix; + } + void set_solmix(double value) { + ptr_->solmix = value; + } + emscripten::val solref() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solref)); + } + emscripten::val solimp() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->solimp)); + } + double margin() const { + return ptr_->margin; + } + void set_margin(double value) { + ptr_->margin = value; + } + double gap() const { + return ptr_->gap; + } + void set_gap(double value) { + ptr_->gap = value; + } + double mass() const { + return ptr_->mass; + } + void set_mass(double value) { + ptr_->mass = value; + } + double density() const { + return ptr_->density; + } + void set_density(double value) { + ptr_->density = value; + } + mjtGeomInertia typeinertia() const { + return ptr_->typeinertia; + } + void set_typeinertia(mjtGeomInertia value) { + ptr_->typeinertia = value; + } + mjtNum fluid_ellipsoid() const { + return ptr_->fluid_ellipsoid; + } + void set_fluid_ellipsoid(mjtNum value) { + ptr_->fluid_ellipsoid = value; + } + emscripten::val fluid_coefs() const { + return emscripten::val(emscripten::typed_memory_view(5, ptr_->fluid_coefs)); + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + emscripten::val rgba() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rgba)); + } + int group() const { + return ptr_->group; + } + void set_group(int value) { + ptr_->group = value; + } + mjString hfieldname() const { + return (ptr_ && ptr_->hfieldname) ? *(ptr_->hfieldname) : ""; + } + void set_hfieldname(const mjString& value) { + if (ptr_ && ptr_->hfieldname) { + *(ptr_->hfieldname) = value; + } + } + mjString meshname() const { + return (ptr_ && ptr_->meshname) ? *(ptr_->meshname) : ""; + } + void set_meshname(const mjString& value) { + if (ptr_ && ptr_->meshname) { + *(ptr_->meshname) = value; + } + } + double fitscale() const { + return ptr_->fitscale; + } + void set_fitscale(double value) { + ptr_->fitscale = value; + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsGeom* ptr_; + + public: + MjsElement element; + MjsOrientation alt; + MjsPlugin plugin; +}; + +struct MjsMesh { + explicit MjsMesh(mjsMesh *ptr); + mjsMesh* get() const; + void set(mjsMesh* ptr); + mjString content_type() const { + return (ptr_ && ptr_->content_type) ? *(ptr_->content_type) : ""; + } + void set_content_type(const mjString& value) { + if (ptr_ && ptr_->content_type) { + *(ptr_->content_type) = value; + } + } + mjString file() const { + return (ptr_ && ptr_->file) ? *(ptr_->file) : ""; + } + void set_file(const mjString& value) { + if (ptr_ && ptr_->file) { + *(ptr_->file) = value; + } + } + emscripten::val refpos() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->refpos)); + } + emscripten::val refquat() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->refquat)); + } + emscripten::val scale() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->scale)); + } + mjtMeshInertia inertia() const { + return ptr_->inertia; + } + void set_inertia(mjtMeshInertia value) { + ptr_->inertia = value; + } + mjtByte smoothnormal() const { + return ptr_->smoothnormal; + } + void set_smoothnormal(mjtByte value) { + ptr_->smoothnormal = value; + } + mjtByte needsdf() const { + return ptr_->needsdf; + } + void set_needsdf(mjtByte value) { + ptr_->needsdf = value; + } + int maxhullvert() const { + return ptr_->maxhullvert; + } + void set_maxhullvert(int value) { + ptr_->maxhullvert = value; + } + mjFloatVec &uservert() const { + return *(ptr_->uservert); + } + mjFloatVec &usernormal() const { + return *(ptr_->usernormal); + } + mjFloatVec &usertexcoord() const { + return *(ptr_->usertexcoord); + } + mjIntVec &userface() const { + return *(ptr_->userface); + } + mjIntVec &userfacenormal() const { + return *(ptr_->userfacenormal); + } + mjIntVec &userfacetexcoord() const { + return *(ptr_->userfacetexcoord); + } + mjString material() const { + return (ptr_ && ptr_->material) ? *(ptr_->material) : ""; + } + void set_material(const mjString& value) { + if (ptr_ && ptr_->material) { + *(ptr_->material) = value; + } + } + int octree_maxdepth() const { + return ptr_->octree_maxdepth; + } + void set_octree_maxdepth(int value) { + ptr_->octree_maxdepth = value; + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsMesh* ptr_; + + public: + MjsElement element; + MjsPlugin plugin; +}; + +struct MjsSensor { + explicit MjsSensor(mjsSensor *ptr); + mjsSensor* get() const; + void set(mjsSensor* ptr); + mjtSensor type() const { + return ptr_->type; + } + void set_type(mjtSensor value) { + ptr_->type = value; + } + mjtObj objtype() const { + return ptr_->objtype; + } + void set_objtype(mjtObj value) { + ptr_->objtype = value; + } + mjString objname() const { + return (ptr_ && ptr_->objname) ? *(ptr_->objname) : ""; + } + void set_objname(const mjString& value) { + if (ptr_ && ptr_->objname) { + *(ptr_->objname) = value; + } + } + mjtObj reftype() const { + return ptr_->reftype; + } + void set_reftype(mjtObj value) { + ptr_->reftype = value; + } + mjString refname() const { + return (ptr_ && ptr_->refname) ? *(ptr_->refname) : ""; + } + void set_refname(const mjString& value) { + if (ptr_ && ptr_->refname) { + *(ptr_->refname) = value; + } + } + emscripten::val intprm() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->intprm)); + } + mjtDataType datatype() const { + return ptr_->datatype; + } + void set_datatype(mjtDataType value) { + ptr_->datatype = value; + } + mjtStage needstage() const { + return ptr_->needstage; + } + void set_needstage(mjtStage value) { + ptr_->needstage = value; + } + int dim() const { + return ptr_->dim; + } + void set_dim(int value) { + ptr_->dim = value; + } + double cutoff() const { + return ptr_->cutoff; + } + void set_cutoff(double value) { + ptr_->cutoff = value; + } + double noise() const { + return ptr_->noise; + } + void set_noise(double value) { + ptr_->noise = value; + } + int nsample() const { + return ptr_->nsample; + } + void set_nsample(int value) { + ptr_->nsample = value; + } + int interp() const { + return ptr_->interp; + } + void set_interp(int value) { + ptr_->interp = value; + } + double delay() const { + return ptr_->delay; + } + void set_delay(double value) { + ptr_->delay = value; + } + emscripten::val interval() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->interval)); + } + mjDoubleVec &userdata() const { + return *(ptr_->userdata); + } + mjString info() const { + return (ptr_ && ptr_->info) ? *(ptr_->info) : ""; + } + void set_info(const mjString& value) { + if (ptr_ && ptr_->info) { + *(ptr_->info) = value; + } + } + + private: + mjsSensor* ptr_; + + public: + MjsElement element; + MjsPlugin plugin; +}; + +struct MjData { + ~MjData(); + MjData(MjModel *m); + explicit MjData(const MjModel &, const MjData &); + std::vector contact() const; + std::unique_ptr copy(); + mjData* get() const; + void set(mjData* ptr); + int narena() const { + return static_cast(ptr_->narena); + } + void set_narena(int value) { + ptr_->narena = static_cast(value); + } + int nbuffer() const { + return static_cast(ptr_->nbuffer); + } + void set_nbuffer(int value) { + ptr_->nbuffer = static_cast(value); + } + int nplugin() const { + return ptr_->nplugin; + } + void set_nplugin(int value) { + ptr_->nplugin = value; + } + size_t pstack() const { + return ptr_->pstack; + } + void set_pstack(size_t value) { + ptr_->pstack = value; + } + size_t pbase() const { + return ptr_->pbase; + } + void set_pbase(size_t value) { + ptr_->pbase = value; + } + size_t parena() const { + return ptr_->parena; + } + void set_parena(size_t value) { + ptr_->parena = value; + } + uintptr_t threadpool() const { + return ptr_->threadpool; + } + void set_threadpool(uintptr_t value) { + ptr_->threadpool = value; + } + mjtBool threadlock() const { + return ptr_->threadlock; + } + void set_threadlock(mjtBool value) { + ptr_->threadlock = value; + } + int maxuse_stack() const { + return static_cast(ptr_->maxuse_stack); + } + void set_maxuse_stack(int value) { + ptr_->maxuse_stack = static_cast(value); + } + int maxuse_arena() const { + return static_cast(ptr_->maxuse_arena); + } + void set_maxuse_arena(int value) { + ptr_->maxuse_arena = static_cast(value); + } + int maxuse_con() const { + return ptr_->maxuse_con; + } + void set_maxuse_con(int value) { + ptr_->maxuse_con = value; + } + int maxuse_efc() const { + return ptr_->maxuse_efc; + } + void set_maxuse_efc(int value) { + ptr_->maxuse_efc = value; + } + emscripten::val solver_niter() const { + return emscripten::val(emscripten::typed_memory_view(20, ptr_->solver_niter)); + } + emscripten::val solver_nnz() const { + return emscripten::val(emscripten::typed_memory_view(20, ptr_->solver_nnz)); + } + emscripten::val solver_fwdinv() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->solver_fwdinv)); + } + int ncon() const { + return ptr_->ncon; + } + void set_ncon(int value) { + ptr_->ncon = value; + } + int ne() const { + return ptr_->ne; + } + void set_ne(int value) { + ptr_->ne = value; + } + int nf() const { + return ptr_->nf; + } + void set_nf(int value) { + ptr_->nf = value; + } + int nl() const { + return ptr_->nl; + } + void set_nl(int value) { + ptr_->nl = value; + } + int nefc() const { + return ptr_->nefc; + } + void set_nefc(int value) { + ptr_->nefc = value; + } + int nJ() const { + return ptr_->nJ; + } + void set_nJ(int value) { + ptr_->nJ = value; + } + int nY() const { + return ptr_->nY; + } + void set_nY(int value) { + ptr_->nY = value; + } + int nA() const { + return ptr_->nA; + } + void set_nA(int value) { + ptr_->nA = value; + } + int nisland() const { + return ptr_->nisland; + } + void set_nisland(int value) { + ptr_->nisland = value; + } + int nidof() const { + return ptr_->nidof; + } + void set_nidof(int value) { + ptr_->nidof = value; + } + int ntree_awake() const { + return ptr_->ntree_awake; + } + void set_ntree_awake(int value) { + ptr_->ntree_awake = value; + } + int nbody_awake() const { + return ptr_->nbody_awake; + } + void set_nbody_awake(int value) { + ptr_->nbody_awake = value; + } + int nparent_awake() const { + return ptr_->nparent_awake; + } + void set_nparent_awake(int value) { + ptr_->nparent_awake = value; + } + int nv_awake() const { + return ptr_->nv_awake; + } + void set_nv_awake(int value) { + ptr_->nv_awake = value; + } + mjtBool flg_energypos() const { + return ptr_->flg_energypos; + } + void set_flg_energypos(mjtBool value) { + ptr_->flg_energypos = value; + } + mjtBool flg_energyvel() const { + return ptr_->flg_energyvel; + } + void set_flg_energyvel(mjtBool value) { + ptr_->flg_energyvel = value; + } + mjtBool flg_subtreevel() const { + return ptr_->flg_subtreevel; + } + void set_flg_subtreevel(mjtBool value) { + ptr_->flg_subtreevel = value; + } + mjtBool flg_rnepost() const { + return ptr_->flg_rnepost; + } + void set_flg_rnepost(mjtBool value) { + ptr_->flg_rnepost = value; + } + mjtNum time() const { + return ptr_->time; + } + void set_time(mjtNum value) { + ptr_->time = value; + } + emscripten::val energy() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->energy)); + } + emscripten::val buffer() const { + return emscripten::val(emscripten::typed_memory_view(model->nbuffer, static_cast(ptr_->buffer))); + } + emscripten::val arena() const { + return emscripten::val(emscripten::typed_memory_view(model->narena, static_cast(ptr_->arena))); + } + emscripten::val qpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nq, ptr_->qpos)); + } + emscripten::val qvel() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qvel)); + } + emscripten::val act() const { + return emscripten::val(emscripten::typed_memory_view(model->na, ptr_->act)); + } + emscripten::val history() const { + return emscripten::val(emscripten::typed_memory_view(model->nhistory, ptr_->history)); + } + emscripten::val qacc_warmstart() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc_warmstart)); + } + emscripten::val plugin_state() const { + return emscripten::val(emscripten::typed_memory_view(model->npluginstate, ptr_->plugin_state)); + } + emscripten::val ctrl() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->ctrl)); + } + emscripten::val qfrc_applied() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_applied)); + } + emscripten::val xfrc_applied() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->xfrc_applied)); + } + emscripten::val eq_active() const { + return emscripten::val(emscripten::typed_memory_view(model->neq, ptr_->eq_active)); + } + emscripten::val mocap_pos() const { + return emscripten::val(emscripten::typed_memory_view(model->nmocap * 3, ptr_->mocap_pos)); + } + emscripten::val mocap_quat() const { + return emscripten::val(emscripten::typed_memory_view(model->nmocap * 4, ptr_->mocap_quat)); + } + emscripten::val qacc() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc)); + } + emscripten::val act_dot() const { + return emscripten::val(emscripten::typed_memory_view(model->na, ptr_->act_dot)); + } + emscripten::val userdata() const { + return emscripten::val(emscripten::typed_memory_view(model->nuserdata, ptr_->userdata)); + } + emscripten::val sensordata() const { + return emscripten::val(emscripten::typed_memory_view(model->nsensordata, ptr_->sensordata)); + } + emscripten::val tree_asleep() const { + return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_asleep)); + } + emscripten::val plugin() const { + return emscripten::val(emscripten::typed_memory_view(model->nplugin, ptr_->plugin)); + } + emscripten::val plugin_data() const { + return emscripten::val(emscripten::typed_memory_view(model->nplugin, ptr_->plugin_data)); + } + emscripten::val xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->xpos)); + } + emscripten::val xquat() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 4, ptr_->xquat)); + } + emscripten::val xmat() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 9, ptr_->xmat)); + } + emscripten::val xipos() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->xipos)); + } + emscripten::val ximat() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 9, ptr_->ximat)); + } + emscripten::val xanchor() const { + return emscripten::val(emscripten::typed_memory_view(model->njnt * 3, ptr_->xanchor)); + } + emscripten::val xaxis() const { + return emscripten::val(emscripten::typed_memory_view(model->njnt * 3, ptr_->xaxis)); + } + emscripten::val geom_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->ngeom * 3, ptr_->geom_xpos)); + } + emscripten::val geom_xmat() const { + return emscripten::val(emscripten::typed_memory_view(model->ngeom * 9, ptr_->geom_xmat)); + } + emscripten::val site_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nsite * 3, ptr_->site_xpos)); + } + emscripten::val site_xmat() const { + return emscripten::val(emscripten::typed_memory_view(model->nsite * 9, ptr_->site_xmat)); + } + emscripten::val cam_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->ncam * 3, ptr_->cam_xpos)); + } + emscripten::val cam_xmat() const { + return emscripten::val(emscripten::typed_memory_view(model->ncam * 9, ptr_->cam_xmat)); + } + emscripten::val light_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nlight * 3, ptr_->light_xpos)); + } + emscripten::val light_xdir() const { + return emscripten::val(emscripten::typed_memory_view(model->nlight * 3, ptr_->light_xdir)); + } + emscripten::val subtree_com() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_com)); + } + emscripten::val cdof() const { + return emscripten::val(emscripten::typed_memory_view(model->nv * 6, ptr_->cdof)); + } + emscripten::val cinert() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 10, ptr_->cinert)); + } + emscripten::val flexvert_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nflexvert * 3, ptr_->flexvert_xpos)); + } + emscripten::val flexelem_aabb() const { + return emscripten::val(emscripten::typed_memory_view(model->nflexelem * 6, ptr_->flexelem_aabb)); + } + emscripten::val flexedge_J() const { + return emscripten::val(emscripten::typed_memory_view(model->nJfe, ptr_->flexedge_J)); + } + emscripten::val flexedge_length() const { + return emscripten::val(emscripten::typed_memory_view(model->nflexedge, ptr_->flexedge_length)); + } + emscripten::val flexvert_J() const { + return emscripten::val(emscripten::typed_memory_view(model->nJfv * 2, ptr_->flexvert_J)); + } + emscripten::val flexvert_length() const { + return emscripten::val(emscripten::typed_memory_view(model->nflexvert * 2, ptr_->flexvert_length)); + } + emscripten::val bvh_aabb_dyn() const { + return emscripten::val(emscripten::typed_memory_view(model->nbvhdynamic * 6, ptr_->bvh_aabb_dyn)); + } + emscripten::val ten_wrapadr() const { + return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_wrapadr)); + } + emscripten::val ten_wrapnum() const { + return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_wrapnum)); + } + emscripten::val ten_J() const { + return emscripten::val(emscripten::typed_memory_view(model->nJten, ptr_->ten_J)); + } + emscripten::val ten_length() const { + return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_length)); + } + emscripten::val wrap_obj() const { + return emscripten::val(emscripten::typed_memory_view(model->nwrap * 2, ptr_->wrap_obj)); + } + emscripten::val wrap_xpos() const { + return emscripten::val(emscripten::typed_memory_view(model->nwrap * 6, ptr_->wrap_xpos)); + } + emscripten::val actuator_length() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_length)); + } + emscripten::val moment_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->moment_rownnz)); + } + emscripten::val moment_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->moment_rowadr)); + } + emscripten::val moment_colind() const { + return emscripten::val(emscripten::typed_memory_view(model->nJmom, ptr_->moment_colind)); + } + emscripten::val actuator_moment() const { + return emscripten::val(emscripten::typed_memory_view(model->nJmom, ptr_->actuator_moment)); + } + emscripten::val crb() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 10, ptr_->crb)); + } + emscripten::val qM() const { + return emscripten::val(emscripten::typed_memory_view(model->nM, ptr_->qM)); + } + emscripten::val M() const { + return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->M)); + } + emscripten::val qLD() const { + return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->qLD)); + } + emscripten::val qLDiagInv() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qLDiagInv)); + } + emscripten::val bvh_active() const { + return emscripten::val(emscripten::typed_memory_view(model->nbvh, ptr_->bvh_active)); + } + emscripten::val tree_awake() const { + return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_awake)); + } + emscripten::val body_awake() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->body_awake)); + } + emscripten::val body_awake_ind() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->body_awake_ind)); + } + emscripten::val parent_awake_ind() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody, ptr_->parent_awake_ind)); + } + emscripten::val dof_awake_ind() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->dof_awake_ind)); + } + emscripten::val flexedge_velocity() const { + return emscripten::val(emscripten::typed_memory_view(model->nflexedge, ptr_->flexedge_velocity)); + } + emscripten::val ten_velocity() const { + return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->ten_velocity)); + } + emscripten::val actuator_velocity() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_velocity)); + } + emscripten::val cvel() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cvel)); + } + emscripten::val cdof_dot() const { + return emscripten::val(emscripten::typed_memory_view(model->nv * 6, ptr_->cdof_dot)); + } + emscripten::val qfrc_bias() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_bias)); + } + emscripten::val qfrc_spring() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_spring)); + } + emscripten::val qfrc_damper() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_damper)); + } + emscripten::val qfrc_gravcomp() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_gravcomp)); + } + emscripten::val qfrc_fluid() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_fluid)); + } + emscripten::val qfrc_passive() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_passive)); + } + emscripten::val subtree_linvel() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_linvel)); + } + emscripten::val subtree_angmom() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 3, ptr_->subtree_angmom)); + } + emscripten::val qH() const { + return emscripten::val(emscripten::typed_memory_view(model->nC, ptr_->qH)); + } + emscripten::val qHDiagInv() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qHDiagInv)); + } + emscripten::val qDeriv() const { + return emscripten::val(emscripten::typed_memory_view(model->nD, ptr_->qDeriv)); + } + emscripten::val qLU() const { + return emscripten::val(emscripten::typed_memory_view(model->nD, ptr_->qLU)); + } + emscripten::val actuator_force() const { + return emscripten::val(emscripten::typed_memory_view(model->nu, ptr_->actuator_force)); + } + emscripten::val qfrc_actuator() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_actuator)); + } + emscripten::val qfrc_smooth() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_smooth)); + } + emscripten::val qacc_smooth() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qacc_smooth)); + } + emscripten::val qfrc_constraint() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_constraint)); + } + emscripten::val qfrc_inverse() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->qfrc_inverse)); + } + emscripten::val cacc() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cacc)); + } + emscripten::val cfrc_int() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cfrc_int)); + } + emscripten::val cfrc_ext() const { + return emscripten::val(emscripten::typed_memory_view(model->nbody * 6, ptr_->cfrc_ext)); + } + // contact field is handled manually in template file struct declaration + emscripten::val efc_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_type)); + } + emscripten::val efc_id() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_id)); + } + emscripten::val efc_J_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rownnz)); + } + emscripten::val efc_J_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rowadr)); + } + emscripten::val efc_J_rowsuper() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_J_rowsuper)); + } + emscripten::val efc_J_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nJ, ptr_->efc_J_colind)); + } + emscripten::val efc_J() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nJ, ptr_->efc_J)); + } + emscripten::val efc_pos() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_pos)); + } + emscripten::val efc_margin() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_margin)); + } + emscripten::val efc_frictionloss() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_frictionloss)); + } + emscripten::val efc_diagA() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_diagA)); + } + emscripten::val efc_KBIP() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc * 4, ptr_->efc_KBIP)); + } + emscripten::val efc_D() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_D)); + } + emscripten::val efc_R() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_R)); + } + emscripten::val tendon_efcadr() const { + return emscripten::val(emscripten::typed_memory_view(model->ntendon, ptr_->tendon_efcadr)); + } + emscripten::val tree_island() const { + return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->tree_island)); + } + emscripten::val island_ntree() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_ntree)); + } + emscripten::val island_itreeadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_itreeadr)); + } + emscripten::val map_itree2tree() const { + return emscripten::val(emscripten::typed_memory_view(model->ntree, ptr_->map_itree2tree)); + } + emscripten::val dof_island() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->dof_island)); + } + emscripten::val island_nv() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nv)); + } + emscripten::val island_idofadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_idofadr)); + } + emscripten::val island_dofadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_dofadr)); + } + emscripten::val map_dof2idof() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->map_dof2idof)); + } + emscripten::val map_idof2dof() const { + return emscripten::val(emscripten::typed_memory_view(model->nv, ptr_->map_idof2dof)); + } + emscripten::val ifrc_smooth() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->ifrc_smooth)); + } + emscripten::val iacc_smooth() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->iacc_smooth)); + } + emscripten::val iacc() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->iacc)); + } + emscripten::val efc_island() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_island)); + } + emscripten::val island_ne() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_ne)); + } + emscripten::val island_nf() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nf)); + } + emscripten::val island_nefc() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_nefc)); + } + emscripten::val island_iefcadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nisland, ptr_->island_iefcadr)); + } + emscripten::val map_efc2iefc() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->map_efc2iefc)); + } + emscripten::val map_iefc2efc() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->map_iefc2efc)); + } + emscripten::val iefc_type() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_type)); + } + emscripten::val iefc_id() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_id)); + } + emscripten::val iefc_frictionloss() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_frictionloss)); + } + emscripten::val iefc_D() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_D)); + } + emscripten::val iefc_R() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_R)); + } + emscripten::val efc_Y_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_Y_rownnz)); + } + emscripten::val efc_Y_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_Y_rowadr)); + } + emscripten::val efc_Y_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nY, ptr_->efc_Y_colind)); + } + emscripten::val efc_Y() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nY, ptr_->efc_Y)); + } + emscripten::val efc_AR_rownnz() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_AR_rownnz)); + } + emscripten::val efc_AR_rowadr() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_AR_rowadr)); + } + emscripten::val efc_AR_colind() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nA, ptr_->efc_AR_colind)); + } + emscripten::val efc_AR() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nA, ptr_->efc_AR)); + } + emscripten::val efc_vel() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_vel)); + } + emscripten::val efc_aref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_aref)); + } + emscripten::val efc_b() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_b)); + } + emscripten::val iefc_aref() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_aref)); + } + emscripten::val iefc_state() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_state)); + } + emscripten::val iefc_force() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->iefc_force)); + } + emscripten::val efc_state() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_state)); + } + emscripten::val efc_force() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nefc, ptr_->efc_force)); + } + emscripten::val ifrc_constraint() const { + return emscripten::val(emscripten::typed_memory_view(ptr_->nidof, ptr_->ifrc_constraint)); + } + uint64_t signature() const { + return ptr_->signature; + } + void set_signature(uint64_t value) { + ptr_->signature = value; + } + // Generates functions to return accessor classes. + #define X_ACCESSOR(NAME, Name, OBJTYPE, accessor_name, nfield) \ + MjData##Name##Accessor accessor_name(const NumberOrString& val) const { \ + if (val.isString()) { \ + int id = mj_name2id(model, OBJTYPE, val.as().c_str()); \ + if (id == -1) { \ + mju_error("%s", KeyErrorMessage(model, OBJTYPE, model->nfield, val.as(), #accessor_name).c_str()); \ + } \ + return MjData##Name##Accessor(ptr_, model, id); \ + } else if (val.isNumber()) { \ + int id = val.as(); \ + if (id < 0 || id >= model->nfield) { \ + mju_error("%s", IndexErrorMessage(id, model->nfield, #accessor_name).c_str()); \ + } \ + return MjData##Name##Accessor(ptr_, model, id); \ + } else { \ + mju_error(#accessor_name "() argument must be a string or number"); \ + return MjData##Name##Accessor(nullptr, nullptr, 0); \ + } \ + } + MJDATA_ACCESSORS + #undef X_ACCESSOR + + private: + mjData* ptr_; + + public: + std::vector solver; + std::vector warning; + std::vector timer; + mjModel *model; +}; + +struct MjsDefault { + explicit MjsDefault(mjsDefault *ptr); + mjsDefault* get() const; + void set(mjsDefault* ptr); + + private: + mjsDefault* ptr_; + + public: + MjsElement element; + MjsJoint joint; + MjsGeom geom; + MjsSite site; + MjsCamera camera; + MjsLight light; + MjsFlex flex; + MjsMesh mesh; + MjsMaterial material; + MjsPair pair; + MjsEquality equality; + MjsTendon tendon; + MjsActuator actuator; +}; + + +struct MjvScene { + MjvScene(); + MjvScene(MjModel *m, int maxgeom); + ~MjvScene(); + std::unique_ptr copy(); + int GetSumFlexFaces() const; + + mjvScene* get() const; + void set(mjvScene* ptr); + + std::vector geoms() const; + + emscripten::val geomorder() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->ngeom, ptr_->geomorder)); + } + emscripten::val flexedgeadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgeadr)); + } + emscripten::val flexedgenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgenum)); + } + emscripten::val flexvertadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertadr)); + } + emscripten::val flexvertnum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertnum)); + } + emscripten::val flexfaceadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceadr)); + } + emscripten::val flexfacenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfacenum)); + } + emscripten::val flexfaceused() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceused)); + } + emscripten::val flexedge() const { + return emscripten::val( + emscripten::typed_memory_view(2 * model->nflexedge, ptr_->flexedge)); + } + emscripten::val flexvert() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nflexvert, ptr_->flexvert)); + } + emscripten::val skinfacenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinfacenum)); + } + emscripten::val skinvertadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertadr)); + } + emscripten::val skinvertnum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertnum)); + } + emscripten::val skinvert() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinvert)); + } + emscripten::val skinnormal() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinnormal)); + } + emscripten::val flexface() const { + return emscripten::val(emscripten::typed_memory_view( + 9 * MjvScene::GetSumFlexFaces(), ptr_->flexface)); + } + emscripten::val flexnormal() const { + return emscripten::val(emscripten::typed_memory_view( + 9 * MjvScene::GetSumFlexFaces(), ptr_->flexnormal)); + } + emscripten::val flextexcoord() const { + return emscripten::val(emscripten::typed_memory_view( + 6 * MjvScene::GetSumFlexFaces(), ptr_->flextexcoord)); + } + // camera field is handled manually in template file struct declaration + // flexedge field is handled manually in template file struct declaration + // flexedgeadr field is handled manually in template file struct declaration + // flexedgenum field is handled manually in template file struct declaration + // flexface field is handled manually in template file struct declaration + // flexfaceadr field is handled manually in template file struct declaration + // flexfacenum field is handled manually in template file struct declaration + // flexfaceused field is handled manually in template file struct declaration + // flexnormal field is handled manually in template file struct declaration + // flextexcoord field is handled manually in template file struct declaration + // flexvert field is handled manually in template file struct declaration + // flexvertadr field is handled manually in template file struct declaration + // flexvertnum field is handled manually in template file struct declaration + // geomorder field is handled manually in template file struct declaration + // geoms field is handled manually in template file struct declaration + // lights field is handled manually in template file struct declaration + // skinfacenum field is handled manually in template file struct declaration + // skinnormal field is handled manually in template file struct declaration + // skinvert field is handled manually in template file struct declaration + // skinvertadr field is handled manually in template file struct declaration + // skinvertnum field is handled manually in template file struct declaration + emscripten::val flags() const { + return emscripten::val(emscripten::typed_memory_view(11, ptr_->flags)); + } + emscripten::val framergb() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->framergb)); + } + emscripten::val rotate() const { + return emscripten::val(emscripten::typed_memory_view(4, ptr_->rotate)); + } + emscripten::val translate() const { + return emscripten::val(emscripten::typed_memory_view(3, ptr_->translate)); + } + float scale() const { + return ptr_->scale; + } + void set_scale(float value) { + ptr_->scale = value; + } + int framewidth() const { + return ptr_->framewidth; + } + void set_framewidth(int value) { + ptr_->framewidth = value; + } + int maxgeom() const { + return ptr_->maxgeom; + } + void set_maxgeom(int value) { + ptr_->maxgeom = value; + } + int nflex() const { + return ptr_->nflex; + } + void set_nflex(int value) { + ptr_->nflex = value; + } + int ngeom() const { + return ptr_->ngeom; + } + void set_ngeom(int value) { + ptr_->ngeom = value; + } + int nlight() const { + return ptr_->nlight; + } + void set_nlight(int value) { + ptr_->nlight = value; + } + int nskin() const { + return ptr_->nskin; + } + void set_nskin(int value) { + ptr_->nskin = value; + } + int status() const { + return ptr_->status; + } + void set_status(int value) { + ptr_->status = value; + } + int stereo() const { + return ptr_->stereo; + } + void set_stereo(int value) { + ptr_->stereo = value; + } + mjtByte enabletransform() const { + return ptr_->enabletransform; + } + void set_enabletransform(mjtByte value) { + ptr_->enabletransform = value; + } + mjtByte flexedgeopt() const { + return ptr_->flexedgeopt; + } + void set_flexedgeopt(mjtByte value) { + ptr_->flexedgeopt = value; + } + mjtByte flexfaceopt() const { + return ptr_->flexfaceopt; + } + void set_flexfaceopt(mjtByte value) { + ptr_->flexfaceopt = value; + } + mjtByte flexskinopt() const { + return ptr_->flexskinopt; + } + void set_flexskinopt(mjtByte value) { + ptr_->flexskinopt = value; + } + mjtByte flexvertopt() const { + return ptr_->flexvertopt; + } + void set_flexvertopt(mjtByte value) { + ptr_->flexvertopt = value; + } + + private: + mjvScene* ptr_; + bool owned_ = false; + + public: + mjModel* model; + std::vector lights; + std::vector camera; +}; + +struct MjVFS { + MjVFS() : ptr_(new mjVFS) { mj_defaultVFS(ptr_); } + ~MjVFS() { mj_deleteVFS(ptr_); } + void AddBuffer(const std::string& name, const emscripten::val& buffer) { + std::vector vec = emscripten::vecFromJSArray(buffer); + int result = mj_addBufferVFS(ptr_, name.c_str(), vec.data(), vec.size()); + if (result != 0) { + mju_error("Could not add buffer to VFS: %d", result); + } + } + void DeleteFile(const std::string& filename) { + mj_deleteFileVFS(ptr_, filename.c_str()); + } + mjVFS* get() const { return ptr_; } + + private: + mjVFS* ptr_; +}; + +} // namespace mujoco::wasm +// NOLINTEND(whitespace/semicolon) +// NOLINTEND(whitespace/line_length) + +#endif // MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ diff --git a/wasm/codegen/generators/binding_builder.py b/wasm/codegen/generators/binding_builder.py index fab3035b..c4875ed7 100644 --- a/wasm/codegen/generators/binding_builder.py +++ b/wasm/codegen/generators/binding_builder.py @@ -25,13 +25,7 @@ from wasm.codegen.generators import structs class BindingBuilder: """Builds WASM bindings for MuJoCo.""" - def __init__( - self, - template_path_cc: str, - ): - with open(template_path_cc, "r") as f: - self.content_cc = f.readlines() - + def __init__(self): self.markers_and_content = [] def set_enums(self): @@ -57,17 +51,25 @@ class BindingBuilder: self.markers_and_content += functions.generate(functions_to_bind) return self - def to_string(self) -> str: - for marker, content in self.markers_and_content: - self.content_cc = common.replace_lines_containing_marker( - self.content_cc, marker, content + def build_string(self, template_path: str) -> str: + """Applies the accumulated bindings to a template file and returns the output.""" + with open(template_path, "r") as f: + content = f.readlines() + + for marker, lines in self.markers_and_content: + content = common.replace_lines_containing_marker( + content, marker, lines ) - text = "".join(self.content_cc) - return text.replace( + + text = "".join(content) + text = text.replace( "// limitations under the License.\n\n", "// limitations under the License.\n\n// DO NOT EDIT. THIS FILE IS AUTOMATICALLY GENERATED.\n\n", 1, ) + return text - def build(self, generated_path_cc: str): - common.write_to_file(generated_path_cc, self.to_string()) + def build_file(self, template_path: str, generated_path: str): + """Applies the accumulated bindings to a template file and writes the output.""" + text = self.build_string(template_path) + common.write_to_file(generated_path, text) diff --git a/wasm/codegen/templates/bindings.cc b/wasm/codegen/templates/bindings.cc index c9c61935..356f7749 100644 --- a/wasm/codegen/templates/bindings.cc +++ b/wasm/codegen/templates/bindings.cc @@ -15,6 +15,8 @@ // NOLINTBEGIN(whitespace/line_length) // NOLINTBEGIN(whitespace/semicolon) +#include "wasm/codegen/generated/bindings.h" + #include #include #include @@ -30,7 +32,7 @@ #include #include // NOLINT #include -#include // NOLINT +#include // NOLINT #include #include @@ -44,74 +46,6 @@ namespace mujoco::wasm { -using emscripten::enum_; -using emscripten::function; -using emscripten::val; -using emscripten::typed_memory_view; -using emscripten::return_value_policy::reference; -using emscripten::return_value_policy::take_ownership; - -EMSCRIPTEN_DECLARE_VAL_TYPE(NumberOrString); -EMSCRIPTEN_DECLARE_VAL_TYPE(NumberArray); -EMSCRIPTEN_DECLARE_VAL_TYPE(String); -EMSCRIPTEN_DECLARE_VAL_TYPE(StringOrNull); - -// Macro to define accessors for different MuJoCo object types within mjModel. -// Each line calls X_ACCESSOR with the following arguments: -// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). -// 2. Name: The object type name in CamelCase (e.g., Actuator). -// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). -// 4. field: The name of the array field in mjModel (e.g., actuator). -// 5. nfield: The name of the count field in mjModel (e.g., nu). -#define MJMODEL_ACCESSORS \ - X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ - X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ - X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ - X_ACCESSOR( EQUALITY, Equality, mjOBJ_EQUALITY, eq, neq ) \ - X_ACCESSOR( EXCLUDE, Exclude, mjOBJ_EXCLUDE, exclude, nexclude ) \ - X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ - X_ACCESSOR( HFIELD, Hfield, mjOBJ_HFIELD, hfield, nhfield ) \ - X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ - X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ - X_ACCESSOR( MATERIAL, Material, mjOBJ_MATERIAL, mat, nmat ) \ - X_ACCESSOR( MESH, Mesh, mjOBJ_MESH, mesh, nmesh ) \ - X_ACCESSOR( NUMERIC, Numeric, mjOBJ_NUMERIC, numeric, nnumeric ) \ - X_ACCESSOR( PAIR, Pair, mjOBJ_PAIR, pair, npair ) \ - X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ - X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ - X_ACCESSOR( SKIN, Skin, mjOBJ_SKIN, skin, nskin ) \ - X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) \ - X_ACCESSOR( TEXTURE, Texture, mjOBJ_TEXTURE, tex, ntex ) \ - X_ACCESSOR( TUPLE, Tuple, mjOBJ_TUPLE, tuple, ntuple ) \ - X_ACCESSOR( KEYFRAME, Keyframe, mjOBJ_KEY, key, nkey ) - -// Macro to define accessors for different MuJoCo object types within mjData. -// Each line calls X_ACCESSOR with the following arguments: -// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). -// 2. Name: The object type name in CamelCase (e.g., Actuator). -// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). -// 4. field: The name of the array field in mjData (e.g., actuator). -// 5. nfield: The name of the count field in mjModel (e.g., nu). -#define MJDATA_ACCESSORS \ - X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ - X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ - X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ - X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ - X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ - X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ - X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ - X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ - X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) - -// Raises an error if the given val is null or undefined. -// A macro is used so that the error contains the name of the variable. -// TODO(matijak): Remove this when we can handle strings using UNPACK_STRING? -#define CHECK_VAL(val) \ - if (val.isNull()) { \ - mju_error("Invalid argument: %s is null", #val); \ - } else if (val.isUndefined()) { \ - mju_error("Invalid argument: %s is undefined", #val); \ - } void ThrowMujocoErrorToJS(const mjLogMessage* msg) { if (msg->level == mjLOG_ERROR) { @@ -214,337 +148,8 @@ val get_mjFRAMESTRING() { return MakeValArray(mjFRAMESTRING); } val get_mjVISSTRING() { return MakeValArray3(mjVISSTRING); } val get_mjRNDSTRING() { return MakeValArray3(mjRNDSTRING); } - -// {{ ANONYMOUS_STRUCT_TYPEDEFS }} - -#undef MJ_M -#define MJ_M(n) model_->n -// The X macro expands to a member function within an MjModel...Accessor struct. -// This function returns an emscripten::val, typically a typed memory view, -// providing access to array data within the underlying mjModel. The size and -// offset of the memory view are determined by the arguments: -// - type: The C++ type of the array elements (e.g., mjtNum, int). -// - prefix: The prefix of the field name in mjModel (e.g., jnt_, geom_). -// - var: The name of the field being accessed (e.g., qposadr, size). -// - dim0: Used to determine special indexing logic for dynamically sized arrays -// like joints (nq, nv), hfields, textures, numerics, and tuples. -// - dim1: The fixed dimension of the array if not dynamically sized. If "1", -// a single element is returned. Otherwise, it's used as the stride -// for the typed memory view. -#define X(type, prefix, var, dim0, dim1) \ - emscripten::val get_##var() const { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - return val(typed_memory_view(end - start, model_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - return val(typed_memory_view(end - start, model_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ - int start = model_->hfield_adr[id_]; \ - int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ - return val(typed_memory_view(count, model_->hfield_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ - int start = model_->tex_adr[id_]; \ - int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ - return val(typed_memory_view(count, model_->tex_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ - int start = model_->numeric_adr[id_]; \ - int count = model_->numeric_size[id_]; \ - return val(typed_memory_view(count, model_->numeric_data + start)); \ - } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ - int start = model_->tuple_adr[id_]; \ - int count = model_->tuple_size[id_]; \ - return val(typed_memory_view(count, model_->prefix##var + start)); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(model_->prefix##var[id_]); \ - } else { \ - return val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)); \ - } \ - } \ - } \ - void set_##var(const emscripten::val& value) { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - val(typed_memory_view(end - start, model_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - val(typed_memory_view(end - start, model_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ - int start = model_->hfield_adr[id_]; \ - int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ - val(typed_memory_view(count, model_->hfield_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ - int start = model_->tex_adr[id_]; \ - int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ - val(typed_memory_view(count, model_->tex_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ - int start = model_->numeric_adr[id_]; \ - int count = model_->numeric_size[id_]; \ - val(typed_memory_view(count, model_->numeric_data + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ - int start = model_->tuple_adr[id_]; \ - int count = model_->tuple_size[id_]; \ - val(typed_memory_view(count, model_->prefix##var + start)) \ - .call("set", value); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - model_->prefix##var[id_] = value.as(); \ - } else { \ - val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)) \ - .call("set", value); \ - } \ - } \ - } - -// Expands to a struct definition for each object type in MJMODEL_ACCESSORS. -// Each struct, named `MjModel{Name}Accessor`, provides: -// - A constructor taking an `mjModel*` and an integer `id`. -// - An `id()` method to get the object's index. -// - A `name()` method to get the object's name using `mj_id2name`. -// - Member functions generated by the `MJMODEL_##NAME` macro, which in turn -// uses the `X` macro to define accessors for fields within `mjModel`. -#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ - struct MjModel##Name##Accessor { \ - MjModel##Name##Accessor(mjModel* model, int id) : model_(model), id_(id) {} \ - \ - int id() const { return id_; } \ - std::string name() const { \ - const char* name = mj_id2name(model_, OBJTYPE, id_); \ - return name ? name : ""; \ - } \ - \ - MJMODEL_##NAME \ - \ - private: \ - mjModel* model_; \ - int id_; \ - }; -MJMODEL_ACCESSORS -#undef X_ACCESSOR - -// Expands to a struct definition for each object type in MJDATA_ACCESSORS. -// Each struct, named `MjData{Name}Accessor`, provides: -// - A constructor taking an `mjData*`, an `mjModel*`, and an integer `id`. -// - An `id()` method to get the object's index. -// - A `name()` method to get the object's name using `mj_id2name`. -// - Member functions generated by the `MJDATA_##NAME` macro, which in turn -// uses the `X` macro to define accessors for fields within `mjData`. -#undef MJ_M -#define MJ_M(n) model_->n -#undef X -#define X(type, prefix, var, dim0, dim1) \ - emscripten::val get_##var() const { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - return val(typed_memory_view(end - start, data_->prefix##var + start)); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(typed_memory_view(end - start, data_->prefix##var + start)); \ - } else { \ - return val(typed_memory_view( \ - (end - start) * dim1, data_->prefix##var + start * dim1)); \ - } \ - } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ - int start = model_->sensor_adr[id_]; \ - int count = model_->sensor_dim[id_]; \ - return val(typed_memory_view(count, data_->sensordata + start)); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - return val(data_->prefix##var[id_]); \ - } else { \ - return val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)); \ - } \ - } \ - } \ - void set_##var(const emscripten::val& value) { \ - if constexpr (std::string_view(#dim0) == "nq") { \ - int start = model_->jnt_qposadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ - val(typed_memory_view(end - start, data_->prefix##var + start)) \ - .call("set", value); \ - } else if constexpr (std::string_view(#dim0) == "nv") { \ - int start = model_->jnt_dofadr[id_]; \ - int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ - if constexpr (std::string_view(#dim1) == "1") { \ - val(typed_memory_view(end - start, data_->prefix##var + start)) \ - .call("set", value); \ - } else { \ - val(typed_memory_view((end - start) * dim1, \ - data_->prefix##var + start * dim1)) \ - .call("set", value); \ - } \ - } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ - int start = model_->sensor_adr[id_]; \ - int count = model_->sensor_dim[id_]; \ - val(typed_memory_view(count, data_->sensordata + start)) \ - .call("set", value); \ - } else { \ - if constexpr (std::string_view(#dim1) == "1") { \ - data_->prefix##var[id_] = value.as(); \ - } else { \ - val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)) \ - .call("set", value); \ - } \ - } \ - } - -#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ - struct MjData##Name##Accessor { \ - MjData##Name##Accessor(mjData* data, mjModel* model, int id) : data_(data), model_(model), id_(id) {} \ - \ - int id() const { return id_; } \ - std::string name() const { \ - const char* name = mj_id2name(model_, OBJTYPE, id_); \ - return name ? name : ""; \ - } \ - \ - MJDATA_##NAME \ - \ - private: \ - mjData* data_; \ - mjModel* model_; \ - int id_; \ - }; -MJDATA_ACCESSORS -#undef X_ACCESSOR - -#undef X -#undef MJ_M - -// {{ STRUCTS_HEADER }} - // {{ STRUCTS_SOURCE }} -struct MjvScene { - MjvScene(); - MjvScene(MjModel *m, int maxgeom); - ~MjvScene(); - std::unique_ptr copy(); - int GetSumFlexFaces() const; - - mjvScene* get() const; - void set(mjvScene* ptr); - - std::vector geoms() const; - - emscripten::val geomorder() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->ngeom, ptr_->geomorder)); - } - emscripten::val flexedgeadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgeadr)); - } - emscripten::val flexedgenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgenum)); - } - emscripten::val flexvertadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertadr)); - } - emscripten::val flexvertnum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertnum)); - } - emscripten::val flexfaceadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceadr)); - } - emscripten::val flexfacenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfacenum)); - } - emscripten::val flexfaceused() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceused)); - } - emscripten::val flexedge() const { - return emscripten::val( - emscripten::typed_memory_view(2 * model->nflexedge, ptr_->flexedge)); - } - emscripten::val flexvert() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nflexvert, ptr_->flexvert)); - } - emscripten::val skinfacenum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinfacenum)); - } - emscripten::val skinvertadr() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertadr)); - } - emscripten::val skinvertnum() const { - return emscripten::val( - emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertnum)); - } - emscripten::val skinvert() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinvert)); - } - emscripten::val skinnormal() const { - return emscripten::val( - emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinnormal)); - } - emscripten::val flexface() const { - return emscripten::val(emscripten::typed_memory_view( - 9 * MjvScene::GetSumFlexFaces(), ptr_->flexface)); - } - emscripten::val flexnormal() const { - return emscripten::val(emscripten::typed_memory_view( - 9 * MjvScene::GetSumFlexFaces(), ptr_->flexnormal)); - } - emscripten::val flextexcoord() const { - return emscripten::val(emscripten::typed_memory_view( - 6 * MjvScene::GetSumFlexFaces(), ptr_->flextexcoord)); - } - // INSERT-GENERATED-MjvScene-DECLARATION - - private: - mjvScene* ptr_; - bool owned_ = false; - - public: - mjModel *model; - std::vector lights; - std::vector camera; -}; - -struct MjVFS { - MjVFS() : ptr_(new mjVFS) { mj_defaultVFS(ptr_); } - ~MjVFS() { - mj_deleteVFS(ptr_); - } - void AddBuffer(const std::string& name, const emscripten::val& buffer) { - std::vector vec = emscripten::vecFromJSArray(buffer); - int result = mj_addBufferVFS(ptr_, name.c_str(), vec.data(), vec.size()); - if (result != 0) { - mju_error("Could not add buffer to VFS: %d", result); - } - } - void DeleteFile(const std::string& filename) { - mj_deleteFileVFS(ptr_, filename.c_str()); - } - mjVFS* get() const { return ptr_; } - - private: - mjVFS* ptr_; -}; - MjModel::MjModel(mjModel* ptr) : ptr_(ptr), opt(&ptr->opt), vis(&ptr->vis), stat(&ptr->stat) {} @@ -801,6 +406,15 @@ std::unique_ptr parseXMLString_wrapper(const std::string &xml) { return std::unique_ptr(new MjSpec(ptr)); } +std::unique_ptr parseXMLString_wrapper_2(const std::string &xml, const MjVFS& vfs) { + char error[1000]; + mjSpec *ptr = mj_parseXMLString(xml.c_str(), vfs.get(), error, sizeof(error)); + if (!ptr) { + mju_error("Could not create Spec from XML string: %s\n", error); + } + return std::unique_ptr(new MjSpec(ptr)); +} + std::unique_ptr mj_compile_wrapper_1(const MjSpec& spec) { mjSpec* spec_ptr = spec.get(); @@ -911,7 +525,9 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) { .function("deleteFile", &MjVFS::DeleteFile); // {{ FUNCTION_BINDINGS }} - function("parseXMLString", &parseXMLString_wrapper, take_ownership()); + // parseXMLString is bound using two overloads to handle the optional MjVFS argument. + function("parseXMLString", emscripten::select_overload(const std::string&)>(&parseXMLString_wrapper), take_ownership()); + function("parseXMLString", emscripten::select_overload(const std::string&, const MjVFS&)>(&parseXMLString_wrapper_2), take_ownership()); function("error", &error_wrapper); function("mj_saveModel", &mj_saveModel_wrapper); function("mj_saveLastXML", &mj_saveLastXML_wrapper); diff --git a/wasm/codegen/templates/bindings.h b/wasm/codegen/templates/bindings.h new file mode 100644 index 00000000..92e3c771 --- /dev/null +++ b/wasm/codegen/templates/bindings.h @@ -0,0 +1,455 @@ +// Copyright 2025 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// NOLINTBEGIN(whitespace/line_length) +// NOLINTBEGIN(whitespace/semicolon) + +#ifndef MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ +#define MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include // NOLINT +#include +#include // NOLINT +#include +#include // NOLINT +#include +#include + +#include +#include +#include +#include +#include "engine/engine_util_errmem.h" +#include "wasm/unpack.h" +#include "python/mujoco/indexer_xmacro.h" + +namespace mujoco::wasm { + +using emscripten::enum_; +using emscripten::function; +using emscripten::typed_memory_view; +using emscripten::val; +using emscripten::return_value_policy::reference; +using emscripten::return_value_policy::take_ownership; + +EMSCRIPTEN_DECLARE_VAL_TYPE(NumberOrString); +EMSCRIPTEN_DECLARE_VAL_TYPE(NumberArray); +EMSCRIPTEN_DECLARE_VAL_TYPE(String); +EMSCRIPTEN_DECLARE_VAL_TYPE(StringOrNull); + +// Macro to define accessors for different MuJoCo object types within mjModel. +// Each line calls X_ACCESSOR with the following arguments: +// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). +// 2. Name: The object type name in CamelCase (e.g., Actuator). +// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). +// 4. field: The name of the array field in mjModel (e.g., actuator). +// 5. nfield: The name of the count field in mjModel (e.g., nu). +#define MJMODEL_ACCESSORS \ + X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ + X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ + X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ + X_ACCESSOR( EQUALITY, Equality, mjOBJ_EQUALITY, eq, neq ) \ + X_ACCESSOR( EXCLUDE, Exclude, mjOBJ_EXCLUDE, exclude, nexclude ) \ + X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ + X_ACCESSOR( HFIELD, Hfield, mjOBJ_HFIELD, hfield, nhfield ) \ + X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ + X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ + X_ACCESSOR( MATERIAL, Material, mjOBJ_MATERIAL, mat, nmat ) \ + X_ACCESSOR( MESH, Mesh, mjOBJ_MESH, mesh, nmesh ) \ + X_ACCESSOR( NUMERIC, Numeric, mjOBJ_NUMERIC, numeric, nnumeric ) \ + X_ACCESSOR( PAIR, Pair, mjOBJ_PAIR, pair, npair ) \ + X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ + X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ + X_ACCESSOR( SKIN, Skin, mjOBJ_SKIN, skin, nskin ) \ + X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) \ + X_ACCESSOR( TEXTURE, Texture, mjOBJ_TEXTURE, tex, ntex ) \ + X_ACCESSOR( TUPLE, Tuple, mjOBJ_TUPLE, tuple, ntuple ) \ + X_ACCESSOR( KEYFRAME, Keyframe, mjOBJ_KEY, key, nkey ) + +// Macro to define accessors for different MuJoCo object types within mjData. +// Each line calls X_ACCESSOR with the following arguments: +// 1. NAME: The object type name in uppercase (e.g., ACTUATOR). +// 2. Name: The object type name in CamelCase (e.g., Actuator). +// 3. OBJTYPE: The corresponding mjOBJ_* enum value (e.g., mjOBJ_ACTUATOR). +// 4. field: The name of the array field in mjData (e.g., actuator). +// 5. nfield: The name of the count field in mjModel (e.g., nu). +#define MJDATA_ACCESSORS \ + X_ACCESSOR( ACTUATOR, Actuator, mjOBJ_ACTUATOR, actuator, nu ) \ + X_ACCESSOR( BODY, Body, mjOBJ_BODY, body, nbody ) \ + X_ACCESSOR( CAMERA, Camera, mjOBJ_CAMERA, cam, ncam ) \ + X_ACCESSOR( GEOM, Geom, mjOBJ_GEOM, geom, ngeom ) \ + X_ACCESSOR( JOINT, Joint, mjOBJ_JOINT, jnt, njnt ) \ + X_ACCESSOR( LIGHT, Light, mjOBJ_LIGHT, light, nlight ) \ + X_ACCESSOR( SENSOR, Sensor, mjOBJ_SENSOR, sensor, nsensor ) \ + X_ACCESSOR( SITE, Site, mjOBJ_SITE, site, nsite ) \ + X_ACCESSOR( TENDON, Tendon, mjOBJ_TENDON, tendon, ntendon ) + +// Raises an error if the given val is null or undefined. +// A macro is used so that the error contains the name of the variable. +// TODO(matijak): Remove this when we can handle strings using UNPACK_STRING? +#define CHECK_VAL(val) \ + if (val.isNull()) { \ + mju_error("Invalid argument: %s is null", #val); \ + } else if (val.isUndefined()) { \ + mju_error("Invalid argument: %s is undefined", #val); \ + } + +std::string KeyErrorMessage(const mjModel* model, int objtype, int count, + std::string_view name, std::string_view accessor_name); + +std::string IndexErrorMessage(int index, int count, + std::string_view accessor_name); + +// {{ ANONYMOUS_STRUCT_TYPEDEFS }} + +#undef MJ_M +#define MJ_M(n) model_->n +// The X macro expands to a member function within an MjModel...Accessor struct. +// This function returns an emscripten::val, typically a typed memory view, +// providing access to array data within the underlying mjModel. The size and +// offset of the memory view are determined by the arguments: +// - type: The C++ type of the array elements (e.g., mjtNum, int). +// - prefix: The prefix of the field name in mjModel (e.g., jnt_, geom_). +// - var: The name of the field being accessed (e.g., qposadr, size). +// - dim0: Used to determine special indexing logic for dynamically sized arrays +// like joints (nq, nv), hfields, textures, numerics, and tuples. +// - dim1: The fixed dimension of the array if not dynamically sized. If "1", +// a single element is returned. Otherwise, it's used as the stride +// for the typed memory view. +#define X(type, prefix, var, dim0, dim1) \ + emscripten::val get_##var() const { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + return val(typed_memory_view(end - start, model_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + return val(typed_memory_view(end - start, model_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ + int start = model_->hfield_adr[id_]; \ + int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ + return val(typed_memory_view(count, model_->hfield_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ + int start = model_->tex_adr[id_]; \ + int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ + return val(typed_memory_view(count, model_->tex_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ + int start = model_->numeric_adr[id_]; \ + int count = model_->numeric_size[id_]; \ + return val(typed_memory_view(count, model_->numeric_data + start)); \ + } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ + int start = model_->tuple_adr[id_]; \ + int count = model_->tuple_size[id_]; \ + return val(typed_memory_view(count, model_->prefix##var + start)); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(model_->prefix##var[id_]); \ + } else { \ + return val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)); \ + } \ + } \ + } \ + void set_##var(const emscripten::val& value) { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + val(typed_memory_view(end - start, model_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + val(typed_memory_view(end - start, model_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nhfielddata") { \ + int start = model_->hfield_adr[id_]; \ + int count = model_->hfield_nrow[id_] * model_->hfield_ncol[id_]; \ + val(typed_memory_view(count, model_->hfield_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "ntexdata") { \ + int start = model_->tex_adr[id_]; \ + int count = model_->tex_height[id_] * model_->tex_width[id_] * model_->tex_nchannel[id_]; \ + val(typed_memory_view(count, model_->tex_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nnumericdata") { \ + int start = model_->numeric_adr[id_]; \ + int count = model_->numeric_size[id_]; \ + val(typed_memory_view(count, model_->numeric_data + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "ntupledata") { \ + int start = model_->tuple_adr[id_]; \ + int count = model_->tuple_size[id_]; \ + val(typed_memory_view(count, model_->prefix##var + start)) \ + .call("set", value); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + model_->prefix##var[id_] = value.as(); \ + } else { \ + val(typed_memory_view(dim1, model_->prefix##var + id_ * dim1)) \ + .call("set", value); \ + } \ + } \ + } + +// Expands to a struct definition for each object type in MJMODEL_ACCESSORS. +// Each struct, named `MjModel{Name}Accessor`, provides: +// - A constructor taking an `mjModel*` and an integer `id`. +// - An `id()` method to get the object's index. +// - A `name()` method to get the object's name using `mj_id2name`. +// - Member functions generated by the `MJMODEL_##NAME` macro, which in turn +// uses the `X` macro to define accessors for fields within `mjModel`. +#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ + struct MjModel##Name##Accessor { \ + MjModel##Name##Accessor(mjModel* model, int id) : model_(model), id_(id) {} \ + \ + int id() const { return id_; } \ + std::string name() const { \ + const char* name = mj_id2name(model_, OBJTYPE, id_); \ + return name ? name : ""; \ + } \ + \ + MJMODEL_##NAME \ + \ + private: \ + mjModel* model_; \ + int id_; \ + }; +MJMODEL_ACCESSORS +#undef X_ACCESSOR + +// Expands to a struct definition for each object type in MJDATA_ACCESSORS. +// Each struct, named `MjData{Name}Accessor`, provides: +// - A constructor taking an `mjData*`, an `mjModel*`, and an integer `id`. +// - An `id()` method to get the object's index. +// - A `name()` method to get the object's name using `mj_id2name`. +// - Member functions generated by the `MJDATA_##NAME` macro, which in turn +// uses the `X` macro to define accessors for fields within `mjData`. +#undef MJ_M +#define MJ_M(n) model_->n +#undef X +#define X(type, prefix, var, dim0, dim1) \ + emscripten::val get_##var() const { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + return val(typed_memory_view(end - start, data_->prefix##var + start)); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(typed_memory_view(end - start, data_->prefix##var + start)); \ + } else { \ + return val(typed_memory_view( \ + (end - start) * dim1, data_->prefix##var + start * dim1)); \ + } \ + } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ + int start = model_->sensor_adr[id_]; \ + int count = model_->sensor_dim[id_]; \ + return val(typed_memory_view(count, data_->sensordata + start)); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + return val(data_->prefix##var[id_]); \ + } else { \ + return val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)); \ + } \ + } \ + } \ + void set_##var(const emscripten::val& value) { \ + if constexpr (std::string_view(#dim0) == "nq") { \ + int start = model_->jnt_qposadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_qposadr[id_ + 1] : model_->nq; \ + val(typed_memory_view(end - start, data_->prefix##var + start)) \ + .call("set", value); \ + } else if constexpr (std::string_view(#dim0) == "nv") { \ + int start = model_->jnt_dofadr[id_]; \ + int end = (id_ < model_->njnt - 1) ? model_->jnt_dofadr[id_ + 1] : model_->nv; \ + if constexpr (std::string_view(#dim1) == "1") { \ + val(typed_memory_view(end - start, data_->prefix##var + start)) \ + .call("set", value); \ + } else { \ + val(typed_memory_view((end - start) * dim1, \ + data_->prefix##var + start * dim1)) \ + .call("set", value); \ + } \ + } else if constexpr (std::string_view(#dim0) == "nsensordata") { \ + int start = model_->sensor_adr[id_]; \ + int count = model_->sensor_dim[id_]; \ + val(typed_memory_view(count, data_->sensordata + start)) \ + .call("set", value); \ + } else { \ + if constexpr (std::string_view(#dim1) == "1") { \ + data_->prefix##var[id_] = value.as(); \ + } else { \ + val(typed_memory_view(dim1, data_->prefix##var + id_ * dim1)) \ + .call("set", value); \ + } \ + } \ + } + +#define X_ACCESSOR(NAME, Name, OBJTYPE, field, nfield) \ + struct MjData##Name##Accessor { \ + MjData##Name##Accessor(mjData* data, mjModel* model, int id) : data_(data), model_(model), id_(id) {} \ + \ + int id() const { return id_; } \ + std::string name() const { \ + const char* name = mj_id2name(model_, OBJTYPE, id_); \ + return name ? name : ""; \ + } \ + \ + MJDATA_##NAME \ + \ + private: \ + mjData* data_; \ + mjModel* model_; \ + int id_; \ + }; +MJDATA_ACCESSORS +#undef X_ACCESSOR + +#undef X +#undef MJ_M + +// {{ STRUCTS_HEADER }} + +struct MjvScene { + MjvScene(); + MjvScene(MjModel *m, int maxgeom); + ~MjvScene(); + std::unique_ptr copy(); + int GetSumFlexFaces() const; + + mjvScene* get() const; + void set(mjvScene* ptr); + + std::vector geoms() const; + + emscripten::val geomorder() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->ngeom, ptr_->geomorder)); + } + emscripten::val flexedgeadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgeadr)); + } + emscripten::val flexedgenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexedgenum)); + } + emscripten::val flexvertadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertadr)); + } + emscripten::val flexvertnum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexvertnum)); + } + emscripten::val flexfaceadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceadr)); + } + emscripten::val flexfacenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfacenum)); + } + emscripten::val flexfaceused() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nflex, ptr_->flexfaceused)); + } + emscripten::val flexedge() const { + return emscripten::val( + emscripten::typed_memory_view(2 * model->nflexedge, ptr_->flexedge)); + } + emscripten::val flexvert() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nflexvert, ptr_->flexvert)); + } + emscripten::val skinfacenum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinfacenum)); + } + emscripten::val skinvertadr() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertadr)); + } + emscripten::val skinvertnum() const { + return emscripten::val( + emscripten::typed_memory_view(ptr_->nskin, ptr_->skinvertnum)); + } + emscripten::val skinvert() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinvert)); + } + emscripten::val skinnormal() const { + return emscripten::val( + emscripten::typed_memory_view(3 * model->nskinvert, ptr_->skinnormal)); + } + emscripten::val flexface() const { + return emscripten::val(emscripten::typed_memory_view( + 9 * MjvScene::GetSumFlexFaces(), ptr_->flexface)); + } + emscripten::val flexnormal() const { + return emscripten::val(emscripten::typed_memory_view( + 9 * MjvScene::GetSumFlexFaces(), ptr_->flexnormal)); + } + emscripten::val flextexcoord() const { + return emscripten::val(emscripten::typed_memory_view( + 6 * MjvScene::GetSumFlexFaces(), ptr_->flextexcoord)); + } + // INSERT-GENERATED-MjvScene-DECLARATION + + private: + mjvScene* ptr_; + bool owned_ = false; + + public: + mjModel* model; + std::vector lights; + std::vector camera; +}; + +struct MjVFS { + MjVFS() : ptr_(new mjVFS) { mj_defaultVFS(ptr_); } + ~MjVFS() { mj_deleteVFS(ptr_); } + void AddBuffer(const std::string& name, const emscripten::val& buffer) { + std::vector vec = emscripten::vecFromJSArray(buffer); + int result = mj_addBufferVFS(ptr_, name.c_str(), vec.data(), vec.size()); + if (result != 0) { + mju_error("Could not add buffer to VFS: %d", result); + } + } + void DeleteFile(const std::string& filename) { + mj_deleteFileVFS(ptr_, filename.c_str()); + } + mjVFS* get() const { return ptr_; } + + private: + mjVFS* ptr_; +}; + +} // namespace mujoco::wasm +// NOLINTEND(whitespace/semicolon) +// NOLINTEND(whitespace/line_length) + +#endif // MUJOCO_WASM_CODEGEN_GENERATED_BINDINGS_H_ diff --git a/wasm/codegen/tests/bindings_diff_test.py b/wasm/codegen/tests/bindings_diff_test.py index 2281778a..b9f032e6 100644 --- a/wasm/codegen/tests/bindings_diff_test.py +++ b/wasm/codegen/tests/bindings_diff_test.py @@ -31,10 +31,13 @@ class BindingsDiffTest(absltest.TestCase): self.generated_src = f.read() self.template_path_cc = SCRIPT_DIR / 'templates/bindings.cc' - self.builder = binding_builder.BindingBuilder(self.template_path_cc) + self.builder = binding_builder.BindingBuilder() generator_output = ( - self.builder.set_enums().set_structs().set_functions().to_string() + self.builder.set_enums() + .set_structs() + .set_functions() + .build_string(self.template_path_cc) ) self.assertEqual( generator_output, diff --git a/wasm/codegen/update.py b/wasm/codegen/update.py index f6741a61..71d016e5 100644 --- a/wasm/codegen/update.py +++ b/wasm/codegen/update.py @@ -18,12 +18,15 @@ from wasm.codegen.generators import binding_builder if __name__ == "__main__": - template_file = "wasm/codegen/templates/bindings.cc" - generated_file = "wasm/codegen/generated/bindings.cc" + template_file_cc = "wasm/codegen/templates/bindings.cc" + generated_file_cc = "wasm/codegen/generated/bindings.cc" + template_file_h = "wasm/codegen/templates/bindings.h" + generated_file_h = "wasm/codegen/generated/bindings.h" - builder = binding_builder.BindingBuilder(template_file) + builder = binding_builder.BindingBuilder() builder.set_enums() builder.set_structs() builder.set_functions() - builder.build(generated_file) + builder.build_file(template_file_h, generated_file_h) + builder.build_file(template_file_cc, generated_file_cc)