Add built-in cone mesh type.
Also delete `prism` type since it is subsumed by cone. PiperOrigin-RevId: 790992343 Change-Id: I7a9c6f2a4377489173acd64b23086c748d2cee8e
This commit is contained in:
committed by
Copybara-Service
parent
4a91c34239
commit
a5a6379f83
+55
-52
@@ -505,62 +505,65 @@ mjsMaterial* mjs_addMaterial(mjSpec* s, const mjsDefault* defspec) {
|
||||
int mjs_makeMesh(mjsMesh* mesh, mjtMeshBuiltin builtin, double* params, int nparams) {
|
||||
mjCMesh* meshC = static_cast<mjCMesh*>(mesh->element);
|
||||
mjCModel* m = meshC->model;
|
||||
if (builtin == mjMESH_BUILTIN_WEDGE) {
|
||||
if (nparams != 5) {
|
||||
m->SetError(mjCError(0, "Wedge builtin mesh types require 5 parameters"));
|
||||
return -1;
|
||||
switch (builtin) {
|
||||
case mjMESH_BUILTIN_WEDGE: {
|
||||
if (nparams != 5) {
|
||||
m->SetError(mjCError(0, "Wedge builtin mesh types require 5 parameters"));
|
||||
return -1;
|
||||
}
|
||||
int resolution[2] = {static_cast<int>(params[0]),
|
||||
static_cast<int>(params[1])};
|
||||
double fov[2] = {params[2], params[3]};
|
||||
double gamma = params[4];
|
||||
if (fov[0] <= 0 || fov[0] > 180) {
|
||||
m->SetError(mjCError(0, "fov[0] must be a float between (0, 180] degrees"));
|
||||
return -1;
|
||||
}
|
||||
if (fov[1] <= 0 || fov[1] > 90) {
|
||||
m->SetError(mjCError(0, "`fov[1]` must be a float between (0, 90] degrees"));
|
||||
return -1;
|
||||
}
|
||||
if (resolution[0] <= 0 || resolution[1] <= 0) {
|
||||
m->SetError(mjCError(0, "Horizontal and vertical resolutions must be positive"));
|
||||
return -1;
|
||||
}
|
||||
if (gamma < 0 || gamma > 1) {
|
||||
m->SetError(mjCError(0, "`gamma` must be a nonnegative float between [0, 1]"));
|
||||
return -1;
|
||||
}
|
||||
meshC->MakeWedge(resolution, fov, gamma);
|
||||
return 0;
|
||||
}
|
||||
int resolution[2] = {static_cast<int>(params[0]),
|
||||
static_cast<int>(params[1])};
|
||||
double fov[2] = {params[2], params[3]};
|
||||
double gamma = params[4];
|
||||
if (fov[0] <= 0 || fov[0] > 180) {
|
||||
m->SetError(
|
||||
mjCError(0, "fov[0] must be a float between (0, 180] degrees"));
|
||||
return -1;
|
||||
|
||||
case mjMESH_BUILTIN_PLATE: {
|
||||
if (nparams != 2) {
|
||||
m->SetError(mjCError(0, "Plate builtin mesh type requires 2 parameters"));
|
||||
return -1;
|
||||
}
|
||||
int resolution[2] = {static_cast<int>(params[0]),
|
||||
static_cast<int>(params[1])};
|
||||
if (resolution[0] <= 0 || resolution[1] <= 0) {
|
||||
m->SetError(mjCError(0, "Horizontal and vertical resolutions must be positive"));
|
||||
return -1;
|
||||
}
|
||||
meshC->MakeRect(resolution);
|
||||
return 0;
|
||||
}
|
||||
if (fov[1] <= 0 || fov[1] > 90) {
|
||||
m->SetError(
|
||||
mjCError(0, "`fov[1]` must be a float between (0, 90] degrees"));
|
||||
return -1;
|
||||
|
||||
case mjMESH_BUILTIN_CONE: {
|
||||
if (nparams != 2) {
|
||||
m->SetError(mjCError(0, "Cone mesh type requires 2 parameters"));
|
||||
return -1;
|
||||
}
|
||||
int nedge = static_cast<int>(params[0]);
|
||||
meshC->MakeCone(nedge, params[1]);
|
||||
return 0;
|
||||
}
|
||||
if (resolution[0] <= 0 || resolution[1] <= 0) {
|
||||
m->SetError(
|
||||
mjCError(0, "Horizontal and vertical resolutions must be positive"));
|
||||
return -1;
|
||||
}
|
||||
if (gamma < 0 || gamma > 1) {
|
||||
m->SetError(
|
||||
mjCError(0, "`gamma` must be a nonnegative float between [0, 1]"));
|
||||
return -1;
|
||||
}
|
||||
meshC->MakeWedge(resolution, fov, gamma);
|
||||
return 0;
|
||||
} else if (builtin == mjMESH_BUILTIN_PLATE) {
|
||||
if (nparams != 2) {
|
||||
m->SetError(mjCError(0, "Plate builtin mesh type requires 2 parameters"));
|
||||
return -1;
|
||||
}
|
||||
int resolution[2] = {static_cast<int>(params[0]),
|
||||
static_cast<int>(params[1])};
|
||||
if (resolution[0] <= 0 || resolution[1] <= 0) {
|
||||
m->SetError(
|
||||
mjCError(0, "Horizontal and vertical resolutions must be positive"));
|
||||
return -1;
|
||||
}
|
||||
meshC->MakeRect(resolution);
|
||||
return 0;
|
||||
} else if (builtin == mjMESH_BUILTIN_PRISM) {
|
||||
if (nparams != 1) {
|
||||
m->SetError(mjCError(0, "Prism mesh type requires 1 parameter"));
|
||||
return -1;
|
||||
}
|
||||
int nedge = static_cast<int>(params[0]);
|
||||
meshC->MakePrism(nedge);
|
||||
return 0;
|
||||
|
||||
default:
|
||||
m->SetError(mjCError(0, "Unsupported mesh type"));
|
||||
return 1;
|
||||
}
|
||||
m->SetError(mjCError(0, "Unsupported mesh type"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// add pair to model
|
||||
|
||||
Reference in New Issue
Block a user