====== XCondition ====== **//Inherited from//** [[class::domain::nitem|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//** * OrderContainer [[xcondition#m_extensions|m_Extensions]] * vector * [[xcondition#m_pinsts|m_pInsts]] * XArray [[xcondition#m_ptargets|m_pTargets]] **//Public interface//** * [[xcondition#xcondition1|XCondition]](ulong id, int type) * virtual const ConditionAttribute * [[xcondition#getattribute|getAttribute]]() const = 0 * virtual void [[xcondition#setattribute|setAttribute]](const ConditionAttribute * atb) = 0 * virtual void [[xcondition#clear|clear]]() * virtual bool [[xcondition#isuniform|isUniform]]() const * virtual const XLoad * [[xcondition#toload|toLoad]]() const * virtual XLoad * [[xcondition#toload|toLoad]]() * virtual const XConstraint * [[xcondition#toconstraint|toConstraint]]() const * virtual XConstraint * [[xcondition#toconstraint|toConstraint]]() * virtual const XConnection * [[xcondition#toconnection|toConnection]]() const * virtual XConnection * [[xcondition#toconnection|toConnection]]() * virtual bool [[xcondition#checktargets|checkTargets]](ConditionContext *context) const * virtual void [[xcondition#instantiate|instantiate]](XConditionInstance * inst, ConditionContext * context) const = 0 * virtual bool [[xcondition#exportfield|exportField]](const XConditionInstance * inst, const char * fname) const * virtual void [[xcondition#clearmarker|clearMarker]]() * virtual void [[xcondition#buildmarker|buildMarker]](ConditionContext * context) * virtual void [[xcondition#updatemarker|updateMarker]](float *lineVertex, float scale) * virtual int [[xcondition#getmarkervertexsize|getMarkerVertexSize]]() const * virtual const void * [[xcondition#getmarker|getMarker]]() const * virtual void [[xcondition#write|write]](XBinaryIO * io) const * virtual ErrorCode [[xcondition#read|read]](XBinaryIO * io) * virtual void [[xcondition#write|write]](XH5IO * io, H5Obj * grp) * virtual bool [[xcondition#read|read]](XH5IO * io, H5Obj * grp) * virtual void [[xcondition#cleartarget|clearTarget]]() * void [[xcondition#settargets|setTargets]](XModel * mdl, vector * tars, TypeID role = Role_None) * void [[xcondition#settargets|setTargets]](vector * tars, TypeID role = Role_None) * void [[xcondition#settargets|setTargets]](vector * tars, TypeID role = Role_None) * const XArray * [[xcondition#gettargets|getTargets]](TypeID role = Role_None) const * ulong [[xcondition#targetcount|targetCount]](TypeID role = Role_None) const * bool [[xcondition#checktargets|checkTargets]](const XArray * tars, ConditionContext *context) const * virtual void [[xcondition#listproperty|listProperty]](vector * prpSheet) const * virtual [[xcondition#~xcondition|~XCondition]]() * ulong [[xcondition#getcoordsysid|getCoordSysID]]() const * const vector * [[xcondition#getinstances|getInstances]]() const * vector * [[xcondition#getinstances|getInstances]]() * void [[xcondition#removeinstance|removeInstance]](const XConditionInstance* inst) * void [[xcondition#addinstance|addInstance]](const XConditionInstance*inst) * const XCndExtension * [[xcondition#getextension|getExtension]](TypeID solveType) const * void [[xcondition#attachextension|attachExtension]](XCndExtension * ext, CndExtensionManager * extMgr) * virtual void [[xcondition#exchangedata|exchangeData]](ParamList * pl) * virtual int [[xcondition#getdatadimension|getDataDimension]]() const * virtual TypeID [[xcondition#getdatatargettype|getDataTargetType]]() const **//Protected interface//** * void [[xcondition#gettargetnodes|getTargetNodes]](ConditionContext *context, vector * nodes, TypeID role = 0) const * void [[xcondition#gettargetelems|getTargetElems]](ConditionContext *context, vector * elems) const * void [[xcondition#gettargetsurfelems|getTargetSurfElems]](ConditionContext *context, vector * elems) const * void [[xcondition#gettargetfaces|getTargetFaces]](ConditionContext *context, vector * faces) const ---- {{anchor:m_extensions}} **OrderContainer m_Extensions** 条件扩展容器 {{anchor:m_pinsts}} **vector * m_pInsts** 条件实例数组 {{anchor:m_ptargets}} **XArray m_pTargets** 应用对象数组,对于连接类,将分别由主对象数组和从对象数组 ---- {{anchor:xcondition1}} **XCondition(ulong id, int type)** *function: 构造函数 *parameters: - [i]ulong id: 对象ID - [i] int type: 载荷约束类型 *return value: 无 {{anchor:getattribute}} **virtual const ConditionAttribute * getAttribute() const = 0** *function: 虚函数接口,用于获取属性 *parameters: NULL *return value: 载荷约束属性的指针 {{anchor:setattribute}} **virtual void setAttribute(const ConditionAttribute * atb) = 0** *function: 虚函数接口,用于设置属性 *parameters: - [i]const ConditionAttribute * atb: 属性指针 *return value: 无 {{anchor:clear}} **virtual void clear()** *function: 清空应用对象、条件实例以及条件扩展 *parameters: NULL *return value: 无 {{anchor:toload}} **virtual const XLoad * toLoad() const** *function: 虚函数接口,转换为载荷基类 *parameters: NULL *return value: 如属于载荷类,返回载荷基类指针,否则返回NULL {{anchor:toload}} **virtual XLoad * toLoad()** *function: 虚函数接口,转换为载荷基类 *parameters: NULL *return value: 如属于载荷类,返回载荷基类指针,否则返回NULL {{anchor:toconstraint}} **virtual const XConstraint * toConstraint() const** *function: 虚函数接口,转换为约束基类 *parameters: NULL *return value: 如属于约束类,返回约束基类指针,否则返回NULL {{anchor:toconstraint}} **virtual XConstraint * toConstraint()** *function: 虚函数接口,转换为约束基类 *parameters: NULL *return value: 如属于约束类,返回约束基类指针,否则返回NULL {{anchor:toconnection}} **virtual const XConnection * toConnection() const** *function: 虚函数接口,转换为连接基类 *parameters: NULL *return value: 如属于连接类,返回连接基类指针,否则返回NULL {{anchor:toconnection}} **virtual XConnection * toConnection()** *function: 虚函数接口,转换为连接基类 *parameters: NULL *return value: 如属于连接类,返回连接基类指针,否则返回NULL {{anchor:checktargets}} **virtual bool checkTargets(ConditionContext *context) const** *function: 虚函数接口,检查应用对象在当前上下文中是否有效(如应用对象是否存在) *parameters: - [i]ConditionContext *context: 应用载荷约束的上下文 *return value: 如所有应用对象在当前上下文中有效返回true,否则返回false {{anchor:instantiate}} **virtual void instantiate(XConditionInstance * inst, ConditionContext * context) const = 0** *function: 虚函数接口,在当前上下文中在载荷约束实例化到条件实例中,离散到具体网格单元或者节点上 *parameters: - [i]XConditionInstance * inst: 条件实例 - [i] ConditionContext * context: 应用载荷约束的上下文 *return value: 无 {{anchor:exportfield}} **virtual bool exportField(const XConditionInstance * inst, const char * fname) const** *function: 将条件实例的离散数据输出到文件中 *parameters: - [i]const XConditionInstance * inst: 条件实例 - [i] const char * fname: 文件路径 *return value: 如成功输出返回true,否则返回false {{anchor:clearmarker}} **virtual void clearMarker()** *function: 清空视图标记数据 *parameters: NULL *return value: 无 {{anchor:buildmarker}} **virtual void buildMarker(ConditionContext * context)** *function: 在当前上下文中构建视图标记 *parameters: - [i]ConditionContext * context: 应用载荷约束的上下文 *return value: {{anchor:updatemarker}} **virtual void updateMarker(float *lineVertex, float scale)** *function: 更新视图标记的顶点数组 *parameters: - [i]float *lineVertex: 顶点数组 - [i] float scale: 缩放系数 *return value: 无 {{anchor:getmarkervertexsize}} **virtual int getMarkerVertexSize() const** *function: 获取视图标记数据的顶点数 *parameters: NULL *return value: 视图标记数据的顶点数 {{anchor:getmarker}} **virtual const void * getMarker() const** *function: 获取视图标记数据 *parameters: NULL *return value: 视图标记数据指针 {{anchor:write}} **virtual void write(XBinaryIO * io) const** *function: 将对象属性、应用对象信息写入到二进制文件中 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 无 {{anchor:read}} **virtual ErrorCode read(XBinaryIO * io)** *function: 从二进制文件中读取对象属性以及应用对象信息 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 成功读入返回Error_None,否则返回相应错误码 {{anchor:write}} **virtual void write(XH5IO * io, H5Obj * grp)** *function: 将对象属性、应用对象信息写入到HDF5文件中 *parameters: - [i]XH5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 对应的HDF5节点 *return value: 无 {{anchor:read}} **virtual bool read(XH5IO * io, H5Obj * grp)** *function: 从HDF5文件中读取对象属性以及应用对象信息 *parameters: - [i]XH5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 对应的HDF5节点 *return value: 成功读入返回true,否则返回false {{anchor:cleartarget}} **virtual void clearTarget()** *function: 清空应用对象 *parameters: NULL *return value: 无 {{anchor:settargets}} **void setTargets(XModel * mdl, vector * tars, TypeID role = Role_None)** *function: 设置应用对象 *parameters: - [i]XModel * mdl: 应用对象所属模型 - [i] vector * tars: 应用对象指针数组 - [i] TypeID role = Role_None: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 无 {{anchor:settargets}} **void setTargets(vector * tars, TypeID role = Role_None)** *function: 设置应用对象 *parameters: - [i]vector * tars: 应用对象标识指针数组 - [i] TypeID role = Role_None: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 无 {{anchor:settargets}} **void setTargets(vector * tars, TypeID role = Role_None)** *function: 设置应用对象 *parameters: - [i]vector * tars: 应用对象标识数组 - [i] TypeID role = Role_None: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 无 {{anchor:gettargets}} **const XArray * getTargets(TypeID role = Role_None) const** *function: 获取指定角色的应用对象标识数组 *parameters: - [i]TypeID role = Role_None: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 应用对象标识数组 {{anchor:targetcount}} **ulong targetCount(TypeID role = Role_None) const** *function: 获取指定角色的应用对象个数 *parameters: - [i]TypeID role = Role_None: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 定角色的应用对象个数 {{anchor:checktargets}} **bool checkTargets(const XArray * tars, ConditionContext *context) const** *function: 检查应用对象在当前上下文中是否有效(如应用对象是否存在) *parameters: - [i]const XArray * tars: 应用对象标识数组 - [i] ConditionContext *context: 应用载荷约束的上下文 *return value: 如所有应用对象在当前上下文中有效返回true,否则返回false {{anchor:listproperty}} **virtual void listProperty(vector * prpSheet) const** *function: 列举对象的属性清单 *parameters: - [i]vector * prpSheet: 属性清单数组 *return value: 无 {{anchor:~xcondition}} **virtual ~XCondition()** *function: 析构函数 *parameters: NULL *return value: 无 {{anchor:getcoordsysid}} **ulong getCoordSysID() const** *function: 获取参考坐标系ID *parameters: NULL *return value: 参考坐标系ID,如没有参考局部坐标系,返回0 {{anchor:getinstances}} **const vector * getInstances() const** *function: 获取条件实例数组 *parameters: NULL *return value: 条件实例数组 {{anchor:getinstances}} **vector * getInstances()** *function: 获取条件实例数组 *parameters: NULL *return value: 条件实例数组 {{anchor:removeinstance}} **void removeInstance(const XConditionInstance* inst)** *function: 删除条件实例 *parameters: - [i]const XConditionInstance* inst: 条件实例指针 *return value: 无 {{anchor:addinstance}} **void addInstance(const XConditionInstance*inst)** *function: 添加条件实例 *parameters: - [i]const XConditionInstance*inst: 条件实例指针 *return value: 无 {{anchor:getextension}} **const XCndExtension * getExtension(TypeID solveType) const** *function: 获取指定求解器类型的条件扩展 *parameters: - [i]TypeID solveType: 求解器类型 *return value: 条件扩展 {{anchor:attachextension}} **void attachExtension(XCndExtension * ext, CndExtensionManager * extMgr)** *function: 绑定条件扩展 *parameters: - [i]XCndExtension * ext: 条件扩展 - [i] CndExtensionManager * extMgr: 条件扩展管理器 *return value: 无 {{anchor:getdatadimension}} **virtual int getDataDimension() const** *function: 返回载荷约束的数据维度 *parameters: NULL *return value: 载荷约束的数据维度(如压力返回1,集中力返回3) {{anchor:getdatatargettype}} **virtual TypeID getDataTargetType() const** *function: 返回应用的离散目标类型(节点或者单元) *parameters: NULL *return value: 应用的离散目标类型 ---- {{anchor:gettargetnodes}} **void getTargetNodes(ConditionContext *context, vector * nodes, TypeID role = 0) const** *function: 获取应用对象在给定上下文中的离散节点数组 *parameters: - [i]ConditionContext *context: 应用载荷约束的上下文 - [o] vector * nodes: 节点数组 - [i] TypeID role = 0: 应用对象的角色(在连接类中需指定是主角色还是从角色) *return value: 无 {{anchor:gettargetelems}} **void getTargetElems(ConditionContext *context, vector * elems) const** *function: 获取应用对象在给定上下文中的离散单元数组 *parameters: - [i]ConditionContext *context: 应用载荷约束的上下文 - [o] vector * elems: 离散单元数组 *return value: 无 {{anchor:gettargetfaces}} **void getTargetFaces(ConditionContext *context, vector * faces) const** *function: 获取应用对象在给定上下文中的面组 *parameters: - [i]ConditionContext *context: 应用载荷约束的上下文 - [i] vector * faces: 面组 *return value: 无