扩展材料子项时,对象类应从XMaterialEntry继承,材料子项可能包含若干不同的本构模型,需要对不同本构模型声明其参数并实现本构句柄,在任何一个时刻,材料子项只可能是其中的一种本构模型,对本构模型的具体调用均由本构句柄的具体接口实现。需按照下列代码重新实现基类的接口。
class NewMatEntry: public XMaterialEntry
{
DECLARE_MITEM(NewMatEntry)
public:
NewMatEntry(ulong id = 0); //构造函数
void setConstitutiveType(const char * v); //实现本构模型设置接口
};
REGISTER_MITEM(NewMatEntry, "CMATNEWMATENTRY", MaterialEntryManager::ctype(), 0);
NewMatEntry::NewMatEntry(ulong id):XMaterialEntry(id, NewMatEntry::ctype())
{
setConstitutiveType("Isotropic");
}
void Density::setConstitutiveType(const char * v)
{
ResetHandlerVFTBL(m_ConsHdl, v);
}
struct NewMatEntryIsoAttribute: public MaterialEntryAttrib //本构模型声明
{
double dValue;
};
struct NewMatEntryIsoHandler : public TEntryConsHandler<NewMatEntryIsoAttribute> //处理句柄
{
const char * name() { return "Isotropic"; }
bool loadFromJson(JsonNode * consNode);
void exchangeData(ParamList * pl, const char * typeStr);
int dataCount() const;
void reset() { dValue = 0.0;}
};
REGISTER_CONSMODEL(NewMatEntry, NewMatEntryIsoHandler )