Pass mjvOption to plugin visualize callback.
PiperOrigin-RevId: 526047180 Change-Id: Ia63f02184f5c6a7e3b588298639fa0ab4a6da649
This commit is contained in:
committed by
Copybara-Service
parent
94779a722a
commit
a2a1ac9fc2
@@ -1244,7 +1244,7 @@ struct mjpPlugin_ {
|
||||
void (*advance)(const mjModel* m, mjData* d, int instance);
|
||||
|
||||
// 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 enum mjtGridPos_ { // grid position for overlay
|
||||
@@ -2270,7 +2270,8 @@ void mjv_defaultSceneState(mjvSceneState* scnstate);
|
||||
void mjv_makeSceneState(const mjModel* m, const mjData* d,
|
||||
mjvSceneState* scnstate, int maxgeom);
|
||||
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,
|
||||
const mjvPerturb* pert, int catmask, mjvScene* scn);
|
||||
void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn);
|
||||
|
||||
@@ -87,7 +87,7 @@ struct mjpPlugin_ {
|
||||
void (*advance)(const mjModel* m, mjData* d, int instance);
|
||||
|
||||
// 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;
|
||||
|
||||
|
||||
@@ -632,7 +632,8 @@ MJAPI void mjv_makeSceneState(const mjModel* m, const mjData* d,
|
||||
MJAPI void mjv_freeSceneState(mjvSceneState* scnstate);
|
||||
|
||||
// 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.
|
||||
MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt,
|
||||
|
||||
@@ -3945,6 +3945,12 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
|
||||
inner_type=ValueType(name='mjData'),
|
||||
),
|
||||
),
|
||||
FunctionParameterDecl(
|
||||
name='opt',
|
||||
type=PointerType(
|
||||
inner_type=ValueType(name='mjvOption', is_const=True),
|
||||
),
|
||||
),
|
||||
FunctionParameterDecl(
|
||||
name='scnstate',
|
||||
type=PointerType(
|
||||
|
||||
@@ -302,11 +302,11 @@ return 0;
|
||||
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
|
||||
elasticity->Compute(m, d, instance);
|
||||
};
|
||||
plugin.visualize =
|
||||
+[](const mjModel* m, mjData* d, mjvScene* scn, int instance) {
|
||||
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
|
||||
elasticity->Visualize(m, d, scn, instance);
|
||||
};
|
||||
plugin.visualize = +[](const mjModel* m, mjData* d, const mjvOption* opt, mjvScene* scn,
|
||||
int instance) {
|
||||
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
|
||||
elasticity->Visualize(m, d, scn, instance);
|
||||
};
|
||||
|
||||
mjp_registerPlugin(&plugin);
|
||||
}
|
||||
|
||||
@@ -1798,7 +1798,7 @@ void Simulate::Sync() {
|
||||
if (fully_managed_) {
|
||||
mjv_updateScene(m_, d_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn);
|
||||
} else {
|
||||
mjv_updateSceneState(m_, d_, &scnstate_);
|
||||
mjv_updateSceneState(m_, d_, &this->opt, &scnstate_);
|
||||
mjopt_prev_ = scnstate_.model.opt;
|
||||
warn_vgeomfull_prev_ = scnstate_.data.warning[mjWARN_VGEOMFULL].number;
|
||||
}
|
||||
@@ -1956,7 +1956,7 @@ void Simulate::LoadOnRenderThread() {
|
||||
mjv_updateScene(this->mnew_, this->dnew_,
|
||||
&this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn);
|
||||
} 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
|
||||
|
||||
@@ -227,7 +227,8 @@ int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt
|
||||
|
||||
|
||||
// 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.
|
||||
#define X(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);
|
||||
}
|
||||
if (plugin->visualize) {
|
||||
plugin->visualize(m, d, &scnstate->plugincache, i);
|
||||
plugin->visualize(m, d, opt, &scnstate->plugincache, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,8 @@ MJAPI int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOptio
|
||||
mjvScene* scn);
|
||||
|
||||
// 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
|
||||
MJAPI void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action,
|
||||
|
||||
@@ -2071,7 +2071,7 @@ void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt,
|
||||
mju_error("invalid plugin slot: %d", slot);
|
||||
}
|
||||
if (plugin->visualize) {
|
||||
plugin->visualize(m, d, scn, i);
|
||||
plugin->visualize(m, d, opt, scn, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ TEST_F(MjvSceneStateTest, CanUpdateFromState) {
|
||||
mjvSceneState scnstate;
|
||||
mjv_defaultSceneState(&scnstate);
|
||||
mjv_makeSceneState(model, data, &scnstate, kMaxGeom);
|
||||
mjv_updateSceneState(model, data, &scnstate);
|
||||
mjv_updateSceneState(model, data, &opt, &scnstate);
|
||||
|
||||
mjvScene scn2;
|
||||
mjv_defaultScene(&scn2);
|
||||
|
||||
@@ -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);
|
||||
|
||||
[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)]
|
||||
public static unsafe extern void mjv_addGeoms(mjModel_* m, mjData_* d, mjvOption_* opt, mjvPerturb_* pert, int catmask, mjvScene_* scn);
|
||||
|
||||
Reference in New Issue
Block a user