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