====== 约束扩展 ======
扩展约束类边界条件时(约束是指单点约束),对象类应从XConstraint继承,需按照下列代码重新实现基类的接口。
class XT_EXT_DOMAIN NewSPC : public XConstraint
{
DECLARE_CITEM(NewSPC)
public:
NewSPC (ulong id);
~NewSPC ();
const ConditionAttribute * getAttribute() const { return attribute(); }
const NewSPC Attribute * attribute() const {return &m_Atb;}
void setAttribute(const ConditionAttribute * atb) {m_Atb = *(NewSPC Attribute*)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:
NewSPCAttribute m_Atb;
XArray * m_pMarkerArr = 0;
};
* 注册对象定义,DECLARE_CITEM(NewSPC)是声明, 其实现通过宏按照如下形式实现:
REGISTER_CITEM(NewSPC, "CCNDNEWSPC", ConditionManager::ctype(), 0);
* 定义约束属性,每个新扩展的约束都有自己的属性(NewSPCAttribute),它从ConstraintAttribute继承:
struct NewSPCAttribute: public ConstraintAttribute
{
double dValue;
};
* 重新实现属性的接口getAttribute、listProperty以及专有属性接口
const NewSPCAttribute * attribute() const {return &m_Atb;}
* 重新实现数据维度的接口getDataDimension
* 重新实现实例化接口instantiate,约束一般应用到网格的节点上,根据属性设定构建实例化数据数组,将值应用到节点,以方便求解的时候输出到求解文件中。
* 重新实现载荷标记的接口clearMarker、buildMarker、updateMarker、getMarkerVertexSize,标记的视图数据由成员变量m_pMarkerArr保持,开发者需要根据实际情况决定标记的样式,标记视图数据的顶点数以及顶点数组都按照样式构建获取得到。
XArray * m_pMarkerArr = 0;
* 重新实现读写对象数据的接口read、write