src/modeleditcontext.h

changeset 73
97df974b5ed5
parent 35
98906a94732f
child 76
7c4a63a02632
--- a/src/modeleditcontext.h	Fri Mar 06 23:45:44 2020 +0200
+++ b/src/modeleditcontext.h	Mon Mar 09 14:21:54 2020 +0200
@@ -19,34 +19,54 @@
 #pragma once
 #include "model.h"
 #include "linetypes/object.h"
+#include "linetypes/quadrilateral.h"
+#include "linetypes/triangle.h"
 
 class Model::EditContext
 {
 public:
 	template<typename T, typename... Args>
-	ldraw::Id append(Args&&... args);
-	ldraw::Id append(std::unique_ptr<ldraw::Object>&& object);
+	ldraw::id_t append(Args&&... args);
+	ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object);
 	template<typename T, typename... Args>
-	ldraw::Id insert(int position, Args&&... args);
+	ldraw::id_t insert(int position, Args&&... args);
 	void setObjectProperty(
 		ldraw::Object* object,
 		ldraw::Property property,
 		const QVariant &value);
-	void invertObject(ldraw::Id id);
+	void invertObject(ldraw::id_t id);
+	Model& model();
 private:
 	EditContext(Model& model);
 	friend class Model;
-	Model& model;
+	Model& storedModel;
 };
 
 template<typename T, typename... Args>
-ldraw::Id Model::EditContext::append(Args&&... args)
+ldraw::id_t Model::EditContext::append(Args&&... args)
 {
-	return this->model.append<T>(args...);
+	return this->storedModel.append<T>(args...);
 }
 
 template<typename T, typename... Args>
-ldraw::Id Model::EditContext::insert(int position, Args&&... args)
+ldraw::id_t Model::EditContext::insert(int position, Args&&... args)
+{
+	return this->storedModel.insert<T>(position, args...);
+}
+
+namespace ldraw
 {
-	return this->model.insert<T>(position, args...);
+	/// Determines how quadrilaterals are split into triangles
+	enum class QuadrilateralSplit
+	{
+		Split123_134,
+		Split124_234
+	};
+
+	// Splits the specified quadrilateral into triangles.
+	// If it is not a quadrilateral then no action is performed
+	auto splitQuadrilateral(Model::EditContext& editor,
+		quadrilateralid_t quadrilateral_id,
+		QuadrilateralSplit splitType = QuadrilateralSplit::Split123_134
+	) -> std::optional<std::pair<triangleid_t, triangleid_t>>;
 }

mercurial