src/inputvertices.cpp

changeset 322
a39f454a3d7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/inputvertices.cpp	Sun Jul 03 20:18:34 2022 +0300
@@ -0,0 +1,43 @@
+#include "src/inputvertices.h"
+
+bool InputVertices::currentPointOnExistingPoint() const
+{
+	const glm::vec3& pos = this->polygon.back();
+	return std::any_of(
+		this->polygon.begin(),
+		this->polygon.end() - 1,
+		[&pos](const glm::vec3& p){return isclose(pos, p);});
+}
+
+std::size_t InputVertices::calcNumPoints() const
+{
+	std::size_t result = this->polygon.size();
+	if (this->currentPointOnExistingPoint()) {
+		result -= 1;
+	}
+	return result;
+}
+
+void InputVertices::updateCurrentPoint(const glm::vec3& p)
+{
+	this->polygon.back() = p;
+	this->numpoints = this->calcNumPoints();
+}
+
+void InputVertices::removeLastPoint()
+{
+	if (this->polygon.size() > 1) {
+		this->polygon.erase(this->polygon.end() - 2);
+		this->numpoints = this->calcNumPoints();
+	}
+}
+
+void InputVertices::finishCurrentPoint()
+{
+	this->polygon.push_back(this->polygon.back());
+}
+
+void InputVertices::clear()
+{
+	*this = {};
+}

mercurial