====== 分析设定的扩展 ======
扩展分析设定时,对象类应从XAnalysis继承,需按照下列代码重新实现基类的接口。
class NewAna: public XAnalysis
{
DECLARE_CITEM(NewAna)
public:
NewAna(ulong id);
~NewAna();
const AnalysisAttribute * getAttribute() const { return attribute(); }
const NewAnaAttribute * attribute() const { return &m_Atb; }
void setAttribute(const AnalysisAttribute* atb) { m_Atb.assign(atb); }
void write(XBinaryIO * io);
ErrorCode read(XBinaryIO * io, ModelManager* meshMgr, LoadCaseManager * mgr);
bool checkDataCompleteness() const;
void listProperty(std::vector * prpSheet) const;
bool isResultOutput(TypeID rtype) const;
const TypeID * getOutputOptions() const { return m_Atb.outputFields.data(); }
int countOutputOptions() const { return m_Atb.outputFields.size(); }
private:
NewAnaAttribute m_Atb;
};
* 注册对象定义,它被归为Domain_Analysis域,所以被AnalysisManager管理,DECLARE_CITEM(NewAna)是声明,类型标识前缀为“CANA”, 其实现通过宏按照如下形式实现:
REGISTER_CITEM(NewAna, "CANANEWANA", AnalysisManager::ctype(), 0);
* 定义分析设定的属性,每个新扩展的分析设定都有自己的属性(NewAnaAttribute),它从AnalysisAttribute继承,分析设定的属性一般都包含有结果输出的选项(也可以根据实际情况省略):
struct NewAnaAttribute: public AnalysisAttribute
{
double dValue;
XArray outputFields;
};
* 重新实现属性的接口getAttribute、listProperty以及专有属性接口
const NewAnaAttribute* attribute() const {return &m_Atb;}
* 重新实现接口checkDataCompleteness以检查该分析所必须的数据是否完备
* 重新实现读写对象数据的接口read、write(包含二进制文件和HDF5文件)
* 根据需要实现结果输出的接口getOutputOptions、countOutputOptions(可选)
* 实现其他该分析所需要的方法