====== XNode ====== **//Inherited from//** [[class::domain::xitem|XItem]], **//Inherited by//** NULL **//Friend class//** NodeManager, **//Description//** XNode从XItem继承,是对物理模型中的节点的数据抽象,它包含节点坐标信息,是单元必不可少的组成数据,也是XT框架中模型数据的重要组成部分,在模型内节点ID不可重复,它由[[class::domain::nodemanager|NodeManager]]创建和销毁。\\ 为了更方便的进行网格操作(编辑、修改或优化等等),XNode缓存了所有用到这个节点的单元指针信息并以数组的形式保存下来(XItemArray),综合考虑几何与实体网格的数据规模以及单元节点的数量关系,该数组以固定8个单元指针的大小增加或缩减容量,数组所使用的内存空间均从内存池中分配,这样可有效避免内存碎片化。单元的创建、修改以及销毁都将及时更新到该缓存数组中,XNode提供了接口访问这些单元,它在搜索构建节点领域信息时非常高效和有用(但也需要在创建单元时更新该数组)。在某些场合,一些节点没有任何单元与之关联,称之为浮动节点(Float Node)。\\ 为了满足实际应用开发的需要,Node还提供了标志位和扩展数据接口,以保持或关联某些临时数据,比如setFlag函数常常用于设置一个时间戳,用来判断该节点是否已经被访问或者被处理,这比使用std::set类似的数据结构更高效也更省资源(需要注意的时,这种应用不适用于多线程)。 **//Members//** * Vector3r [[xnode#m_dcoord|m_dCoord]] * ulong [[xnode#m_ulflag|m_ulFlag]] * int [[xnode#m_ulrid|m_ulRId]] * void * [[xnode#m_pextdata|m_pExtData]] * XItemArray [[xnode#m_pelems|m_pElems]] **//Public interface//** * [[xnode#xnode1|XNode]](ulong id = 0) * void [[xnode#setflag|setFlag]](int i) * int [[xnode#getflag|getFlag]]() const * void [[xnode#setextdata|setExtData]](const void * pData) * void * [[xnode#getextdata|getExtData]]() const * void [[xnode#increaseflag|increaseFlag]]() * void [[xnode#increaseelementcount|increaseElementCount]]() * void [[xnode#decreaseelementcount|decreaseElementCount]]() * int [[xnode#getrid|getRId]]() const * void [[xnode#setrid|setRId]](int id) * void [[xnode#setcoord|setCoord]](const real * coord) * const real * [[xnode#getcoord|getCoord]]() const * int [[xnode#getelementcount|getElementCount]]() const * int [[xnode#find|find]](ElemPtr el) const * void [[xnode#read|read]](XBinaryIO * io) * void [[xnode#write|write]](XBinaryIO * io) * ElemPtr [[xnode#getelement|getElement]](int index) const * void [[xnode#copyelementtoarray|copyElementToArray]](XArray & elArr) const ---- {{anchor:m_dcoord}} **Vector3r m_dCoord** 节点坐标 {{anchor:m_ulflag}} **ulong m_ulFlag** 节点标志位 {{anchor:m_ulrid}} **int m_ulRId** 在后处理中的结果索引 {{anchor:m_pextdata}} **void * m_pExtData** {{anchor:m_pelems}} **XItemArray m_pElems** ---- {{anchor:xnode1}} **XNode(ulong id = 0)** *function: 构造函数 *parameters: - [i]ulong id = 0: *return value: 无 {{anchor:setflag}} **void setFlag(int i)** *function:设置辅助标志,一般做临时辅助用途 *parameters: - [i]int i: 标志值 *return value: 无 {{anchor:getflag}} **int getFlag() const** *function: 获取当前标志值 *parameters: NULL *return value: 当前标志值 {{anchor:setextdata}} **void setExtData(const void * pData)** *function: 设置扩展数据地址 *parameters: - [i]const void * pData: 扩展数据地址 *return value: 无 {{anchor:getextdata}} **void * getExtData() const** *function: 获取当前扩展项数据地址 *parameters: NULL *return value: 扩展数据地址 {{anchor:increaseflag}} **void increaseFlag()** *function: 标志值增加1 *parameters: NULL *return value: 无 {{anchor:increaseelementcount}} **void increaseElementCount()** *function: *parameters: NULL *return value: {{anchor:decreaseelementcount}} **void decreaseElementCount()** *function: *parameters: NULL *return value: {{anchor:getrid}} **int getRId() const** *function: 获取节点的结果位置索引 *parameters: NULL *return value: 节点的结果位置索引 {{anchor:setrid}} **void setRId(int id)** *function: 设置节点的结果位置索引 *parameters: - [i]int id: 节点的结果位置索引 *return value: 无 {{anchor:setcoord}} **void setCoord(const real * coord)** *function: 设置坐标 *parameters: - [i]const real * coord: 新的坐标值 *return value: 无 {{anchor:getcoord}} **const real * getCoord() const** *function: 获取坐标值 *parameters: NULL *return value: 坐标数组指针 {{anchor:getelementcount}} **int getElementCount() const** *function: *parameters: NULL *return value: {{anchor:find}} **int find(ElemPtr el) const** *function: *parameters: - [i]ElemPtr el: *return value: {{anchor:read}} **void read(XBinaryIO * io)** *function: *parameters: - [i]XBinaryIO * io: *return value: {{anchor:write}} **void write(XBinaryIO * io)** *function: *parameters: - [i]XBinaryIO * io: *return value: {{anchor:getelement}} **ElemPtr getElement(int index) const** *function: *parameters: - [i]int index: *return value: {{anchor:copyelementtoarray}} **void copyElementToArray(XArray & elArr) const** *function: *parameters: - [i]XArray & elArr: *return value: