====== ResultIndexMap ====== **//Inherited from//** NULL **//Inherited by//** NULL **//Friend class//** NULL **//Description//** ResultIndexMap封装了面向结果数据的网格索引映射表,它的作用是在构建显示结果的视图数据时,优化节点和单元的顺序并将该顺序以成员变量(RID)的形式固定下来,使程序在切换结果的时候可以以最快的速度从结果缓冲区中取出相应的结果。这么做的原因是由于结果模型的网格并不保证是自然顺序排序,XT为了提高性能,结果数据会按照节点和单元的顺序保存到结果缓冲区中,结果缓冲区根据需要可保存到硬盘上或者从硬盘上读取。 XT对节点的重排顺序为: - 独立梁节点 (Beam Result) - 拓扑边节点(前述节点除外) - 独立板壳节点(前述节点除外,Shell Result) - 拓扑面节点(前述节点除外) - 体节点 对单元的重排顺序为: - 独立梁单元 (Beam Result) - 拓扑边单元(前述单元除外) - 独立板壳单元(前述单元除外,Shell Result) - 拓扑面单元(前述单元除外) - 体单元 对于节点结果,按照节点排序即可;对于单元结果按照单元排序即可;对于积分点结果,需要另外一个数组按单元的顺序记录每个单元的结果位置偏移量,下一个结果的位置偏移量与前一个结果的位置偏移量相减即可得到单元的积分点数;对于单元节点结果,需要另外一个数组按单元的顺序记录每个单元的结果位置偏移量,下一个结果的位置偏移量与前一个结果的位置偏移量相减即可得到单元的节点数。 需要强调的是结果索引映射表是与模型相关的,不同模型节点数一般不同,单元数一般不同,板壳杆梁实体等属性分类也不尽相同,因此不同的模型需要构建不同的映射表。 **//Members//** * XArray [[resultindexmap#m_elemnoderids|m_ElemNodeRIDs]] * XArray [[resultindexmap#m_elemnodeindex|m_ElemNodeIndex]] * XArray [[resultindexmap#m_elemintegralpointindex|m_ElemIntegralPointIndex]] * XArray [[resultindexmap#m_nodeindex|m_NodeIndex]] * MeshCount [[resultindexmap#m_mcount|m_MCount]] * bool [[resultindexmap#m_bhasbeam|m_bHasBeam]] * bool [[resultindexmap#m_bhasshell|m_bHasShell]] * bool [[resultindexmap#m_bhassolid|m_bHasSolid]] * XModel * [[resultindexmap#m_pmdl|m_pMdl]] **//Public interface//** * [[resultindexmap#resultindexmap1|ResultIndexMap]](XModel * mdl) * [[resultindexmap#~resultindexmap|~ResultIndexMap]]() * void [[resultindexmap#setmodel|setModel]](XModel * mdl) * XModel * [[resultindexmap#getmodel|getModel]]() * void [[resultindexmap#clear|clear]]() * ErrorCode [[resultindexmap#read|read]](H5IO * io, H5Obj * grp) * void [[resultindexmap#write|write]](H5IO * io, H5Obj * grp) * void [[resultindexmap#build|build]]() * void [[resultindexmap#matchfaceresult|matchFaceResult]](XResult * rlt, int comp) * void [[resultindexmap#matchedgeresult|matchEdgeResult]](XResult * rlt, int comp) * void [[resultindexmap#reset|reset]](int nodal_cnt) * MeshCount & [[resultindexmap#getmeshcount|getMeshCount]]() * bool [[resultindexmap#hasbeam|hasBeam]]() const * bool [[resultindexmap#hasshell|hasShell]]() const * bool [[resultindexmap#hassolid|hasSolid]]() const * int * [[resultindexmap#getelementintegralpointindexdata|getElementIntegralPointIndexData]]() * int [[resultindexmap#getelementintegralpointindexbegin|getElementIntegralPointIndexBegin]](const XElement * el) * int [[resultindexmap#getelementintegralpointindexend|getElementIntegralPointIndexEnd]](const XElement * el) * int [[resultindexmap#gettotalintegralpointcount|getTotalIntegralPointCount]]() const * int [[resultindexmap#getshellintegralpointcount|getShellIntegralPointCount]]() const * int [[resultindexmap#getbeamintegralpointcount|getBeamIntegralPointCount]]() const * void [[resultindexmap#setelementintegralpointindex|setElementIntegralPointIndex]](const int * indexArr, int size) * int * [[resultindexmap#getelementnodeindexdata|getElementNodeIndexData]]() * int [[resultindexmap#getelementnodeindexbegin|getElementNodeIndexBegin]](const XElement *el) * int [[resultindexmap#getelementnodeindexend|getElementNodeIndexEnd]](const XElement *el) * const int * [[resultindexmap#getelementnoderiddata|getElementNodeRIDData]]() const * void [[resultindexmap#exportindex|exportIndex]](const char *fname) * int [[resultindexmap#getnodeidbyrid|getNodeIDByRID]](int rid) **//Private interface//** * void [[resultindexmap#reindexmesh|reindexMesh]](XModel * mdl) ---- {{anchor:m_elemnoderids}} **XArray m_ElemNodeRIDs** {{anchor:m_elemnodeindex}} **XArray m_ElemNodeIndex** {{anchor:m_elemintegralpointindex}} **XArray m_ElemIntegralPointIndex** {{anchor:m_nodeindex}} **XArray m_NodeIndex** {{anchor:m_mcount}} **MeshCount m_MCount** {{anchor:m_bhasbeam}} **bool m_bHasBeam** {{anchor:m_bhasshell}} **bool m_bHasShell** {{anchor:m_bhassolid}} **bool m_bHasSolid** {{anchor:m_pmdl}} **XModel * m_pMdl** ---- {{anchor:resultindexmap1}} **ResultIndexMap(XModel * mdl)** *function: 构造函数 *parameters: - [i] XModel * mdl: 模型对象 *return value: 无 {{anchor:~resultindexmap}} **~ResultIndexMap()** *function: 析构函数 *parameters: NULL *return value: 无 {{anchor:setmodel}} **void setModel(XModel * mdl)** *function: 绑定模型 *parameters: - [i] XModel * mdl: 模型对象 *return value: 无 {{anchor:getmodel}} **XModel * getModel()** *function: 获取关联模型对象 *parameters: NULL *return value: 关联模型对象 {{anchor:clear}} **void clear()** *function: 清空映射表 *parameters: NULL *return value: 无 {{anchor:read}} **ErrorCode read(H5IO * io, H5Obj * grp)** *function: 从H5文件中读取映射表 *parameters: - [i] H5IO * io: H5文件句柄 - [i] H5Obj * grp: H5节点 *return value: 成功读取返回Error_None,否则返回错误码。 {{anchor:write}} **void write(H5IO * io, H5Obj * grp)** *function: 将映射表写入H5文件中 *parameters: - [i] H5IO * io: H5文件句柄 - [i] H5Obj * grp: H5节点 *return value: 无 {{anchor:build}} **void build()** *function: 构建映射索引 *parameters: NULL *return value: 无 {{anchor:matchfaceresult}} **void matchFaceResult(XResult * rlt, int comp)** *function: 从面单元所属的实体单元提取结果形成面单元的结果 *parameters: - [i] XResult * rlt: 结果对象 - [i] int comp: 分量序号 *return value: 无 {{anchor:matchedgeresult}} **void matchEdgeResult(XResult * rlt, int comp)** *function: 从边单元所属的面单元提取结果形成边单元的结果 *parameters: - [i] XResult * rlt: 结果对象 - [i] int comp: 分量序号 *return value: 无 {{anchor:reset}} **void reset(int nodal_cnt)** *function: 重置索引数组 *parameters: - [i] int nodal_cnt: 节点数 *return value: 无 {{anchor:getmeshcount}} **MeshCount & getMeshCount()** *function: 获取网格统计数据 *parameters: NULL *return value: 网格统计数据结构 {{anchor:hasbeam}} **bool hasBeam() const** *function: 模型是否含有杆梁单元 *parameters: NULL *return value: 模型包含杆梁单元返回true,否则返回false {{anchor:hasshell}} **bool hasShell() const** *function: 模型是否含有板壳单元 *parameters: NULL *return value: 模型包含板壳单元返回true,否则返回false {{anchor:hassolid}} **bool hasSolid() const** *function: 模型是否含有实体单元 *parameters: NULL *return value: 模型包含实体单元返回true,否则返回false {{anchor:getelementintegralpointindexdata}} **int * getElementIntegralPointIndexData()** *function: 获取单元积分点位置数组 *parameters: NULL *return value: 单元积分点位置数组 {{anchor:getelementintegralpointindexbegin}} **int getElementIntegralPointIndexBegin(const XElement * el)** *function: 获取指定单元的积分点结果起始位置 *parameters: - [i] const XElement * el: 单元对象 *return value: 指定单元的积分点结果起始位置 {{anchor:getelementintegralpointindexend}} **int getElementIntegralPointIndexEnd(const XElement * el)** *function: 获取指定单元的积分点结果结束位置 *parameters: - [i] const XElement * el: 单元对象 *return value: 指定单元的积分点结果结束位置 {{anchor:gettotalintegralpointcount}} **int getTotalIntegralPointCount() const** *function: 获取单元积分点总个数 *parameters: NULL *return value: 单元积分点总个数 {{anchor:getshellintegralpointcount}} **int getShellIntegralPointCount() const** *function: 获取板壳单元积分点总个数 *parameters: NULL *return value: 板壳单元积分点总个数 {{anchor:getbeamintegralpointcount}} **int getBeamIntegralPointCount() const** *function: 获取杆梁单元积分点总个数 *parameters: NULL *return value: 杆梁单元积分点总个数 {{anchor:setelementintegralpointindex}} **void setElementIntegralPointIndex(const int * indexArr, int size)** *function: 设置单元的积分点索引 *parameters: - [i] const int * indexArr: 单元的积分点索引数组 - [i] int size: 单元积分点总数 *return value: 无 {{anchor:getelementnodeindexdata}} **int * getElementNodeIndexData()** *function: 获取单元节点位置数组 *parameters: NULL *return value: 单元节点位置数组 {{anchor:getelementnodeindexbegin}} **int getElementNodeIndexBegin(const XElement *el)** *function: 获取指定单元的单元节点结果起始位置 *parameters: - [i] const XElement *el: 单元对象 *return value: 指定单元的单元节点结果起始位置 {{anchor:getelementnodeindexend}} **int getElementNodeIndexEnd(const XElement *el)** *function: 获取指定单元的单元节点结果结束位置 *parameters: - [i] const XElement *el: 单元对象 *return value: 指定单元的单元节点结果结束位置 {{anchor:getelementnoderiddata}} **const int * getElementNodeRIDData() const** *function: 获取单元节点索引数组 *parameters: NULL *return value: 单元节点索引数组 {{anchor:exportindex}} **void exportIndex(const char *fname)** *function: 导出索引到文件中 *parameters: - [i] const char *fname:文件路径 *return value: 无 {{anchor:getnodeidbyrid}} **int getNodeIDByRID(int rid)** *function: 通过RID获取节点ID *parameters: - [i] int rid: 节点RID *return value: 节点ID ---- {{anchor:reindexmesh}} **void reindexMesh(XModel * mdl)** *function: 对模型的网格重排序 *parameters: - [i] XModel * mdl: 模型对象 *return value: 无