24 |
24 |
25 class Model::EditContext |
25 class Model::EditContext |
26 { |
26 { |
27 public: |
27 public: |
28 template<typename T, typename... Args> |
28 template<typename T, typename... Args> |
29 ldraw::id_t append(Args&&... args); |
29 ldraw::Id<T> append(Args&&... args); |
30 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
30 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
31 template<typename T, typename... Args> |
31 template<typename T, typename... Args> |
32 ldraw::id_t insert(int position, Args&&... args); |
32 ldraw::Id<T> insert(int position, Args&&... args); |
|
33 void remove(int position); |
33 void setObjectProperty( |
34 void setObjectProperty( |
34 ldraw::Object* object, |
35 ldraw::id_t object, |
35 ldraw::Property property, |
36 ldraw::Property property, |
36 const QVariant &value); |
37 const QVariant &value); |
37 void invertObject(ldraw::id_t id); |
38 void invertObject(ldraw::id_t id); |
38 Model& model(); |
39 Model& model(); |
39 private: |
40 private: |
41 friend class Model; |
42 friend class Model; |
42 Model& storedModel; |
43 Model& storedModel; |
43 }; |
44 }; |
44 |
45 |
45 template<typename T, typename... Args> |
46 template<typename T, typename... Args> |
46 ldraw::id_t Model::EditContext::append(Args&&... args) |
47 ldraw::Id<T> Model::EditContext::append(Args&&... args) |
47 { |
48 { |
48 return this->storedModel.append<T>(args...); |
49 return this->storedModel.append<T>(args...); |
49 } |
50 } |
50 |
51 |
51 template<typename T, typename... Args> |
52 template<typename T, typename... Args> |
52 ldraw::id_t Model::EditContext::insert(int position, Args&&... args) |
53 ldraw::Id<T> Model::EditContext::insert(int position, Args&&... args) |
53 { |
54 { |
54 return this->storedModel.insert<T>(position, args...); |
55 return this->storedModel.insert<T>(position, args...); |
55 } |
56 } |
56 |
57 |
57 namespace ldraw |
58 namespace ldraw |
58 { |
59 { |
59 /// Determines how quadrilaterals are split into triangles |
60 /// Determines how quadrilaterals are split into triangles |
60 enum class QuadrilateralSplit |
61 enum class Diagonal |
61 { |
62 { |
62 Split123_134, |
63 Diagonal_13, |
63 Split124_234 |
64 Diagonal_24 |
64 }; |
65 }; |
65 |
66 |
66 // Splits the specified quadrilateral into triangles. |
67 // Splits the specified quadrilateral into triangles. |
67 // If it is not a quadrilateral then no action is performed |
68 // If it is not a quadrilateral then no action is performed |
68 auto splitQuadrilateral(Model::EditContext& editor, |
69 auto splitQuadrilateral(Model::EditContext& editor, |
69 quadrilateralid_t quadrilateral_id, |
70 quadrilateralid_t quadrilateral_id, |
70 QuadrilateralSplit splitType = QuadrilateralSplit::Split123_134 |
71 Diagonal splitType = Diagonal::Diagonal_13 |
71 ) -> std::optional<std::pair<triangleid_t, triangleid_t>>; |
72 ) -> std::optional<std::pair<triangleid_t, triangleid_t>>; |
72 } |
73 } |