XCondition

Inherited from NItem,

Inherited by NULL

Friend class ConditionManager,

Description

XCondition提供了一个通用的载荷约束接口,使得用户可以方便地使用各种不同类型的载荷约束,同时保证其正确性和可靠性。

XCondition首先定义了载荷约束的基本属性,如名称、类型、参数等。载荷约束的名称和类型用于标识载荷约束的种类,参数则用于描述载荷约束的具体约束条件;其次,实现了载荷约束的应用方法,该方法用于将载荷约束应用到仿真模型中指定目标实体上,目标对象可以为几何对象,也可以为网格对象,也可以是以上对象的集合(XGroup);还提供了可视化方法的接口,用于显示载荷约束的具体约束条件以及其作用效果;最后还提供了存储和读取方法接口,用于将载荷约束的属性和参数保存为文件,以便以后使用。

XCondition的通用属性包括渲染模式标记用来指定渲染视图时按照什么样的方式来构造视图数据;冲突策略用以指示当多个条件设定发生冲突时如何解决冲突的逻辑策略;局部坐标系ID,边界条件所参考的局部坐标系;数据设置方法,包括常量、外部场、数据表等方法;数据参考ID,外部场或者数据表的索引;数据映射插值方法,在外部场或数据表的情况下将值插值到应用网格对象上的方法。

XCondition按照使用方式分为三大类:载荷类(XLoad)、约束类(XConstraint)以及连接类(XConnection),其中连接类的应用目标包含主从对象,他们需要根据一定的规则建立匹配主从对象的连接关系。

由于载荷约束必须在分析设定中起作用,XT框架支持不同载荷约束在不同分析设定中有不同的状态,比如在A分析中使用在B分析中失效; 也支持在给定分析的多个工况中有不同的状态;这些特性通过引入条件实例(XConditionInstance)来实现,一个载荷约束对象可以被多个条件实例所引用。

除此以外,对于不同求解器,同一种载荷约束需要输入的属性也有差异,为了解决这个问题,XT引入了条件扩展(XCndExtension),对于不同的求解器可以绑定对应的条件扩展,这有助于实现一次建模可调用多个求解器完成求解的需求。

载荷约束遵照一定的原则可以自由从XLoad、XConstraint或者XConnection继承扩展,它的参考标识前缀为“CCND”。它们的属性均从ConditionAttribute 继承,因此可以使用统一的接口访问其属性。

Members

Public interface

Protected interface


OrderContainer m_Extensions

条件扩展容器

vector<const XConditionInstance*> * m_pInsts

条件实例数组

XArray<XUniqueObjectID> m_pTargets

应用对象数组,对于连接类,将分别由主对象数组和从对象数组


XCondition(ulong id, int type)

virtual const ConditionAttribute * getAttribute() const = 0

virtual void setAttribute(const ConditionAttribute * atb) = 0

virtual void clear()

virtual const XLoad * toLoad() const

virtual XLoad * toLoad()

virtual const XConstraint * toConstraint() const

virtual XConstraint * toConstraint()

virtual const XConnection * toConnection() const

virtual XConnection * toConnection()

virtual bool checkTargets(ConditionContext *context) const

virtual void instantiate(XConditionInstance * inst, ConditionContext * context) const = 0

virtual bool exportField(const XConditionInstance * inst, const char * fname) const

virtual void clearMarker()

virtual void buildMarker(ConditionContext * context)

virtual void updateMarker(float *lineVertex, float scale)

virtual int getMarkerVertexSize() const

virtual const void * getMarker() const

virtual void write(XBinaryIO * io) const

virtual ErrorCode read(XBinaryIO * io)

virtual void write(XH5IO * io, H5Obj * grp)

virtual bool read(XH5IO * io, H5Obj * grp)

virtual void clearTarget()

void setTargets(XModel * mdl, vector<ItemPtr> * tars, TypeID role = Role_None)

void setTargets(vector<XUniqueObjectID*> * tars, TypeID role = Role_None)

void setTargets(vector<XUniqueObjectID> * tars, TypeID role = Role_None)

const XArray<XUniqueObjectID> * getTargets(TypeID role = Role_None) const

ulong targetCount(TypeID role = Role_None) const

bool checkTargets(const XArray<XUniqueObjectID> * tars, ConditionContext *context) const

virtual void listProperty(vector<ObjPropertyEntry> * prpSheet) const

virtual ~XCondition()

ulong getCoordSysID() const

const vector<const XConditionInstance*> * getInstances() const

vector<const XConditionInstance*> * getInstances()

void removeInstance(const XConditionInstance* inst)

void addInstance(const XConditionInstance*inst)

const XCndExtension * getExtension(TypeID solveType) const

void attachExtension(XCndExtension * ext, CndExtensionManager * extMgr)

virtual int getDataDimension() const

virtual TypeID getDataTargetType() const


void getTargetNodes(ConditionContext *context, vector<const XNode*> * nodes, TypeID role = 0) const

void getTargetElems(ConditionContext *context, vector<const XElement*> * elems) const

void getTargetFaces(ConditionContext *context, vector<const XGeometry*> * faces) const