====== 连接扩展 ====== 扩展连接类边界条件时,对象类应从XConnection继承,需按照下列代码重新实现基类的接口。 class NewConnect : public XConnection { DECLARE_CITEM(NewConnect) friend XConditionInstance; public: NewConnect(ulong id); ~NewConnect(); const ConditionAttribute * getAttribute() const { return attribute(); } const NewConnectAttribute * attribute() const {return &m_Atb;} void setAttribute(const ConditionAttribute * atb) {m_Atb = *(NewConnectAttribute *)atb;} void instantiate(XConditionInstance * inst, ConditionContext * context) const; void clearMarker() { if(m_pMarkerArr) m_pMarkerArr->resize(0); } void buildMarker(ConditionContext * context); void updateMarker(float *lineVertex,float scale); const void * getMarker() const {return m_pMarkerArr;} int getMarkerVertexSize() const {;} void write(XBinaryIO * io) const; ErrorCode read(XBinaryIO * io); int getDataDimension() const; void listProperty(std::vector * prpSheet) const; private: NewConnectAttribute m_Atb; XArray * m_pMarkerArr = 0; }; * 注册对象定义,它被归为Domain_Condition域,所以被ConditionManager管理,DECLARE_CITEM(NewConnect)是声明, 其实现通过宏按照如下形式实现: REGISTER_CITEM(NewConnect, "CCNDNEWCONNECT", ConditionManager::ctype(), 0); * 定义载荷属性,每个新扩展的载荷都有自己的属性(NewConnectAttribute),它从ConnectionAttribute继承: struct NewConnectAttribute: public ConnectionAttribute { double dValue; }; * 重新实现属性的接口getAttribute、listProperty以及专有属性接口 const NewConnectAttribute * attribute() const {return &m_Atb;} * 重新实现数据维度的接口getDataDimension * 重新实现实例化接口instantiate,根据连接的类型将应用对象离散到网格的节点或者单元上,与约束和载荷不一样,连接类条件的应用对象包含主从关系,在大多数情况下需要先找出主从节点(单元)的匹配关系,然后根据属性设定构建实例化数据数组,最后将值应用到节点或者单元上,以方便求解的时候输出到求解文件中。 * 重新实现载荷标记的接口clearMarker、buildMarker、updateMarker、getMarkerVertexSize,标记的视图数据由成员变量m_pMarkerArr保持,开发者需要根据实际情况决定标记的样式,标记视图数据的顶点数以及顶点数组都按照样式构建获取得到。 XArray * m_pMarkerArr = 0; * 重新实现读写对象数据的接口read、write