1 #ifndef __LDLMAINMODEL_H__
2 #define __LDLMAINMODEL_H__
3 
4 #include <LDLoader/LDLModel.h>
5 #include <TCFoundation/TCStlIncludes.h>
6 
7 class LDLPalette;
8 
9 typedef std::vector<LDLModel *> LDLModelVector;
10 
11 class LDLMainModel : public LDLModel
12 {
13 public:
14 	LDLMainModel(void);
15 	bool load(const char *filename);
16 	virtual TCDictionary* getLoadedModels(void);
17 	void print(void);
18 	virtual int getEdgeColorNumber(int colorNumber);
19 	virtual void getRGBA(int colorNumber, int& r, int& g, int& b, int& a);
20 	virtual bool hasSpecular(int colorNumber);
21 	virtual bool hasShininess(int colorNumber);
22 	virtual void getSpecular(int colorNumber, float *specular);
23 	virtual void getShininess(int colorNumber, float &shininess);
24 	virtual bool colorNumberIsTransparent(int colorNumber);
getPalette(void)25 	virtual LDLPalette *getPalette(void) { return m_mainPalette; }
getPalette(void)26 	virtual const LDLPalette *getPalette(void) const { return m_mainPalette; }
27 	virtual void setExtraSearchDirs(TCStringArray *value);
getExtraSearchDirs(void)28 	TCStringArray *getExtraSearchDirs(void) { return m_extraSearchDirs; }
isMainModel(void)29 	virtual bool isMainModel(void) const { return true; }
30 
setMainModel(LDLMainModel * value)31 	virtual void setMainModel(LDLMainModel *value) { m_mainModel = value; }
32 
setLDConfig(const std::string & value)33 	void setLDConfig(const std::string& value) { m_ldConfig = value; }
getLDConfig(void)34 	const std::string& getLDConfig(void) const { return m_ldConfig; };
35 	// Flags
setLowResStuds(bool value)36 	void setLowResStuds(bool value) { m_mainFlags.lowResStuds = value; }
getLowResStuds(void)37 	bool getLowResStuds(void) const { return m_mainFlags.lowResStuds; }
setBlackEdgeLines(bool value)38 	void setBlackEdgeLines(bool value) { m_mainFlags.blackEdgeLines = value; }
getBlackEdgeLines(void)39 	bool getBlackEdgeLines(void) const { return m_mainFlags.blackEdgeLines; }
setProcessLDConfig(bool value)40 	void setProcessLDConfig(bool value) { m_mainFlags.processLDConfig = value; }
getProcessLDConfig(void)41 	bool getProcessLDConfig(void) const
42 	{
43 		return m_mainFlags.processLDConfig != false;
44 	}
setSkipValidation(bool value)45 	void setSkipValidation(bool value) { m_mainFlags.skipValidation = value; }
getSkipValidation(void)46 	bool getSkipValidation(void) const
47 	{
48 		return m_mainFlags.skipValidation != false;
49 	}
setBoundingBoxesOnly(bool value)50 	void setBoundingBoxesOnly(bool value)
51 	{
52 		m_mainFlags.boundingBoxesOnly = value;
53 	}
getBoundingBoxesOnly(void)54 	bool getBoundingBoxesOnly(void) const
55 	{
56 		return m_mainFlags.boundingBoxesOnly != false;
57 	}
setRandomColors(bool value)58 	void setRandomColors(bool value) { m_mainFlags.randomColors = value; }
getRandomColors(void)59 	bool getRandomColors(void) const {
60 		return m_mainFlags.randomColors != false;
61 	}
setForceHighlightColor(bool value)62 	void setForceHighlightColor(bool value)
63 	{
64 		m_mainFlags.forceHighlightColor = value;
65 	}
getForceHighlightColor(void)66 	bool getForceHighlightColor(void) const
67 	{
68 		return m_mainFlags.forceHighlightColor != false;
69 	}
setCheckPartTracker(bool value)70 	void setCheckPartTracker(bool value)
71 	{
72 		m_mainFlags.checkPartTracker = value;
73 	}
getCheckPartTracker(void)74 	bool getCheckPartTracker(void) const {
75 		return m_mainFlags.checkPartTracker != false;
76 	}
setHighlightColorNumber(int value)77 	void setHighlightColorNumber(int value)
78 	{
79 		m_highlightColorNumber = value;
80 	}
getHighlightColorNumber(void)81 	int getHighlightColorNumber(void) const { return m_highlightColorNumber; }
82 	void setSeamWidth(float value);
getSeamWidth(void)83 	float getSeamWidth(void) const { return m_seamWidth; }
cancelLoad(void)84 	virtual void cancelLoad(void) { m_mainFlags.loadCanceled = true; }
getLoadCanceled(void)85 	virtual bool getLoadCanceled(void)
86 	{
87 		return m_mainFlags.loadCanceled != false;
88 	}
setBBoxIgnoreUsed(bool value)89 	virtual void setBBoxIgnoreUsed(bool value)
90 	{
91 		m_mainFlags.bboxIgnoreUsed = value;
92 	}
getBBoxIgnoreUsed(void)93 	virtual bool getBBoxIgnoreUsed(void) const
94 	{
95 		return m_mainFlags.bboxIgnoreUsed != false;
96 	}
setGreenFrontFaces(bool value)97 	void setGreenFrontFaces(bool value)
98 	{
99 		m_mainFlags.greenFrontFaces = value;
100 	}
getGreenFrontFaces(void)101 	bool getGreenFrontFaces(void) const
102 	{
103 		return m_mainFlags.greenFrontFaces != false;
104 	}
setRedBackFaces(bool value)105 	void setRedBackFaces(bool value)
106 	{
107 		m_mainFlags.redBackFaces = value;
108 	}
getRedBackFaces(void)109 	bool getRedBackFaces(void) const
110 	{
111 		return m_mainFlags.redBackFaces != false;
112 	}
setBlueNeutralFaces(bool value)113 	void setBlueNeutralFaces(bool value)
114 	{
115 		m_mainFlags.blueNeutralFaces = value;
116 	}
getBlueNeutralFaces(void)117 	bool getBlueNeutralFaces(void) const
118 	{
119 		return m_mainFlags.blueNeutralFaces != false;
120 	}
setTexmaps(bool value)121 	void setTexmaps(bool value) { m_mainFlags.texmaps = value; }
getTexmaps(void)122 	bool getTexmaps(void) const { return m_mainFlags.texmaps != false; }
setScanConditionalControlPoints(bool value)123 	void setScanConditionalControlPoints(bool value)
124 	{
125 		m_mainFlags.scanConditionalControlPoints = value;
126 	}
getScanConditionalControlPoints(void)127 	bool getScanConditionalControlPoints(void) const
128 	{
129 		return m_mainFlags.scanConditionalControlPoints != false;
130 	}
setHaveMpdTexmaps(void)131 	void setHaveMpdTexmaps(void) { m_mainFlags.haveMpdTexmaps = true; }
getHaveMpdTexmaps(void)132 	bool getHaveMpdTexmaps(void) const { return m_mainFlags.haveMpdTexmaps != false; }
ancestorCheck(const std::string & name)133 	bool &ancestorCheck(const std::string &name) { return m_ancestorMap[name]; }
ancestorClear(const std::string & name)134 	void ancestorClear(const std::string &name) { m_ancestorMap[name] = false; }
getAlertSender(void)135 	virtual TCObject *getAlertSender(void) { return m_alertSender; }
setAlertSender(TCObject * value)136 	virtual void setAlertSender(TCObject *value) { m_alertSender = value; }
addMpdModel(LDLModel * model)137 	virtual void addMpdModel(LDLModel *model) { m_mpdModels.push_back(model); }
getMpdModels(void)138 	virtual LDLModelVector &getMpdModels(void) { return m_mpdModels; }
139 	virtual void release(void);
140 	virtual bool transparencyIsDisabled(void) const;
141 private:
142 	//LDLMainModel(const LDLMainModel &other);
143 	virtual TCObject *copy(void) const;
144 protected:
145 	virtual void dealloc(void);
146 	virtual void processLDConfig(void);
147 	void ldrawDirNotFound(void);
148 
149 	TCObject *m_alertSender;
150 	TCDictionary *m_loadedModels;
151 	LDLPalette *m_mainPalette;
152 	TCStringArray *m_extraSearchDirs;
153 	// This needs to not retain its children; hence, the std::vector, instead of
154 	// TCTypedObjectArray.
155 	LDLModelVector m_mpdModels;
156 	float m_seamWidth;
157 	int m_highlightColorNumber;
158 	std::string m_ldConfig;
159 	struct
160 	{
161 		// Public flags
162 		bool lowResStuds:1;
163 		bool blackEdgeLines:1;
164 		bool processLDConfig:1;
165 		bool skipValidation:1;
166 		bool boundingBoxesOnly:1;
167 		bool randomColors:1;
168 		bool forceHighlightColor:1;
169 		bool checkPartTracker:1;
170 		bool bboxIgnoreUsed:1;
171 		bool greenFrontFaces:1;
172 		bool redBackFaces:1;
173 		bool blueNeutralFaces:1;
174 		bool texmaps:1;
175 		bool scanConditionalControlPoints:1;
176 		bool haveMpdTexmaps:1;
177 		// Semi-public flags
178 		bool loadCanceled:1;
179 	} m_mainFlags;
180 	StringBoolMap m_ancestorMap;
181 };
182 
183 #endif // __LDLMAINMODEL_H__
184