#pragma once #include "Element.h" #include "PosXray.h" #include "otsdataconst.h" using namespace OTSDATA; namespace OTSClassifyEngine { class __declspec(dllexport) CSTDBase : public CPosXray { public: CSTDBase(); CSTDBase(const CSTDBase& a_oSource); CSTDBase(CSTDBase* a_poSource); virtual ~CSTDBase(); CSTDBase& operator=(const CSTDBase& a_oSource); // =operator BOOL operator==(const CSTDBase& a_oSource); // ==operator void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode); void SetID(int iID); int GetID(); void SetName(CString strName); CString GetName(); void SetFormula(CString strFormula); CString GetFormula(); void SetDensity(std::string dDensity); std::string GetDensity(); void SetAvAltomicWeight(double dAvAltomicWeight); double GetAvAltomicWeight(); void SetBulkmod(double dBulkmod); double GetBulkmod(); void SetRigiditymod(double dRigiditymod); double GetRigiditymod(); void SetMineralBRPL(int iBRPL); void SetMineralBRPL(CString strBRPL); int GetMineralBRPL(); CString GetMineralBRPLName(); static void GetBRPLNames(std::vector& vecstrnames); void SetMineralKind(int iKind); void SetMineralKind(CString strKind); int GetMineralKind(); CString GetMineralKindName(); static void GetKindNames(std::vector& vecstrnames); void SetElementsList(const CElementsList& elementlist); const CElementsList& GetElementsList(); void AddElement(const CElement& element); void RemoveElement(const CElement& element); void RemoveAllElements(); CElementPtr GetElement(int iIndex); int GetElementCount(); void Clear(); protected: // cleanup void Cleanup(); // initialization void Init(); // duplication void Duplicate(const CSTDBase& a_oSource); protected: int m_iID; CString m_strName; CString m_strFormula; std::string m_dDensity; double m_dAverz; double m_dBulkmod; // 体积模量(GPa) double m_dRigiditymod; // 剪切模量(GPa) MINERAL_BRPL m_iBRPL; // 矿物的塑性脆性 MINERAL_KINDS m_iKind; // 矿物的种类 CElementsList m_listElements; }; typedef std::shared_ptr __declspec(dllexport) CSTDBasePtr; typedef std::vector __declspec(dllexport) CSTDBaseList; class __declspec(dllexport) CStandardItem : public CSTDBase { public: CStandardItem(); CStandardItem(const CStandardItem& a_oSource); CStandardItem(CStandardItem* a_poSource); ~CStandardItem(); CStandardItem& operator=(const CStandardItem& a_oSource); // =operator BOOL operator==(const CStandardItem& a_oSource); // ==operator void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode); CString GetConditionExp() { return sConditionExp; }; void SetConditionExp(CString exp) { sConditionExp = exp; }; void SetColor(COLORREF iColor); COLORREF GetColor(); void SetBSEValue(int iBSEvalue); int GetBSEValue(); void SetClassify(int iClassify); int GetClassify(); BOOL DoFormulaParser(); static CString GetSTDMineralPropName(int iPropid); static CString GetElementPropName(int iPropid); protected: // cleanup void Cleanup(); // initialization void Init(); // duplication void Duplicate(const CStandardItem& a_oSource); int DoFormulaParser(CString strFormula, std::vector& vecStrElementName, std::vector& vecDElementCount); int DoFormulaParser_ext(CString strFormula, std::vector& vecStrElementName, std::vector& vecDElementCount); void AddElementAndCount(std::vector& vecStrElementName, std::vector& vecDElementCount, CString strElementName, double dElementCount); double GetRatioAfterRightSymbol(CString strFormula, int iRightSymbolIndex, int& iDigitalCount); CString GetSubFormulaWithoutSymbol(CString strSubFormulaWithSymbol, double dRatio); static CString GetPropName(int iStartPropid, int iPropid); protected: CString sConditionExp; COLORREF m_iColor; int m_iBSEvalue; int m_iClassify; // 矿物分类 }; typedef std::shared_ptr __declspec(dllexport) CStandardItemPtr; typedef std::vector __declspec(dllexport) CStandardItemList; class __declspec(dllexport) CClassify : public xmls::ISlo { public: CClassify(); CClassify(const CClassify& a_oSource); CClassify(CClassify* a_poSource); virtual ~CClassify(); CClassify& operator=(const CClassify& a_oSource); BOOL operator==(const CClassify& a_oSource); // ==operator void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode); void SetID(int iID); int GetID(); void SetName(CString strName); CString GetName(); void SetColor(COLORREF iColor); COLORREF GetColor(); void SetOrder(int iOrder); int GetOrder(); protected: void Init(); void Cleanup(); void Duplicate(const CClassify& a_oSource); protected: int m_iID; CString m_strName; COLORREF m_iColor; int m_iOrder; }; typedef std::shared_ptr __declspec(dllexport) CClassifyPtr; typedef std::vector __declspec(dllexport) CClassifyList; class __declspec(dllexport) CSTDLib : public xmls::ISlo { public: CSTDLib(); CSTDLib(const CSTDLib& a_oSource); CSTDLib(CSTDLib* a_poSource); ~CSTDLib(); void Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode); CSTDLib& operator= (const CSTDLib& a_oSource); BOOL operator== (const CSTDLib& a_oSource); void SetName(CString strName); CString GetName(); bool AddItem(CStandardItem stdMineral); // 从0开始数, 在第iIndex位置之前插入一个记录 bool InsertItem(CStandardItem stdMineral, int iIndex); void RemoveItem(const CStandardItem& stdMineral); CStandardItemPtr GetSTDItem(int iIndex); void SwapItem(CStandardItem* pstdMineral1, CStandardItem* pstdMineral2); void SortByItemID(BOOL bAsc = TRUE); int GetSTDItemCount(); void Clear(); CString GetValidItemName(CString strFormat); CString GetDifferItemName(CString strMineralName); bool AddClassify(CClassify classify); void RemoveClassify(const CClassify& classify); int GetClassifyCount(); CString GetClassifyName(int iClassify); void GetClassifyNames(std::vector& vecstrnames); CString GetDifferClassifyName(CString strClassifyName); CClassifyPtr GetClassifyPtr(int iIndex); CClassifyPtr GetClassifyPtr(CString strClassifyName); void SwapClassifyOrder(CClassify* pclassify1, CClassify* pclassify2); static void LoadStrFromXml(); static CString GetSTDLibPropName(int iPropid); protected: bool HasSameItemName(CString strMineralName); bool HasSameClassifyName(CString strClassifyName); // cleanup void Cleanup(); // initialization void Init(); // duplication void Duplicate(const CSTDLib& a_oSource); protected: CString m_strName; CStandardItemList m_listSTDItems; CClassifyList m_listClassify; }; typedef std::shared_ptr __declspec(dllexport) CSTDLibPtr; typedef std::vector __declspec(dllexport) CSTDLibList; }