diff --git a/sirius.cpp b/sirius.cpp index 2edc5d7e052b67dad1243234766ee9aa82623be7..8c3343fdf34c3da4912dee1b26651686d841297a 100644 --- a/sirius.cpp +++ b/sirius.cpp @@ -234,7 +234,7 @@ class Triangulated : public Drawable { for (auto currEdgeStart = getNextVertex(currVertex); currEdgeStart != getPreviousVertex(currVertex); currEdgeStart = getNextVertex(currEdgeStart) - ) + ) if (intersectEachOther(*currEdgeStart, *getNextVertex(currEdgeStart), currPotDiag1, currPotDiag2)) { return false; @@ -253,7 +253,7 @@ class Triangulated : public Drawable { for (auto currEdgeStart = remainingVertices.begin(); currEdgeStart != remainingVertices.end(); currEdgeStart++ - ) + ) if (intersectEachOther(*currEdgeStart, *getNextVertex(currEdgeStart), middle, infinity)) numberOfIntersections++; @@ -277,7 +277,7 @@ public: vertices.push_back(*getNextVertex(currVertex)); vertices.push_back(*getPreviousVertex(currVertex)); remainingVertices.erase(currVertex); - currVertex = vertices.begin(); + currVertex = remainingVertices.begin(); } currVertex = getNextVertex(currVertex); } @@ -298,18 +298,15 @@ class SiriusTriangle : public Drawable { Triangulated triangulated; public: - int n = 0; - - void addPoint(vec2 p) { - n++; - points.emplace_back(p); - if (n > 3) printf("Can't add 4th point to a triangle!\n"); - if (n == 2) generateLineSegment(points[0], points[1]); - if (n == 3) { - generateLineSegment(points[2], points[0]); - generateLineSegment(points[1], points[2]); - triangulated = Triangulated(vertices); - } + SiriusTriangle(vec2 a, vec2 b, vec2 c) { + points.emplace_back(a); + points.emplace_back(b); + points.emplace_back(c); + generateLineSegment(points[0], points[1]); + generateLineSegment(points[2], points[0]); + generateLineSegment(points[1], points[2]); + triangulated = Triangulated(vertices); + init(); } void generateLineSegment(Point p1, Point p2) { @@ -345,65 +342,34 @@ public: for (int i = 0; i < SIRIUS_CIRCLE_SEGMENTS; i++) { vertices.emplace_back( - c.r * cos(curr) + c.c.x, - c.r * sin(curr) + c.c.y + c.r * cos(curr) + c.c.x, + c.r * sin(curr) + c.c.y ); curr += step; } } void draw() override { - //filling out the triangulated area - if (n == 3) - triangulated.draw(); - - //Time to draw the edges - if (n == 3) { - init(); - glBindVertexArray(vao); // Draw call - setColor(vec3(0.6, 0.2, 0.6)); - glDrawArrays(GL_LINE_LOOP, 0, vertices.size()); - } - - for (auto &point: points) - point.draw(); - } -}; - -class SiriusTriangleManager { -public: - std::vector<SiriusTriangle> triangles; - int currTriangle = 0; - int currPoints = 0; - - SiriusTriangleManager() = default; - - void addPoint(vec2 p) { - if (currPoints == 0) - triangles.emplace_back(); - triangles[currTriangle].addPoint(p); - currPoints++; + glBindVertexArray(vao); // Draw call + setColor(vec3(0.6, 0.2, 0.6)); + glDrawArrays(GL_LINE_LOOP, 0, vertices.size()); - if (currPoints == 3) currTriangle++, currPoints = 0; - } + //for (auto &point: points) + // point.draw(); - void draw() { - for (auto triangle: triangles) - triangle.draw(); + triangulated.draw(); } }; BaseCircle baseCircle = BaseCircle(); -SiriusTriangleManager siriusTriangleManager = SiriusTriangleManager(); +std::vector<SiriusTriangle> triangles; // Initialization, create an OpenGL context void onInitialization() { glViewport(0, 0, windowWidth, windowHeight); baseCircle.init(); - siriusTriangleManager.addPoint(vec2(-0.8, -0.2)); - siriusTriangleManager.addPoint(vec2(-0.2, -0.6)); - siriusTriangleManager.addPoint(vec2(-0.6, 0.4)); + triangles.emplace_back(vec2(-0.8, -0.2), vec2(-0.2, -0.6), vec2(-0.6, 0.4)); // create program for the GPU gpuProgram.create(vertexSource, fragmentSource, "outColor"); @@ -419,7 +385,8 @@ void onDisplay() { setColor(vec3(0, 0.3, 0.5)); baseCircle.draw(); - siriusTriangleManager.draw(); + for (SiriusTriangle &t : triangles) + t.draw(); glutSwapBuffers(); // exchange buffers for double buffering } @@ -472,8 +439,8 @@ void onMouse(int button, int state, int pX, } if (state == GLUT_DOWN && button == GLUT_LEFT_BUTTON) { - siriusTriangleManager.addPoint(vec2(cX, cY)); - siriusTriangleManager.draw(); + /*siriusTriangleManager.addPoint(vec2(cX, cY)); + siriusTriangleManager.draw();*/ glutPostRedisplay(); } }