XElement

Inherited from OrderItem,

Inherited by NULL

Friend class XManager,GeometryManager,ElementManager,

Description

XElement是所有网格单元的基类,它封装了单元数据及方法,它是模型的内部数据对象,属且仅属于一个几何对象。单元是CAE处理中的重要数据结构,它抽象了真实世界中保持结构(流体)物理特性的最小组织。在XT中,几何模型和网格模型中的实体都由若干单元组成。单元由一系列有顺序的节点包围形成,根据单元类型,根据节点可计算面积、体积、法向等几何属性。XT中所有单元类型都从此基类继承。

XT使用工厂模式管理单元的创建、销毁和访问,但是与一般的工厂模式不同,新加入的单元并不使用虚继承,这是为了保证在大规模模型场景下避免由于虚函数带来的性能损失和内存空间的额外消耗。XElment提供了统一的接口,通过函数表调用单元子类型的具体调用。

XT预置了适用于结构分析的13种单元以及适用于有限体积法的3种单元,它们均从XElement继承,列举如下:

单元类型 类名 节点数 说明
点单元 Point1Element 1 一般用于几何顶点
1阶线单元 Line2Element 2
2阶线单元 Point1Element 3
1阶三角形面单元 Tri3Element 3
2阶三角形面单元 Tri6Element 6
1阶四边形面单元 Quad4Element 4
2阶四边形面单元 Quad8Element 8
1阶四面体单元 Tet4Element 4
2阶四面体单元 Tet10Element 10
1阶三棱柱单元 Prism6Element 6
2阶三棱柱单元 Prism15Element 15
1阶金字塔单元 Pyramid5Element 5
2阶金字塔单元 Pyramid13Element 13
1阶六面体单元 Hex8Element 8
2阶六面体单元 Hex20Element 20
多折线单元 PolylineElement 取决于实际情况
多边形面单元 PolygonElement 取决于实际情况
多面体单元 CellElement 取决于实际情况 不能直接访问节点,通过访问它包含的多边形面单元或者多折线单元访问节点

单元类图如下:

Members

Public interface

Protected interface


void * m_pExtData

扩展数据地址

ulong m_ulFlag

辅助标志

int m_ulRId

参考ID,一般用于后处理结果排序。

ElemNodeInfo * m_parNodes

节点数组首地址


XElement(ulong id, TypeID t)

int getRId() const

void setRId(int id)

void setFlag(int i)

int getFlag() const

void setExtData(void * pData)

void * getExtData() const

void setGeometry(const XGeometry * pData)

const XGeometry * getGeometry() const

void setNodes(const NodePtr*ppNodes)

void updateNodesPointer()

NodePtr getNode(int index) const

void setNode(int index,NodePtr n)

int getNodeCount() const

static int getNodeCount(TypeID et)

static int getVertexCount(TypeID et)

real getLength() const

real getArea() const

real getVolume() const

void getBoundbox(XBoundBox * box) const

void flip()

void calcCenter(float * center) const

void calcNormal(float * normal) const

void calcCenter(double * center) const

void calcNormal(double * normal) const

real calcQuality(CriterionType c) const

int buildSection(const XPlane * plane,SegmentPoint * sp, int * sectionFacetID = NULL) const

int buildGLData(ArrayGLObject * gl_tri,ArrayGLObject * gl_seg) const

void serialize(XBinaryIO * io,XModel * mdl,bool bSave)

void mapGaussToNodal(const float * g_value,float * n_value,int numIntPoint) const

void buildLocalCoordSystem(XCoordSystem * cs) const

void getJacobiMatrix(Vector3d * jacobi) const

void convertLocalTensorToGlobal(const double **localT, double ** globalT, int planeType = -1) const

Point1Element * toPoint1() const

Line2Element * toBar2() const

Line3Element * toBar3() const

Tri3Element * toTri3() const

Quad4Element * toQuad4() const

Tet4Element * toTet4() const

Hex8Element * toHex8() const


int calcSegmentPoints(SegmentPoint * sp, int eCnt, const XPlane * fp, const int eni[][2], int usedEdgeIndex[], int usedEdgeVertex[]) const