src/modeleditcontext.h

changeset 76
7c4a63a02632
parent 73
97df974b5ed5
child 86
4bec0525ef1b
equal deleted inserted replaced
75:204dc77e5654 76:7c4a63a02632
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 }

mercurial