====== 单元属性扩展 ======
扩展单元属性时,对象类应从XProperty继承,需按照下列代码重新实现基类的接口。
class NewPrp: public XProperty
{
DECLARE_CITEM(NewPrp)
public:
NewPrp(ulong id = 0);
~NewPrp();
const PropertyAttribute * getAttribute() const { return attribute(); }
const NewPrpAttribute * attribute() const { return &m_Atb; }
void setAttribute(const PropertyAttribute * atb) { m_Atb = *(NewPrpAttribute*)atb; }
ulong getMaterialId() const { return m_Atb.ulMatId; }
void setMaterial(ulong matId) { m_Atb.ulMatId = matId; }
void write(XBinaryIO * io);
ErrorCode read(XBinaryIO * io);
void write(XH5IO * io, H5Obj * grp);
bool read(XH5IO * io, H5Obj * dset);
private:
NewPrpAttribute m_Atb;
};
* 注册对象定义,它被归为Domain_Property域,所以被PropertyManager管理,DECLARE_CITEM(NewPrp)是声明, 类型标识前缀为“CPRP”,其实现通过宏按照如下形式实现:
REGISTER_CITEM(NewPrp, "CPRPNEWPRP", PropertyManager::ctype(), 0);
* 定义单元属性,每个新扩展的单元属性都有自己的属性(NewPrpAttribute),它从PropertyAttribute继承:
struct NewPrpAttribute: public PropertyAttribute
{
double dValue;
};
* 重新实现材料ID的访问设置接口getMaterialId、setMaterialId
* 重新实现属性的接口getAttribute、listProperty以及专有属性接口
const NewPrpAttribute * attribute() const {return &m_Atb;}
* 重新实现读写对象数据的接口read、write