====== 分析设定的扩展 ====== 扩展分析设定时,对象类应从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(可选) * 实现其他该分析所需要的方法