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