Inherited from NULL
Inherited by NULL
Friend class NULL
Description
XDocument是XT框架中的数据中心,它构建了一个应用空间,应用空间的基础是它所管理的数据对象管理器(XManager),而数据对象管理器则负责具体对象(XItem)的创建、修改与删除,因此可将XDocument看作是数据的树根,由根长出树干(数据对象管理器),再由树干长出树枝树叶(数据对象)。应用程序要完成哪些工作,这些决定了应用空间里应该管理哪些数据。在文档的初始化过程(init())中,应逐项加入数据对象管理器,只有加入到文档的数据对象管理器才能被功能接口访问进而根据需要创建、销毁或者修改指定类型的数据对象。
在XDocument中构建的任何数据对象都可以通过下面的步骤访问:
通过对象的类型调用XDocument的getItemManager获取对象管理器;
通过对象的ID调用XManager的getItem获取对象指针;
这种访问方式适用于任何基于XDocument继承的应用,因此在编写应用功能函数时可以使用通用的接口函数形式而无需考虑具体的应用。
一般来说,XDocument会保有一份视图数据(XViewData)以记录文档当前的状态并组织成易于展示的形式。
Members
Public interface
-
-
-
-
-
-
-
-
void
setVersion(int major, int minor, int sub, int build)
-
-
-
-
-
virtual void
save(const char * fname, const char * scheme)
virtual bool
load(const char * fname)
virtual void
saveH5(const char * fname, const char * scheme)
virtual bool
loadH5(const char * fname)
-
-
-
-
-
-
-
-
void
updateDomainTree(XManager * mgr, const char * branchName = NULL, TypeID domainType = Domain_Unknown, TreeNode * category = NULL)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
virtual const XItem
*getItem(TypeID tid, ulong id, DomainID did)
virtual const XItem
*getItem(const XUniqueObjectID * ue)
-
-
-
-
-
-
-
-
virtual void
getItemTargets(const XItem* item, vector<XUniqueObjectID> * ues)
virtual void
setItemTargets(const XItem* item, vector<XUniqueObjectID> * ues)
-
TreeNode *
findLeafNode(TreeNode * branchNode, TreeNodeData leafObj)
TreeNode *
getTreeItem(TreeNodeData domain, TreeNodeData obj, bool bSecondTree = false)
TreeNode *
getTreeItem(XManager * domain, TreeNodeData obj, bool bSecondTree = false)
-
TreeNode *
getBranchNode(TreeNodeData branchObj, bool bSecondTree = false)
-
-
void
exchangeJsonItems(vector<const XItem*> * items, JsonParams * parr, const char * key, int domanID = 0)
static TypeID
registerDocument(const char * docString, CreateDocFunc cfunc = 0, DestroyDocFunc dfunc = 0, TypeID docType = Document_None)
static bool
registerUIProxy(TypeID docID, CreateUIProxyFunc cUIFunc, DestroyUIProxyFunc dUIFunc)
static bool
registerSession(const char * sname, FuncCreateSession cFunc, FuncDestroySession dFunc)
-
-
-
static XDocument *
create(const char * docString)
-
-
-
-
-
-
-
-
-
bool
getModelSheet(const XModel * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool
getPartSheet(const XPart * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool
getAssemblySheet(const XAssembly * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool
getShapeSheet(const XGeometry * obj, vector<ObjPropertyEntry> * prpSheet)
bool
getNodeSheet(const XNode * obj, vector<ObjPropertyEntry> * prpSheet)
bool
getElementSheet(const XElement * obj, vector<ObjPropertyEntry> * prpSheet)
-
Protected interface
TreeNode *
updateItemTree(XManager * mgr, const XItem * obj, bool bDelete = false)
-
void
saveHeader(XBinaryIO * io, const char * scheme)
-
void
saveHeader(XH5IO * io, const char * scheme, H5Object * hroot)
-
int m_ulDocType
文档类型,注册时由程序自动生成,注册功能命令时需要用到。
int m_bModified
文档是否发生修改的标识位
int64 m_CreateTime
int64 m_LastModifyTime
bool m_bEnableUndo
文档是否支持Undo/Redo操作
XTree * m_pTree
文档对象树,用于构建对象树视图
XTree * m_pSecondTree
XMemPool * m_pDocMem
文档的内存池
Name m_strGUID
文档的GUID标识符,与文档类型一一对应
Name m_strDocName
文档名,不超过64个字符
Name m_strVender
Name m_strExtension
DBVersion m_Version
int m_iDocIndex
Path m_strDocPath
文档路径,不超过256个字符
unordered_map<void *, BranchInfo> * m_pBranchNameMap
vector<XSession*> m_pSessions
vector<XManager*> m_pMgrs
unordered_map<string, TypeID> * m_pTreeNodeMap
int m_iNextTreeNodeType
Path m_strLogFile
应用文档的日志文件名,不超过256个字符
const XUnitSystem * m_pDocUnitSys
OpnRecorder * m_pDocRecord
记录文档操作中数据的修改(包括增加、删除)
XDocument()
function: 应用文档构造函数
parameters: NULL
return value: 无
void setName(const char * dname)
const char * getExtension()
function: 获取文档扩展名
parameters: NULL
return value: 文档扩展名
const char * getName()
function: 获取文档名
parameters: NULL
return value: 文档名字符串
const char * getPath()
const char * getGUID()
const char * getDocIDString()
function: 获取文档ID字符串
parameters: NULL
return value: 文档ID字符串
const DBVersion & getVersion()
function: 获取文档版本信息
parameters: NULL
return value: 版本信息
void setVersion(int major, int minor, int sub, int build)
function: 设置文档版本信息
parameters:
[i]int major: 主版本号
[i] int minor: 副版本号
[i] int sub: 小版本号
[i] int build: 构建序号
return value: 无
const char * getVender()
function: 获取程序服务提供商名称
parameters: NULL
return value: 服务提供商名称
void setVender(const char * s)
function: 设置程序服务提供商名称
parameters:
[i]const char * s: 服务提供商名称
return value: 无
XSession * getSession(const char * name)
int64 getCreateTime() const
function: 获取创建时间
parameters: NULL
return value: 创建时间戳
int64 getModifyTime() const
function: 获取修改时间戳
parameters: NULL
return value: 修改时间戳
virtual void save(const char * fname, const char * scheme)
function: 将文档保存到指定文件中
parameters:
[i]const char * fname: 文件名
[i] const char * scheme: 应用方案名
return value: 无
virtual bool load(const char * fname)
function: 从文件中载入文档数据
parameters:
[i]const char * fname: 文件名
return value: 无
virtual void saveH5(const char * fname, const char * scheme)
function: 将文档保存为H5文件
parameters:
[i]const char * fname: H5文件名
[i] const char * scheme: 应用方案名
return value: 无
virtual bool loadH5(const char * fname)
virtual void reset()
function: 清空所有数据对象,重置文档
parameters: NULL
return value: 无
virtual bool isEmpty() const
virtual void clear()
function: 清空文档所有数据对象
parameters: NULL
return value: 无
virtual bool isClosable()
virtual void buildObjectTree()
function: 重建对象树
parameters: NULL
return value: 无
XTree * getObjectTree()
function: 获取文档对象树
parameters: NULL
return value: 对象树指针
XTree * getSecondTree()
function: 获取第二文档对象树
parameters: NULL
return value: 第二文档对象树
void updateDomainTree(XManager * mgr, const char * branchName = NULL, TypeID domainType = Domain_Unknown, TreeNode * category = NULL)
function: 更新对象树的域分支
parameters:
[i]XManager * mgr: 域分支对应的对象管理器
[i] const char * branchName = NULL: 域分支名
[i] TypeID domainType = Domain_Unknown: 域分支类型
[i] TreeNode * category = NULL: 域分支节点
return value: 无
TreeNode * updateModelPartTree(const XPart * p, bool bDelete)
virtual TreeNode * updateObjectTree(const XItem * obj, bool bDelete = false)
virtual TreeNode * updateSecondTree(const XItem * obj, bool bDelete = false)
function:
parameters:
[i]const XItem * obj:
[i] bool bDelete = false:
return value:
TypeID ctype() const
function: 获取文档类型ID
parameters: NULL
return value: 整型文档类型ID
const char * ctypeString() const
function: 获取文档类型字符串
parameters: NULL
return value: 文档类型字符串
virtual void release()
function: 释放文档所占内存空间
parameters: NULL
return value: 无
virtual void init()
function: 初始化文档
parameters: NULL
return value: 无
bool isModified()
void setModified(bool b)
function: 设置文档修改标志
parameters:
[i]bool b: 文档修改标志
return value: 无
void saveConfig(const char * scheme)
function: 保存文档的全局配置
parameters:
[i]const char * scheme:
return value: 无
void loadConfig(const char * scheme)
function: 载入文档的全局配置
parameters:
[i]const char * scheme:
return value:
virtual void registerEnumString()
XMemPool * getDocMem()
function: 获取文档公用内存池
parameters: NULL
return value: 文档公用内存池
virtual const char * getExtensionNames()
function: 获取文档扩展名
parameters: NULL
return value: 文档扩展名字符串
void setLogFile(const char * name)
function: 设置日志文件名
parameters:
[i]const char * name: 日志文件名
return value: 无
void enableUndo()
function: 激活undo/redo模式
parameters: NULL
return value: 无
void disableUndo()
function: 使undo/redo模式失效
parameters: NULL
return value: 无
virtual void clearCacheData()
function: 清空文档缓存数据
parameters: NULL
return value: 无
virtual void clearReference(const XItem* obj)
void setUnitSystem(const XUnitSystem * unitSys)
function:
parameters:
[i]const XUnitSystem * unitSys:
return value:
const XUnitSystem * getUnitSystem()
function:
parameters: NULL
return value:
virtual XViewData * getViewData()
virtual const XItem *getItem(TypeID tid, ulong id, DomainID did)
function: 访问数据对象
parameters:
[i]TypeID tid: 对象类型
[i] ulong id: 对象ID
[i] DomainID did: 对象域类型(访问模型里的对象时,为模型的ID)
return value: 数据对象指针
virtual const XItem *getItem(const XUniqueObjectID * ue)
function: 通过唯一对象标识访问数据对象
parameters:
[i]const XUniqueObjectID * ue: 唯一对象标识
return value: 数据对象指针
virtual XModel * getModel()
function: 获取文档当前模型对象
parameters: NULL
return value: 文档当前模型对象
XManager * getItemManager(TypeID mgrType)
function: 获取对象管理器
parameters:
[i]TypeID mgrType: 对象域类型码
return value: 对象管理器
void insertItemManager(XManager * mgr)
void createMaterialManager()
function: 创建材料对象管理器
parameters: NULL
return value: 无
void createPropertyManager(XModel * mdl)
function: 创建单元属性对象管理器
parameters:
[i]XModel * mdl: 参考模型
return value: 无
void createConditionManager()
function: 创建条件对象管理器
parameters: NULL
return value: 无
void createJobManager()
function: 创建作业对象管理器
parameters: NULL
return value: 无
virtual void getItemInformation(const XUniqueObjectID * ue, string * infoStr)
virtual void getItemTargets(const XItem* item, vector<XUniqueObjectID> * ues)
function:
parameters:
[i]const XItem* item:
[i] vector<XUniqueObjectID> * ues:
return value:
virtual void setItemTargets(const XItem* item, vector<XUniqueObjectID> * ues)
function:
parameters:
[i]const XItem* item:
[i] vector<XUniqueObjectID> * ues:
return value:
virtual void createViewData()
function: 创建文档视图
parameters: NULL
return value: 文档视图对象指针
TreeNode * findLeafNode(TreeNode * branchNode, TreeNodeData leafObj)
TreeNode * getTreeItem(TreeNodeData domain, TreeNodeData obj, bool bSecondTree = false)
function: 获取数据对象对应的树节点
parameters:
[i]TreeNodeData domain: 数据对象所属的域(一般为对象管理器)
[i] TreeNodeData obj: 数据对象
[i] bool bSecondTree = false: 是否第二对象树
return value: 数据对象对应的树节点
TreeNode * getTreeItem(XManager * domain, TreeNodeData obj, bool bSecondTree = false)
function: 获取数据对象对应的树节点
parameters:
[i]XManager * domain: 对象管理器
[i] TreeNodeData obj: 数据对象
[i] bool bSecondTree = false: 是否第二对象树
return value: 数据对象对应的树节点
virtual bool checkNodeStatus(TreeNode * node)
TreeNode * getBranchNode(TreeNodeData branchObj, bool bSecondTree = false)
function: 获取数据对象所对应的分支
parameters:
[i]TreeNodeData branchObj: 数据对象
[i] bool bSecondTree = false: 是否第二对象树
return value: 数据对象所对应的分支
OpnRecorder * getRecorder()
function: 获取文档的数据记录器
parameters: NULL
return value: 数据记录器对象指针
void getDocTempFilePath(const char * file, string * strPath)
void exchangeJsonItems(vector<const XItem*> * items, JsonParams * parr, const char * key, int domanID = 0)
function: 对象选择器与脚本交换选择对象
parameters:
[i]vector<const XItem*> * items: 选择对象数组
[i] JsonParams * parr: 脚本参数对象
[i] const char * key: 选择对象所对应的关键字
[i] int domanID = 0: 选择对象所属域类型(模型ID)
return value: 无
static TypeID registerDocument(const char * docString, CreateDocFunc cfunc = 0, DestroyDocFunc dfunc = 0, TypeID docType = Document_None)
function: 注册文档
parameters:
[i]const char * docString: 文档类型名
[i] CreateDocFunc cfunc = 0: 文档构造函数
[i] DestroyDocFunc dfunc = 0: 文档析构函数
[i] TypeID docType = Document_None: 当为Document_None时强制指定文档类型ID,否则自动获取类型ID(可能会变化)
return value: 返回文档类型ID
static bool registerUIProxy(TypeID docID, CreateUIProxyFunc cUIFunc, DestroyUIProxyFunc dUIFunc)
static bool registerSession(const char * sname, FuncCreateSession cFunc, FuncDestroySession dFunc)
static bool queryDocumentTypes(vector<string> * docTypes)
static const char * getDocumentTypeString(TypeID docID)
static TypeID getDocumentTypeID(const char * docString)
static XDocument * create(const char * docString)
static void destroy(XDocument *)
function: 销毁文档
parameters:
[i]XDocument *: 文档指针
return value: 无
static UIProxy * createUIProxy(MainFrame * mf, XDocument * doc)
function: 为文档doc创建界面代理
parameters:
[i]MainFrame * mf: 主框架
[i] XDocument * doc: 文档指针
return value: 界面代理指针
static void destroyUIProxy(TypeID docID, UIProxy *)
function: 销毁界面代理
parameters:
[i]TypeID docID: 文档类型ID
[i] UIProxy *: 界面代理指针
return value: 无
static const char * resolveDocumentType(const char * fname)
static XSession * createSession(const char * sname)
function: 创建临时会话
parameters:
[i]const char * sname: 会话类型名
return value: 会话指针
static void destroySession(XSession * session)
function: 销毁临时会话
parameters:
[i]XSession * session: 会话指针
return value: 无
virtual ResultIndexMap * getResultIndexMap(XModel * mesh)
function: 获取结果索引
parameters:
[i]XModel * mesh: 结果所属的网格模型
return value: 结果索引
void registerTreeNodeType(const char * tString)
TypeID getTreeNodeType(const char * tString)
function: 获取树节点数据类型ID
parameters:
[i]const char * tString: 树节点类型字符串
return value: 树节点数据类型ID
bool getModelSheet(const XModel * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool getPartSheet(const XPart * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool getAssemblySheet(const XAssembly * obj, vector<ObjPropertyEntry> * prpSheet, bool bMesh)
bool getShapeSheet(const XGeometry * obj, vector<ObjPropertyEntry> * prpSheet)
bool getNodeSheet(const XNode * obj, vector<ObjPropertyEntry> * prpSheet)
bool getElementSheet(const XElement * obj, vector<ObjPropertyEntry> * prpSheet)
bool updateExternalReference(const char * extpath)
TreeNode * updateItemTree(XManager * mgr, const XItem * obj, bool bDelete = false)
void updateDocFolder()
function: 更新文档文件夹
parameters: NULL
return value: 无
void saveHeader(XBinaryIO * io, const char * scheme)
function: 将文件头写入二进制文件
parameters:
[i]XBinaryIO * io: 二进制文件句柄
[i] const char * scheme: 应用方案名
return value: 无
bool loadHeader(XBinaryIO * io)
void saveHeader(XH5IO * io, const char * scheme, H5Object * hroot)
function: 将文件头写入H5文件
parameters:
[i]XH5IO * io: H5文件句柄
[i] const char * scheme: 应用方案名
[i] H5Object * hroot: H5文件根节点
return value: 无
bool loadHeader(XH5IO * io, H5Object * hroot)