User Tools

Site Tools


reference:loadextension

载荷扩展

扩展载荷类边界条件时,对象类应从XLoad继承,需按照下列代码重新实现基类的接口。

class NewLoad : public XLoad
{
	DECLARE_CITEM(NewLoad)  
	friend XConditionInstance;
public:
	NewLoad (ulong id);
	~NewLoad ();
	
	const ConditionAttribute * getAttribute() const { return attribute(); }
	const NewLoadAttribute * attribute() const {return &m_Atb;}
	void setAttribute(const ConditionAttribute * atb) {m_Atb = *(NewLoadAttribute *)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<ObjPropertyEntry> * prpSheet) const;
private:
	NewLoadAttribute m_Atb;
	XArray<DoubleArrowMarker> * m_pMarkerArr = 0;
};
  • 注册对象定义,它被归为Domain_Condition域,所以被ConditionManager管理,DECLARE_CITEM(NewLoad)是声明, 类型标识前缀为“CCND”,其实现通过宏按照如下形式实现:
REGISTER_CITEM(NewLoad, "CCNDNEWLOAD", ConditionManager::ctype(), 0);
  • 定义载荷属性,每个新扩展的载荷都有自己的属性(NewLoadAttribute),它从ConditionAttribute继承:
struct NewLoadAttribute: public ConditionAttribute
{
	double dValue;
};
  • 重新实现属性的接口getAttribute、listProperty以及专有属性接口
	const NewLoadAttribute * attribute() const {return &m_Atb;}
  • 重新实现数据维度的接口getDataDimension
  • 重新实现实例化接口instantiate,根据载荷的类型将应用对象离散到网格的节点或者单元上(如果是全局设置,则不需要应用对象),然后根据属性设定构建实例化数据数组,将值应用到节点或者单元上,以方便求解的时候输出到求解文件中。
  • 重新实现载荷标记的接口clearMarker、buildMarker、updateMarker、getMarkerVertexSize,标记的视图数据由成员变量m_pMarkerArr保持,开发者需要根据实际情况决定标记的样式,标记视图数据的顶点数以及顶点数组都按照样式构建获取得到。
	XArray<DoubleArrowMarker> * m_pMarkerArr = 0;
  • 重新实现读写对象数据的接口read、write
reference/loadextension.txt · Last modified: 2023/05/06 07:01 (external edit)