| 1 #include "triangle.h" |
1 #include "triangle.h" |
| 2 |
|
| 3 ldraw::Triangle::Triangle( |
|
| 4 const glm::vec3& point_1, |
|
| 5 const glm::vec3& point_2, |
|
| 6 const glm::vec3& point_3, |
|
| 7 Color color_index) : |
|
| 8 ColoredObject{color_index}, |
|
| 9 points{point_1, point_2, point_3} |
|
| 10 { |
|
| 11 } |
|
| 12 |
|
| 13 ldraw::Triangle::Triangle(const std::array<glm::vec3, 3>& vertices, const Color color) : |
|
| 14 ColoredObject{color}, |
|
| 15 points{vertices[0], vertices[1], vertices[2]} |
|
| 16 { |
|
| 17 } |
|
| 18 |
|
| 19 ldraw::Triangle::Triangle(const glm::vec3 (&vertices)[3], const Color color) : |
|
| 20 ColoredObject{color}, |
|
| 21 points{vertices[0], vertices[1], vertices[2]} |
|
| 22 { |
|
| 23 } |
|
| 24 |
|
| 25 QVariant ldraw::Triangle::getProperty(const Property id) const |
|
| 26 { |
|
| 27 switch (id) |
|
| 28 { |
|
| 29 case Property::Point0: |
|
| 30 return QVariant::fromValue(points[0]); |
|
| 31 case Property::Point1: |
|
| 32 return QVariant::fromValue(points[1]); |
|
| 33 case Property::Point2: |
|
| 34 return QVariant::fromValue(points[2]); |
|
| 35 default: |
|
| 36 return ColoredObject::getProperty(id); |
|
| 37 } |
|
| 38 } |
|
| 39 |
|
| 40 void ldraw::Triangle::setProperty(SetPropertyResult* result, const PropertyKeyValue& pair) |
|
| 41 { |
|
| 42 LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point0, {points[0] = value;}) |
|
| 43 LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point1, {points[1] = value;}) |
|
| 44 LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point2, {points[2] = value;}) |
|
| 45 ColoredObject::setProperty(result, pair); |
|
| 46 } |
|
| 47 |
2 |
| 48 QString ldraw::Triangle::textRepresentation() const |
3 QString ldraw::Triangle::textRepresentation() const |
| 49 { |
4 { |
| 50 return utility::format("%1 %2 %3", |
5 return utility::format("%1 %2 %3", |
| 51 utility::vertexToStringParens(points[0]), |
6 utility::vertexToStringParens(points[0]), |
| 61 polygons.push_back(gl::triangle( |
16 polygons.push_back(gl::triangle( |
| 62 this->points[0], |
17 this->points[0], |
| 63 this->points[1], |
18 this->points[1], |
| 64 this->points[2], |
19 this->points[2], |
| 65 this->colorIndex, |
20 this->colorIndex, |
| 66 this->id)); |
21 this->id)); |
| 67 } |
22 } |
| 68 |
23 |
| 69 void ldraw::Triangle::invert() |
24 void ldraw::Triangle::invert() |
| 70 { |
25 { |
| 71 // 0 1 2 |
26 // 0 1 2 |
| 72 // -> 1 0 2 |
27 // -> 1 0 2 |
| 73 std::swap(this->points[0], this->points[1]); |
28 std::swap(this->points[0], this->points[1]); |
| 74 } |
29 } |
| 75 |
|
| 76 int ldraw::Triangle::numPoints() const |
|
| 77 { |
|
| 78 return 3; |
|
| 79 } |
|
| 80 |
|
| 81 const glm::vec3& ldraw::Triangle::getPoint(int index) const |
|
| 82 { |
|
| 83 if (index >= 0 and index < 3) |
|
| 84 { |
|
| 85 return this->points[index]; |
|
| 86 } |
|
| 87 else |
|
| 88 { |
|
| 89 return ldraw::ColoredObject::getPoint(index); |
|
| 90 } |
|
| 91 } |
|