OTSSTDLib.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #pragma once
  2. #include "Element.h"
  3. #include "PosXray.h"
  4. #include "otsdataconst.h"
  5. using namespace OTSDATA;
  6. namespace OTSClassifyEngine
  7. {
  8. class __declspec(dllexport) CSTDBase : public CPosXray
  9. {
  10. public:
  11. CSTDBase();
  12. CSTDBase(const CSTDBase& a_oSource);
  13. CSTDBase(CSTDBase* a_poSource);
  14. virtual ~CSTDBase();
  15. CSTDBase& operator=(const CSTDBase& a_oSource); // =operator
  16. BOOL operator==(const CSTDBase& a_oSource); // ==operator
  17. void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode);
  18. void SetID(int iID);
  19. int GetID();
  20. void SetName(CString strName);
  21. CString GetName();
  22. void SetFormula(CString strFormula);
  23. CString GetFormula();
  24. void SetDensity(std::string dDensity);
  25. std::string GetDensity();
  26. void SetAvAltomicWeight(double dAvAltomicWeight);
  27. double GetAvAltomicWeight();
  28. void SetBulkmod(double dBulkmod);
  29. double GetBulkmod();
  30. void SetRigiditymod(double dRigiditymod);
  31. double GetRigiditymod();
  32. void SetMineralBRPL(int iBRPL);
  33. void SetMineralBRPL(CString strBRPL);
  34. int GetMineralBRPL();
  35. CString GetMineralBRPLName();
  36. static void GetBRPLNames(std::vector<CString>& vecstrnames);
  37. void SetMineralKind(int iKind);
  38. void SetMineralKind(CString strKind);
  39. int GetMineralKind();
  40. CString GetMineralKindName();
  41. static void GetKindNames(std::vector<CString>& vecstrnames);
  42. void SetElementsList(const CElementsList& elementlist);
  43. const CElementsList& GetElementsList();
  44. void AddElement(const CElement& element);
  45. void RemoveElement(const CElement& element);
  46. void RemoveAllElements();
  47. CElementPtr GetElement(int iIndex);
  48. int GetElementCount();
  49. void Clear();
  50. protected:
  51. // cleanup
  52. void Cleanup();
  53. // initialization
  54. void Init();
  55. // duplication
  56. void Duplicate(const CSTDBase& a_oSource);
  57. protected:
  58. int m_iID;
  59. CString m_strName;
  60. CString m_strFormula;
  61. std::string m_dDensity;
  62. double m_dAverz;
  63. double m_dBulkmod; // 体积模量(GPa)
  64. double m_dRigiditymod; // 剪切模量(GPa)
  65. MINERAL_BRPL m_iBRPL; // 矿物的塑性脆性
  66. MINERAL_KINDS m_iKind; // 矿物的种类
  67. CElementsList m_listElements;
  68. };
  69. typedef std::shared_ptr<CSTDBase> __declspec(dllexport) CSTDBasePtr;
  70. typedef std::vector<CSTDBasePtr> __declspec(dllexport) CSTDBaseList;
  71. class __declspec(dllexport) CStandardItem : public CSTDBase
  72. {
  73. public:
  74. CStandardItem();
  75. CStandardItem(const CStandardItem& a_oSource);
  76. CStandardItem(CStandardItem* a_poSource);
  77. ~CStandardItem();
  78. CStandardItem& operator=(const CStandardItem& a_oSource); // =operator
  79. BOOL operator==(const CStandardItem& a_oSource); // ==operator
  80. void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode);
  81. CString GetConditionExp() { return sConditionExp; };
  82. void SetConditionExp(CString exp) { sConditionExp = exp; };
  83. void SetColor(COLORREF iColor);
  84. COLORREF GetColor();
  85. void SetBSEValue(int iBSEvalue);
  86. int GetBSEValue();
  87. void SetClassify(int iClassify);
  88. int GetClassify();
  89. BOOL DoFormulaParser();
  90. static CString GetSTDMineralPropName(int iPropid);
  91. static CString GetElementPropName(int iPropid);
  92. protected:
  93. // cleanup
  94. void Cleanup();
  95. // initialization
  96. void Init();
  97. // duplication
  98. void Duplicate(const CStandardItem& a_oSource);
  99. int DoFormulaParser(CString strFormula, std::vector<CString>& vecStrElementName, std::vector<double>& vecDElementCount);
  100. int DoFormulaParser_ext(CString strFormula, std::vector<CString>& vecStrElementName, std::vector<double>& vecDElementCount);
  101. void AddElementAndCount(std::vector<CString>& vecStrElementName, std::vector<double>& vecDElementCount, CString strElementName, double dElementCount);
  102. double GetRatioAfterRightSymbol(CString strFormula, int iRightSymbolIndex, int& iDigitalCount);
  103. CString GetSubFormulaWithoutSymbol(CString strSubFormulaWithSymbol, double dRatio);
  104. static CString GetPropName(int iStartPropid, int iPropid);
  105. protected:
  106. CString sConditionExp;
  107. COLORREF m_iColor;
  108. int m_iBSEvalue;
  109. int m_iClassify; // 矿物分类
  110. };
  111. typedef std::shared_ptr<CStandardItem> __declspec(dllexport) CStandardItemPtr;
  112. typedef std::vector<CStandardItemPtr> __declspec(dllexport) CStandardItemList;
  113. class __declspec(dllexport) CClassify : public xmls::ISlo
  114. {
  115. public:
  116. CClassify();
  117. CClassify(const CClassify& a_oSource);
  118. CClassify(CClassify* a_poSource);
  119. virtual ~CClassify();
  120. CClassify& operator=(const CClassify& a_oSource);
  121. BOOL operator==(const CClassify& a_oSource); // ==operator
  122. void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode);
  123. void SetID(int iID);
  124. int GetID();
  125. void SetName(CString strName);
  126. CString GetName();
  127. void SetColor(COLORREF iColor);
  128. COLORREF GetColor();
  129. void SetOrder(int iOrder);
  130. int GetOrder();
  131. protected:
  132. void Init();
  133. void Cleanup();
  134. void Duplicate(const CClassify& a_oSource);
  135. protected:
  136. int m_iID;
  137. CString m_strName;
  138. COLORREF m_iColor;
  139. int m_iOrder;
  140. };
  141. typedef std::shared_ptr<CClassify> __declspec(dllexport) CClassifyPtr;
  142. typedef std::vector<CClassifyPtr> __declspec(dllexport) CClassifyList;
  143. class __declspec(dllexport) CSTDLib : public xmls::ISlo
  144. {
  145. public:
  146. CSTDLib();
  147. CSTDLib(const CSTDLib& a_oSource);
  148. CSTDLib(CSTDLib* a_poSource);
  149. ~CSTDLib();
  150. void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode);
  151. CSTDLib& operator= (const CSTDLib& a_oSource);
  152. BOOL operator== (const CSTDLib& a_oSource);
  153. void SetName(CString strName);
  154. CString GetName();
  155. bool AddItem(CStandardItem stdMineral);
  156. // 从0开始数, 在第iIndex位置之前插入一个记录
  157. bool InsertItem(CStandardItem stdMineral, int iIndex);
  158. void RemoveItem(const CStandardItem& stdMineral);
  159. CStandardItemPtr GetSTDItem(int iIndex);
  160. void SwapItem(CStandardItem* pstdMineral1, CStandardItem* pstdMineral2);
  161. void SortByItemID(BOOL bAsc = TRUE);
  162. int GetSTDItemCount();
  163. void Clear();
  164. CString GetValidItemName(CString strFormat);
  165. CString GetDifferItemName(CString strMineralName);
  166. bool AddClassify(CClassify classify);
  167. void RemoveClassify(const CClassify& classify);
  168. int GetClassifyCount();
  169. CString GetClassifyName(int iClassify);
  170. void GetClassifyNames(std::vector<CString>& vecstrnames);
  171. CString GetDifferClassifyName(CString strClassifyName);
  172. CClassifyPtr GetClassifyPtr(int iIndex);
  173. CClassifyPtr GetClassifyPtr(CString strClassifyName);
  174. void SwapClassifyOrder(CClassify* pclassify1, CClassify* pclassify2);
  175. static void LoadStrFromXml();
  176. static CString GetSTDLibPropName(int iPropid);
  177. protected:
  178. bool HasSameItemName(CString strMineralName);
  179. bool HasSameClassifyName(CString strClassifyName);
  180. // cleanup
  181. void Cleanup();
  182. // initialization
  183. void Init();
  184. // duplication
  185. void Duplicate(const CSTDLib& a_oSource);
  186. protected:
  187. CString m_strName;
  188. CStandardItemList m_listSTDItems;
  189. CClassifyList m_listClassify;
  190. };
  191. typedef std::shared_ptr<CSTDLib> __declspec(dllexport) CSTDLibPtr;
  192. typedef std::vector<CSTDLibPtr> __declspec(dllexport) CSTDLibList;
  193. }