1 #pragma once 2 3 #include "lc_math.h" 4 5 enum LC_MFW_TYPES 6 { 7 LC_MFW_HATS, 8 LC_MFW_HATS2, 9 LC_MFW_HEAD, 10 LC_MFW_NECK, 11 LC_MFW_BODY, 12 LC_MFW_BODY2, 13 LC_MFW_BODY3, 14 LC_MFW_RARM, 15 LC_MFW_LARM, 16 LC_MFW_RHAND, 17 LC_MFW_LHAND, 18 LC_MFW_RHANDA, 19 LC_MFW_LHANDA, 20 LC_MFW_RLEG, 21 LC_MFW_LLEG, 22 LC_MFW_RLEGA, 23 LC_MFW_LLEGA, 24 LC_MFW_NUMITEMS 25 }; 26 27 struct lcMinifigPieceInfo 28 { 29 char Description[128]; 30 PieceInfo* Info; 31 lcMatrix44 Offset; 32 }; 33 34 struct lcMinifig 35 { 36 PieceInfo* Parts[LC_MFW_NUMITEMS]; 37 int Colors[LC_MFW_NUMITEMS]; 38 float Angles[LC_MFW_NUMITEMS]; 39 lcMatrix44 Matrices[LC_MFW_NUMITEMS]; 40 }; 41 42 struct lcMinifigTemplate 43 { 44 QString Parts[LC_MFW_NUMITEMS]; 45 int Colors[LC_MFW_NUMITEMS]; 46 float Angles[LC_MFW_NUMITEMS]; 47 }; 48 49 class MinifigWizard 50 { 51 public: 52 MinifigWizard(); 53 ~MinifigWizard(); 54 55 MinifigWizard(const MinifigWizard&) = delete; 56 MinifigWizard& operator=(const MinifigWizard&) = delete; 57 GetModel()58 lcModel* GetModel() const 59 { 60 return mModel.get(); 61 } 62 GetTemplates()63 const std::map<QString, lcMinifigTemplate>& GetTemplates() const 64 { 65 return mTemplates; 66 } 67 68 void SaveTemplate(const QString& TemplateName, const lcMinifigTemplate& Template); 69 void DeleteTemplate(const QString& TemplateName); 70 void AddTemplatesJson(const QByteArray& TemplateData); 71 QByteArray GetTemplatesJson() const; 72 73 void LoadDefault(); 74 75 void Calculate(); 76 int GetSelectionIndex(int Type) const; 77 void SetSelectionIndex(int Type, int Index); 78 void SetColor(int Type, int Color); 79 void SetAngle(int Type, float Angle); 80 81 std::vector<lcMinifigPieceInfo> mSettings[LC_MFW_NUMITEMS]; 82 83 lcMinifig mMinifig; 84 85 protected: 86 void LoadSettings(); 87 void ParseSettings(lcFile& Settings); 88 89 void LoadTemplates(); 90 void SaveTemplates(); 91 92 std::unique_ptr<lcModel> mModel; 93 std::map<QString, lcMinifigTemplate> mTemplates; 94 static const char* mSectionNames[LC_MFW_NUMITEMS]; 95 }; 96 97