// 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); mjtBool autolimits() const { return ptr_->autolimits; } void set_autolimits(mjtBool 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; } mjtBool balanceinertia() const { return ptr_->balanceinertia; } void set_balanceinertia(mjtBool value) { ptr_->balanceinertia = value; } mjtBool fitaabb() const { return ptr_->fitaabb; } void set_fitaabb(mjtBool value) { ptr_->fitaabb = value; } mjtBool degree() const { return ptr_->degree; } void set_degree(mjtBool value) { ptr_->degree = value; } emscripten::val eulerseq() const { return emscripten::val(emscripten::typed_memory_view(3, ptr_->eulerseq)); } mjtBool discardvisual() const { return ptr_->discardvisual; } void set_discardvisual(mjtBool value) { ptr_->discardvisual = value; } mjtBool usethread() const { return ptr_->usethread; } void set_usethread(mjtBool value) { ptr_->usethread = value; } mjtBool fusestatic() const { return ptr_->fusestatic; } void set_fusestatic(mjtBool value) { ptr_->fusestatic = value; } mjtInertiaFromGeom inertiafromgeom() const { return ptr_->inertiafromgeom; } void set_inertiafromgeom(mjtInertiaFromGeom value) { ptr_->inertiafromgeom = value; } emscripten::val inertiagrouprange() const { return emscripten::val(emscripten::typed_memory_view(2, ptr_->inertiagrouprange)); } mjtBool saveinertial() const { return ptr_->saveinertial; } void set_saveinertial(mjtBool value) { ptr_->saveinertial = value; } mjtBool alignfree() const { return ptr_->alignfree; } void set_alignfree(mjtBool value) { ptr_->alignfree = value; } mjtConflict conflict() const { return ptr_->conflict; } void set_conflict(mjtConflict 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)); } mjtBool active() const { return ptr_->active; } void set_active(mjtBool 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)); } mjtBool internal() const { return ptr_->internal; } void set_internal(mjtBool value) { ptr_->internal = value; } mjtBool flatskin() const { return ptr_->flatskin; } void set_flatskin(mjtBool value) { ptr_->flatskin = value; } mjtFlexSelf selfcollide() const { return ptr_->selfcollide; } void set_selfcollide(mjtFlexSelf 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; } mjtAlignFree align() const { return ptr_->align; } void set_align(mjtAlignFree 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)); } mjtLimited limited() const { return ptr_->limited; } void set_limited(mjtLimited 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)); } mjtLimited actfrclimited() const { return ptr_->actfrclimited; } void set_actfrclimited(mjtLimited 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; } mjtBool actgravcomp() const { return ptr_->actgravcomp; } void set_actgravcomp(mjtBool 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; } } mjtBool active() const { return ptr_->active; } void set_active(mjtBool 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; } } mjtBool castshadow() const { return ptr_->castshadow; } void set_castshadow(mjtBool 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); } mjtBool texuniform() const { return ptr_->texuniform; } void set_texuniform(mjtBool 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; } } mjtBool active() const { return ptr_->active; } void set_active(mjtBool 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; } mjtLimited limited() const { return ptr_->limited; } void set_limited(mjtLimited value) { ptr_->limited = value; } mjtLimited actfrclimited() const { return ptr_->actfrclimited; } void set_actfrclimited(mjtLimited 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; } mjtBuiltin builtin() const { return ptr_->builtin; } void set_builtin(mjtBuiltin value) { ptr_->builtin = value; } mjtMark mark() const { return ptr_->mark; } void set_mark(mjtMark 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)); } mjtBool hflip() const { return ptr_->hflip; } void set_hflip(mjtBool value) { ptr_->hflip = value; } mjtBool vflip() const { return ptr_->vflip; } void set_vflip(mjtBool 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; } } mjtBool strippath() const { return ptr_->strippath; } void set_strippath(mjtBool 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; } } mjtBool hasImplicitPluginElem() const { return ptr_->hasImplicitPluginElem; } void set_hasImplicitPluginElem(mjtBool 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; } mjtBool actearly() const { return ptr_->actearly; } void set_actearly(mjtBool 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; } mjtLimited ctrllimited() const { return ptr_->ctrllimited; } void set_ctrllimited(mjtLimited value) { ptr_->ctrllimited = value; } emscripten::val ctrlrange() const { return emscripten::val(emscripten::typed_memory_view(2, ptr_->ctrlrange)); } mjtLimited forcelimited() const { return ptr_->forcelimited; } void set_forcelimited(mjtLimited value) { ptr_->forcelimited = value; } emscripten::val forcerange() const { return emscripten::val(emscripten::typed_memory_view(2, ptr_->forcerange)); } mjtLimited actlimited() const { return ptr_->actlimited; } void set_actlimited(mjtLimited 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)); } mjtBool mocap() const { return ptr_->mocap; } void set_mocap(mjtBool 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; } mjtByte simple() const { return ptr_->simple; } void set_simple(mjtByte value) { ptr_->simple = value; } mjDoubleVec &userdata() const { return *(ptr_->userdata); } mjtBool explicitinertial() const { return ptr_->explicitinertial; } void set_explicitinertial(mjtBool 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; } mjtBool smoothnormal() const { return ptr_->smoothnormal; } void set_smoothnormal(mjtBool value) { ptr_->smoothnormal = value; } mjtBool needsdf() const { return ptr_->needsdf; } void set_needsdf(mjtBool 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 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_