Pass mjvOption to plugin visualize callback.

PiperOrigin-RevId: 526047180
Change-Id: Ia63f02184f5c6a7e3b588298639fa0ab4a6da649
This commit is contained in:
Yuval Tassa
2023-04-21 08:43:36 -07:00
committed by Copybara-Service
parent 94779a722a
commit a2a1ac9fc2
11 changed files with 27 additions and 17 deletions
+3 -2
View File
@@ -1244,7 +1244,7 @@ struct mjpPlugin_ {
void (*advance)(const mjModel* m, mjData* d, int instance); void (*advance)(const mjModel* m, mjData* d, int instance);
// called by mjv_updateScene (optional) // called by mjv_updateScene (optional)
void (*visualize)(const mjModel*m, mjData* d, mjvScene* scn, int instance); void (*visualize)(const mjModel*m, mjData* d, const mjvOption* opt, mjvScene* scn, int instance);
}; };
typedef struct mjpPlugin_ mjpPlugin; typedef struct mjpPlugin_ mjpPlugin;
typedef enum mjtGridPos_ { // grid position for overlay typedef enum mjtGridPos_ { // grid position for overlay
@@ -2270,7 +2270,8 @@ void mjv_defaultSceneState(mjvSceneState* scnstate);
void mjv_makeSceneState(const mjModel* m, const mjData* d, void mjv_makeSceneState(const mjModel* m, const mjData* d,
mjvSceneState* scnstate, int maxgeom); mjvSceneState* scnstate, int maxgeom);
void mjv_freeSceneState(mjvSceneState* scnstate); void mjv_freeSceneState(mjvSceneState* scnstate);
void mjv_updateSceneState(const mjModel* m, mjData* d, mjvSceneState* scnstate); void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt,
mjvSceneState* scnstate);
void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt,
const mjvPerturb* pert, int catmask, mjvScene* scn); const mjvPerturb* pert, int catmask, mjvScene* scn);
void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn); void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn);
+1 -1
View File
@@ -87,7 +87,7 @@ struct mjpPlugin_ {
void (*advance)(const mjModel* m, mjData* d, int instance); void (*advance)(const mjModel* m, mjData* d, int instance);
// called by mjv_updateScene (optional) // called by mjv_updateScene (optional)
void (*visualize)(const mjModel*m, mjData* d, mjvScene* scn, int instance); void (*visualize)(const mjModel*m, mjData* d, const mjvOption* opt, mjvScene* scn, int instance);
}; };
typedef struct mjpPlugin_ mjpPlugin; typedef struct mjpPlugin_ mjpPlugin;
+2 -1
View File
@@ -632,7 +632,8 @@ MJAPI void mjv_makeSceneState(const mjModel* m, const mjData* d,
MJAPI void mjv_freeSceneState(mjvSceneState* scnstate); MJAPI void mjv_freeSceneState(mjvSceneState* scnstate);
// Update a scene state from model and data. // Update a scene state from model and data.
MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, mjvSceneState* scnstate); MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt,
mjvSceneState* scnstate);
// Add geoms from selected categories. // Add geoms from selected categories.
MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt,
+6
View File
@@ -3945,6 +3945,12 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
inner_type=ValueType(name='mjData'), inner_type=ValueType(name='mjData'),
), ),
), ),
FunctionParameterDecl(
name='opt',
type=PointerType(
inner_type=ValueType(name='mjvOption', is_const=True),
),
),
FunctionParameterDecl( FunctionParameterDecl(
name='scnstate', name='scnstate',
type=PointerType( type=PointerType(
+5 -5
View File
@@ -302,11 +302,11 @@ return 0;
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]); auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
elasticity->Compute(m, d, instance); elasticity->Compute(m, d, instance);
}; };
plugin.visualize = plugin.visualize = +[](const mjModel* m, mjData* d, const mjvOption* opt, mjvScene* scn,
+[](const mjModel* m, mjData* d, mjvScene* scn, int instance) { int instance) {
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]); auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
elasticity->Visualize(m, d, scn, instance); elasticity->Visualize(m, d, scn, instance);
}; };
mjp_registerPlugin(&plugin); mjp_registerPlugin(&plugin);
} }
+2 -2
View File
@@ -1798,7 +1798,7 @@ void Simulate::Sync() {
if (fully_managed_) { if (fully_managed_) {
mjv_updateScene(m_, d_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); mjv_updateScene(m_, d_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn);
} else { } else {
mjv_updateSceneState(m_, d_, &scnstate_); mjv_updateSceneState(m_, d_, &this->opt, &scnstate_);
mjopt_prev_ = scnstate_.model.opt; mjopt_prev_ = scnstate_.model.opt;
warn_vgeomfull_prev_ = scnstate_.data.warning[mjWARN_VGEOMFULL].number; warn_vgeomfull_prev_ = scnstate_.data.warning[mjWARN_VGEOMFULL].number;
} }
@@ -1956,7 +1956,7 @@ void Simulate::LoadOnRenderThread() {
mjv_updateScene(this->mnew_, this->dnew_, mjv_updateScene(this->mnew_, this->dnew_,
&this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn);
} else { } else {
mjv_updateSceneState(this->mnew_, this->dnew_, &this->scnstate_); mjv_updateSceneState(this->mnew_, this->dnew_, &this->opt, &this->scnstate_);
} }
// set window title to model name // set window title to model name
+3 -2
View File
@@ -227,7 +227,8 @@ int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt
// update a scene state from model and data // update a scene state from model and data
void mjv_updateSceneState(const mjModel* m, mjData* d, mjvSceneState* scnstate) { void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt,
mjvSceneState* scnstate) {
// Check that mjModel sizes haven't changed. // Check that mjModel sizes haven't changed.
#define X(var) #define X(var)
#define XMJV(var) \ #define XMJV(var) \
@@ -250,7 +251,7 @@ void mjv_updateSceneState(const mjModel* m, mjData* d, mjvSceneState* scnstate)
mju_error("invalid plugin slot: %d", slot); mju_error("invalid plugin slot: %d", slot);
} }
if (plugin->visualize) { if (plugin->visualize) {
plugin->visualize(m, d, &scnstate->plugincache, i); plugin->visualize(m, d, opt, &scnstate->plugincache, i);
} }
} }
} }
+2 -1
View File
@@ -43,7 +43,8 @@ MJAPI int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOptio
mjvScene* scn); mjvScene* scn);
// update a scene state from model and data // update a scene state from model and data
MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, mjvSceneState* scnstate); MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt,
mjvSceneState* scnstate);
// move camera with mouse given a scene state; action is mjtMouse // move camera with mouse given a scene state; action is mjtMouse
MJAPI void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action, MJAPI void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action,
+1 -1
View File
@@ -2071,7 +2071,7 @@ void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt,
mju_error("invalid plugin slot: %d", slot); mju_error("invalid plugin slot: %d", slot);
} }
if (plugin->visualize) { if (plugin->visualize) {
plugin->visualize(m, d, scn, i); plugin->visualize(m, d, opt, scn, i);
} }
} }
} }
+1 -1
View File
@@ -67,7 +67,7 @@ TEST_F(MjvSceneStateTest, CanUpdateFromState) {
mjvSceneState scnstate; mjvSceneState scnstate;
mjv_defaultSceneState(&scnstate); mjv_defaultSceneState(&scnstate);
mjv_makeSceneState(model, data, &scnstate, kMaxGeom); mjv_makeSceneState(model, data, &scnstate, kMaxGeom);
mjv_updateSceneState(model, data, &scnstate); mjv_updateSceneState(model, data, &opt, &scnstate);
mjvScene scn2; mjvScene scn2;
mjv_defaultScene(&scn2); mjv_defaultScene(&scn2);
+1 -1
View File
@@ -3389,7 +3389,7 @@ public static unsafe extern void mjv_makeSceneState(mjModel_* m, mjData_* d, mjv
public static unsafe extern void mjv_freeSceneState(mjvSceneState_* scnstate); public static unsafe extern void mjv_freeSceneState(mjvSceneState_* scnstate);
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjv_updateSceneState(mjModel_* m, mjData_* d, mjvSceneState_* scnstate); public static unsafe extern void mjv_updateSceneState(mjModel_* m, mjData_* d, mjvOption_* opt, mjvSceneState_* scnstate);
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjv_addGeoms(mjModel_* m, mjData_* d, mjvOption_* opt, mjvPerturb_* pert, int catmask, mjvScene_* scn); public static unsafe extern void mjv_addGeoms(mjModel_* m, mjData_* d, mjvOption_* opt, mjvPerturb_* pert, int catmask, mjvScene_* scn);