leocad/common/minifig.h

99 lines
1.9 KiB
C
Raw Permalink Normal View History

#pragma once
2011-09-07 23:06:51 +02:00
2012-05-19 03:13:05 +02:00
#include "lc_math.h"
2011-09-07 23:06:51 +02:00
enum LC_MFW_TYPES
{
LC_MFW_HATS,
LC_MFW_HATS2,
2011-09-07 23:06:51 +02:00
LC_MFW_HEAD,
LC_MFW_NECK,
LC_MFW_BODY,
LC_MFW_BODY2,
LC_MFW_BODY3,
LC_MFW_RARM,
LC_MFW_LARM,
LC_MFW_RHAND,
LC_MFW_LHAND,
LC_MFW_RHANDA,
LC_MFW_LHANDA,
LC_MFW_RLEG,
LC_MFW_LLEG,
LC_MFW_RLEGA,
LC_MFW_LLEGA,
2011-09-07 23:06:51 +02:00
LC_MFW_NUMITEMS
};
struct lcMinifigPieceInfo
{
char Description[128];
2011-09-07 23:06:51 +02:00
PieceInfo* Info;
2012-05-19 03:13:05 +02:00
lcMatrix44 Offset;
2011-09-07 23:06:51 +02:00
};
2013-08-09 06:57:18 +02:00
struct lcMinifig
{
PieceInfo* Parts[LC_MFW_NUMITEMS];
int Colors[LC_MFW_NUMITEMS];
float Angles[LC_MFW_NUMITEMS];
lcMatrix44 Matrices[LC_MFW_NUMITEMS];
};
struct lcMinifigTemplate
{
QString Parts[LC_MFW_NUMITEMS];
int Colors[LC_MFW_NUMITEMS];
float Angles[LC_MFW_NUMITEMS];
};
class MinifigWizard
2011-09-07 23:06:51 +02:00
{
public:
2016-08-01 05:44:15 +02:00
MinifigWizard();
~MinifigWizard();
2011-09-07 23:06:51 +02:00
2020-05-04 00:39:39 +02:00
MinifigWizard(const MinifigWizard&) = delete;
2021-11-15 03:34:24 +01:00
MinifigWizard(MinifigWizard&&) = delete;
2020-05-04 00:39:39 +02:00
MinifigWizard& operator=(const MinifigWizard&) = delete;
2021-11-15 03:34:24 +01:00
MinifigWizard& operator=(MinifigWizard&&) = delete;
lcModel* GetModel() const
{
return mModel.get();
}
2020-05-04 00:39:39 +02:00
const std::map<QString, lcMinifigTemplate>& GetTemplates() const
{
return mTemplates;
}
void SaveTemplate(const QString& TemplateName, const lcMinifigTemplate& Template);
void DeleteTemplate(const QString& TemplateName);
2019-09-15 02:05:13 +02:00
void AddTemplatesJson(const QByteArray& TemplateData);
QByteArray GetTemplatesJson() const;
void LoadDefault();
2011-09-07 23:06:51 +02:00
void Calculate();
int GetSelectionIndex(int Type) const;
void SetSelectionIndex(int Type, int Index);
void SetColor(int Type, int Color);
void SetAngle(int Type, float Angle);
2019-06-05 03:45:22 +02:00
std::vector<lcMinifigPieceInfo> mSettings[LC_MFW_NUMITEMS];
2011-09-07 23:06:51 +02:00
2016-08-01 05:44:15 +02:00
lcMinifig mMinifig;
protected:
void LoadSettings();
void ParseSettings(lcFile& Settings);
void LoadTemplates();
void SaveTemplates();
std::unique_ptr<lcModel> mModel;
std::map<QString, lcMinifigTemplate> mTemplates;
static const char* mSectionNames[LC_MFW_NUMITEMS];
2011-09-07 23:06:51 +02:00
};