Remove model and data from ccd object. Each geom gets a copy of pos and mat, which is editable without modifying mjData.

PiperOrigin-RevId: 888028695
Change-Id: Ic9bbea4bcd7c2dbe62326798eab73d14da0aaa13
This commit is contained in:
Kyle Bayes
2026-03-23 04:51:02 -07:00
committed by Copybara-Service
parent babcfd6575
commit 5c0de1f84d
3 changed files with 240 additions and 271 deletions
+39 -9
View File
@@ -37,10 +37,11 @@ extern "C" {
// internal object type for convex collision detection
struct _mjCCDObj {
const mjModel* model;
const mjData* data;
int geom;
int geom_type;
mjtNum size[4];
mjtNum pos[3];
mjtNum mat[9];
int vertindex;
int meshindex;
int flex;
@@ -48,15 +49,44 @@ struct _mjCCDObj {
int vert;
mjtNum margin;
mjtNum rotate[4];
union {
// mesh data from mjModel
struct {
int nvert;
int mesh_polynum;
const float* vert;
const int* mpolymapadr;
const int* mpolymapnum;
const int* polymap;
const int* polyvertadr;
const int* polyvertnum;
const int* polyvert;
const mjtNum* polynormal;
const int*graph;
} mesh;
// hfield prism data
struct {
mjtNum prism[6][3];
const float* hfield_data;
int hfield_nrow;
int hfield_ncol;
} hfield;
// flex data from mjModel and mjData
struct {
const int* elem;
const int* dim;
const mjtNum* aabb;
const int* elemadr;
const int* elemdataadr;
const mjtNum* vert_xpos;
const int* vertadr;
const mjtNum* xradius;
} flex;
} data;
void (*center)(mjtNum res[3], const struct _mjCCDObj* obj);
void (*support)(mjtNum res[3], struct _mjCCDObj* obj, const mjtNum dir[3]);
// for hfield
mjtNum prism[6][3];
const mjtNum* size;
const float* hfield_data;
int hfield_nrow;
int hfield_ncol;
};
typedef struct _mjCCDObj mjCCDObj;