allow omitting -b

This commit is contained in:
David Rose 2003-10-01 18:19:52 +00:00
parent 89b3d2ef85
commit 2d5254428d
2 changed files with 27 additions and 10 deletions

View File

@ -31,6 +31,14 @@
////////////////////////////////////////////////////////////////////
EggMakeTube::
EggMakeTube() {
set_program_description
("egg-make-tube generates an egg file representing a \"tube\" model, "
"a cylinder capped on both ends by hemispheres. This is similar "
"in shape to the CollisionTube object within Panda.\n\n"
"This program can also generate spheres if you omit -b; in this "
"case, you are generating a degenerate tube of length 0.");
add_option
("a", "x,y,z", 0,
"Specify the first endpoint of the tube.",
@ -39,7 +47,7 @@ EggMakeTube() {
add_option
("b", "x,y,z", 0,
"Specify the second endpoint of the tube.",
&EggWriter::dispatch_double_triple, NULL, _point_a);
&EggWriter::dispatch_double_triple, &_got_point_b, _point_b);
add_option
("r", "radius", 0,
@ -85,6 +93,12 @@ EggMakeTube() {
////////////////////////////////////////////////////////////////////
void EggMakeTube::
run() {
if (!_got_point_b) {
_point_b[0] = _point_a[0];
_point_b[1] = _point_a[1];
_point_b[2] = _point_a[2];
}
// We will generate the vertices in the canonical space (along the y
// axis), then transform it to the desired point.
LVector3d direction(_point_b[0] - _point_a[0],
@ -117,15 +131,17 @@ run() {
}
// Now the cylinder sides.
for (ri = 0; ri < _num_trings; ri++) {
vtx_1 = NULL;
vtx_2 = NULL;
for (si = 0; si <= _num_slices; si++) {
EggVertex *vtx_3 = calc_tube_vertex(ri, si);
EggVertex *vtx_4 = calc_tube_vertex(ri + 1, si);
add_polygon(vtx_1, vtx_2, vtx_4, vtx_3);
vtx_1 = vtx_3;
vtx_2 = vtx_4;
if (_length != 0.0) {
for (ri = 0; ri < _num_trings; ri++) {
vtx_1 = NULL;
vtx_2 = NULL;
for (si = 0; si <= _num_slices; si++) {
EggVertex *vtx_3 = calc_tube_vertex(ri, si);
EggVertex *vtx_4 = calc_tube_vertex(ri + 1, si);
add_polygon(vtx_1, vtx_2, vtx_4, vtx_3);
vtx_1 = vtx_3;
vtx_2 = vtx_4;
}
}
}

View File

@ -47,6 +47,7 @@ private:
private:
double _point_a[3];
double _point_b[3];
bool _got_point_b;
double _radius;
int _num_slices;
int _num_crings;