src/modeleditcontext.h

changeset 73
97df974b5ed5
parent 35
98906a94732f
child 76
7c4a63a02632
equal deleted inserted replaced
72:7c27cda03747 73:97df974b5ed5
17 */ 17 */
18 18
19 #pragma once 19 #pragma once
20 #include "model.h" 20 #include "model.h"
21 #include "linetypes/object.h" 21 #include "linetypes/object.h"
22 #include "linetypes/quadrilateral.h"
23 #include "linetypes/triangle.h"
22 24
23 class Model::EditContext 25 class Model::EditContext
24 { 26 {
25 public: 27 public:
26 template<typename T, typename... Args> 28 template<typename T, typename... Args>
27 ldraw::Id append(Args&&... args); 29 ldraw::id_t append(Args&&... args);
28 ldraw::Id append(std::unique_ptr<ldraw::Object>&& object); 30 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object);
29 template<typename T, typename... Args> 31 template<typename T, typename... Args>
30 ldraw::Id insert(int position, Args&&... args); 32 ldraw::id_t insert(int position, Args&&... args);
31 void setObjectProperty( 33 void setObjectProperty(
32 ldraw::Object* object, 34 ldraw::Object* object,
33 ldraw::Property property, 35 ldraw::Property property,
34 const QVariant &value); 36 const QVariant &value);
35 void invertObject(ldraw::Id id); 37 void invertObject(ldraw::id_t id);
38 Model& model();
36 private: 39 private:
37 EditContext(Model& model); 40 EditContext(Model& model);
38 friend class Model; 41 friend class Model;
39 Model& model; 42 Model& storedModel;
40 }; 43 };
41 44
42 template<typename T, typename... Args> 45 template<typename T, typename... Args>
43 ldraw::Id Model::EditContext::append(Args&&... args) 46 ldraw::id_t Model::EditContext::append(Args&&... args)
44 { 47 {
45 return this->model.append<T>(args...); 48 return this->storedModel.append<T>(args...);
46 } 49 }
47 50
48 template<typename T, typename... Args> 51 template<typename T, typename... Args>
49 ldraw::Id Model::EditContext::insert(int position, Args&&... args) 52 ldraw::id_t Model::EditContext::insert(int position, Args&&... args)
50 { 53 {
51 return this->model.insert<T>(position, args...); 54 return this->storedModel.insert<T>(position, args...);
52 } 55 }
56
57 namespace ldraw
58 {
59 /// Determines how quadrilaterals are split into triangles
60 enum class QuadrilateralSplit
61 {
62 Split123_134,
63 Split124_234
64 };
65
66 // Splits the specified quadrilateral into triangles.
67 // If it is not a quadrilateral then no action is performed
68 auto splitQuadrilateral(Model::EditContext& editor,
69 quadrilateralid_t quadrilateral_id,
70 QuadrilateralSplit splitType = QuadrilateralSplit::Split123_134
71 ) -> std::optional<std::pair<triangleid_t, triangleid_t>>;
72 }

mercurial