| 321 Vertex v0 = {x0, y0, z0}; |
321 Vertex v0 = {x0, y0, z0}; |
| 322 Vertex v1 = {x1, y1, z1}; |
322 Vertex v1 = {x1, y1, z1}; |
| 323 Vertex v2 = {x2, y2, z2}; |
323 Vertex v2 = {x2, y2, z2}; |
| 324 Vertex v3 = {x3, y3, z3}; |
324 Vertex v3 = {x3, y3, z3}; |
| 325 |
325 |
| 326 if (type == Cylinder) |
326 if (type == Cylinder || type == Ring) |
| 327 qSwap(v1, v3); |
327 qSwap(v1, v3); |
| 328 |
328 |
| 329 LDQuadrilateral* quad = model.emplace<LDQuadrilateral>(v0, v1, v2, v3); |
329 LDQuadrilateral* quad = model.emplace<LDQuadrilateral>(v0, v1, v2, v3); |
| 330 quad->setColor(MainColor); |
330 quad->setColor(MainColor); |
| 331 |
331 |
| 371 conditionalLineSegments << segments; |
371 conditionalLineSegments << segments; |
| 372 |
372 |
| 373 for (int i : conditionalLineSegments) |
373 for (int i : conditionalLineSegments) |
| 374 { |
374 { |
| 375 QPointF p0 = ::pointOnLDrawCircumference(i, divisions); |
375 QPointF p0 = ::pointOnLDrawCircumference(i, divisions); |
| 376 QPointF p2 = ::pointOnLDrawCircumference(i + 1, divisions); |
376 QPointF p2 = ::pointOnLDrawCircumference(i - 1, divisions); |
| 377 QPointF p3 = ::pointOnLDrawCircumference(i - 1, divisions); |
377 QPointF p3 = ::pointOnLDrawCircumference(i + 1, divisions); |
| 378 Vertex v0 = {p0.x(), 0.0, p0.y()}; |
378 Vertex v0 = {p0.x(), 0.0, p0.y()}; |
| 379 Vertex v1; |
379 Vertex v1; |
| 380 Vertex v2 = {p2.x(), 0.0, p2.y()}; |
380 Vertex v2 = {p2.x(), 0.0, p2.y()}; |
| 381 Vertex v3 = {p3.x(), 0.0, p3.y()}; |
381 Vertex v3 = {p3.x(), 0.0, p3.y()}; |
| 382 |
382 |
| 386 } |
386 } |
| 387 else if (type == Cone) |
387 else if (type == Cone) |
| 388 { |
388 { |
| 389 v1 = {v0.x * (ringNumber + 1), 0.0, v0.z * (ringNumber + 1)}; |
389 v1 = {v0.x * (ringNumber + 1), 0.0, v0.z * (ringNumber + 1)}; |
| 390 v0 = {v0.x * ringNumber, 1.0, v0.z * ringNumber}; |
390 v0 = {v0.x * ringNumber, 1.0, v0.z * ringNumber}; |
| |
391 v2 *= ringNumber; |
| |
392 v3 *= ringNumber; |
| |
393 v2.y = v3.y = 1.0; |
| 391 } |
394 } |
| 392 |
395 |
| 393 LDConditionalEdge* line = model.emplace<LDConditionalEdge>(); |
396 LDConditionalEdge* line = model.emplace<LDConditionalEdge>(); |
| 394 line->setColor(EdgeColor); |
397 line->setColor(EdgeColor); |
| 395 line->setVertex(0, v0); |
398 line->setVertex(0, v0); |
| 464 if (fraction.indexOf(".") == -1) |
467 if (fraction.indexOf(".") == -1) |
| 465 fraction += ".0"; |
468 fraction += ".0"; |
| 466 |
469 |
| 467 if (spec.type == PrimitiveModel::Ring or spec.type == PrimitiveModel::Cone) |
470 if (spec.type == PrimitiveModel::Ring or spec.type == PrimitiveModel::Cone) |
| 468 { |
471 { |
| 469 QString spacing = |
472 QString spacing = (spec.ringNumber < 10) ? " " : ""; |
| 470 (spec.ringNumber < 10) ? " " : |
|
| 471 (spec.ringNumber < 100) ? " " : ""; |
|
| 472 description = format("%1 %2%3 x %4", PrimitiveModel::typeName(spec.type), spacing, spec.ringNumber, fraction); |
473 description = format("%1 %2%3 x %4", PrimitiveModel::typeName(spec.type), spacing, spec.ringNumber, fraction); |
| 473 } |
474 } |
| 474 else |
475 else |
| |
476 { |
| 475 description = format("%1 %2", PrimitiveModel::typeName(spec.type), fraction); |
477 description = format("%1 %2", PrimitiveModel::typeName(spec.type), fraction); |
| |
478 } |
| 476 |
479 |
| 477 // Prepend "Hi-Res" or "Lo-Res" as appropriate. |
480 // Prepend "Hi-Res" or "Lo-Res" as appropriate. |
| 478 if (spec.divisions == HighResolution) |
481 if (spec.divisions == HighResolution) |
| 479 description.insert (0, "Hi-Res "); |
482 description.insert (0, "Hi-Res "); |
| 480 else if (spec.divisions == LowResolution) |
483 else if (spec.divisions == LowResolution) |