diff -r 7c27cda03747 -r 97df974b5ed5 src/modeleditcontext.h --- 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 - ldraw::Id append(Args&&... args); - ldraw::Id append(std::unique_ptr&& object); + ldraw::id_t append(Args&&... args); + ldraw::id_t append(std::unique_ptr&& object); template - 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 -ldraw::Id Model::EditContext::append(Args&&... args) +ldraw::id_t Model::EditContext::append(Args&&... args) { - return this->model.append(args...); + return this->storedModel.append(args...); } template -ldraw::Id Model::EditContext::insert(int position, Args&&... args) +ldraw::id_t Model::EditContext::insert(int position, Args&&... args) +{ + return this->storedModel.insert(position, args...); +} + +namespace ldraw { - return this->model.insert(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>; }