#pragma once #include "OMExport.h" #include "XJObject.h" #include "OMUndoRedo.h" #include #include #include class CXJObjectManager; class OMPeriodicLattice; enum {MAX_MANAGER_NUM = 2000}; //声明导出函数 extern "C" XJ_OM_EXPORT CXJObjectManager* GetObjectManager(int index = 0); class XJ_OM_EXPORT CXJObjectManager { public: //单例模式,获得对象管理指针 static CXJObjectManager* GetInstance(); ~CXJObjectManager(); //获取二维点阵数据对象 OMPeriodicLattice* GetPeriodicLattice(); //通过给定要创建对象的类型,来创建对象 CXJObject* CreateObject(EXJObjectType type); CXJObject* GetObjectByKey(int key); //undo/redo void StartCommand(); void EndCommand(); void AddUndoData(const BBox& bbox, const std::vector& idxList, const std::vector& valList); //用于记录网格参数 void AddMeshDataInfo(double isopStep, int markStep, double zMin, double zMax, double isoplethMin, double isoplethMax); void Undo(); void Redo(); void ClearUndoRedo(); unsigned int GetUndoCurStep(); unsigned int GetUndoCount(); private: CXJObjectManager(); //创建基础对象 CXJObject* CreateBaseObject(EXJObjectType type, bool istempObj = false); //产生一个唯一的int类型的数字 int CreateOmKey(); private: //自身单例模式 static CXJObjectManager* m_pInstance; //对象查询表 std::map m_mapObjects; //点阵数据 OMPeriodicLattice* m_periodicLattice; //undo、redo OMUndoRedo* m_pUndoRedo; }; class XJ_OM_EXPORT CXJObserver { public: CXJObserver(){}; virtual~CXJObserver(void){}; public: //virtual int Update(int key, EXJObjectUpdateType updateType) = 0; void SetManageIndex(int managerIndex){m_managerIndex = managerIndex;} int GetManagerIndex() {return m_managerIndex;} protected: int m_managerIndex; };