23     int const sides = qRound(numSides);
 
   24     bool const smooth = (0 == sides); 
 
   25     int const slices = smooth ? 
SLICES : sides;
 
   30     float Rb = R, Rt = Rb * ratio_Rt_Rb, H = 2 * R;
 
   33     Vertices vb(slices), vt(slices), nbt(slices);
 
   34     float const nz = (1 - Rt / Rb) * H;
 
   36     for (
int s = 0; s < slices; ++s) {
 
   37         float th = float(2 * 
M_PI * s / slices), st = sinf(th), ct = cosf(th);
 
   39         Vector3D vb_(Rb * ct, Rb * st, 0), vt_(Rt * ct, Rt * st, H);
 
   47     int const nv = 6 * 2 * slices;
 
   54     for (
int s = 0; s < slices; ++s) {
 
   55         int s1 = s, s2 = (s + 1) % slices;
 
   65         vs.
addQuad(vb.at(s1), vb.at(s2), vt.at(s2), vt.at(s1)); 
 
   67             auto &n1 = nbt.at(s1), &n2 = nbt.at(s2);
 
   73     ASSERT(!smooth || ns.count() == nv);
 
   75     return makeMesh(vs, smooth ? &ns : 
nullptr);
 
Defines the macro ASSERT.
 
#define ASSERT(condition)
 
static Mesh makeMesh(const Vertices &vs, Vertices const *ns=nullptr)
 
static Mesh meshColumn(float ratio_Rt_Rb, float numSides)
 
QVector< Vert_Normal > Mesh
 
void addVertex(const Vector3D &, int n=1)
 
void addTriangle(const Vector3D &, const Vector3D &, const Vector3D &)
 
void addQuad(const Vector3D &, const Vector3D &, const Vector3D &, const Vector3D &)
 
Vector3D normalized() const