![]() |
【转帖】arx (vc60+acad2)自定义实体类读写出错
arx (vc60+acad2)自定义实体类读写出错
arx (vc60+acad2)自定义实体类读写出错 定义成员: acgepoint3d mfirst, msecond, mthree, mfour; acgepoint3d mcenter; acad::errorstatus cascocentity::dwginfields(acdbdwgfiler* pfiler) { assertwriteenabled(); acad::errorstatus es; // call dwginfields from acdbentity if ((es = acdbentity::dwginfields(pfiler)) != acad::eok) { return es; } // read version number. adesk::uint16 version; pfiler->readitem(&version); if (version > version_cascocentity) return acad::emakemeproxy; // read the data members. switch (version) { case (1): // todo: here you can file datamembers not // created by the objectarx add-in. pfiler->readitem(&version); //原来这儿多了一行,读了两次,谢谢xd论坛binbin pfiler->readitem(&mcenter); pfiler->readitem(&mfirst); pfiler->readitem(&msecond); pfiler->readitem(&mthree); pfiler->readitem(&mfour); break; } return pfiler->filerstatus(); } acad::errorstatus cascocentity::dwgoutfields(acdbdwgfiler* pfiler) const { assertreadenabled(); acad::errorstatus es; // call dwgoutfields from acdbentity if ((es = acdbentity::dwgoutfields(pfiler)) != acad::eok) { return es; } // write version number. pfiler->writeitem((adesk::uint16) version_cascocentity); // write the data members. // todo: here you can file datamembers not // created by the objectarx add-in. pfiler->writeitem(mcenter); pfiler->writeitem(mfirst); pfiler->writeitem(msecond); pfiler->writeitem(mthree); pfiler->writeitem(mfour); return pfiler->filerstatus(); } acad::errorstatus cascocentity::dxfinfields(acdbdxffiler* pfiler) { assertwriteenabled(); struct resbuf rb; if ((acdbentity::dxfinfields(pfiler) != acad::eok) || !pfiler->atsubclassdata("cascocentity")) return pfiler->filerstatus(); // read version number. pfiler->readitem(&rb); if (rb.restype != acdb::kdxfint16) { pfiler->pushbackitem(); pfiler->seterror(acad::einvaliddxfcode, "nerror: expected object version group code %d", acdb::kdxfint16); return pfiler->filerstatus(); } else { adesk::uint16 version = rb.resval.rint; if (version > version_cascocentity) return acad::emakemeproxy; } // todo: here you can file datamembers not // created by the objectarx add-in. pfiler->readitem(&rb); if (rb.restype != acdb::kdxfxcoord) mcenter = aspnt3d(rb.resval.rpoint); pfiler->readitem(&rb); if (rb.restype != acdb::kdxfxcoord +1) mfirst = aspnt3d(rb.resval.rpoint); pfiler->readitem(&rb); if (rb.restype != acdb::kdxfxcoord +2) msecond = aspnt3d(rb.resval.rpoint); pfiler->readitem(&rb); if (rb.restype != acdb::kdxfxcoord +3) mthree= aspnt3d(rb.resval.rpoint); pfiler->readitem(&rb); if (rb.restype == acdb::kdxfxcoord +4) mfour = aspnt3d(rb.resval.rpoint); return pfiler->filerstatus(); } acad::errorstatus cascocentity::dxfoutfields(acdbdxffiler* pfiler) const { assertreadenabled(); acad::errorstatus es; if ((es = acdbentity::dxfoutfields(pfiler)) != acad::eok) return es; // write subclass marker. pfiler->writeitem(acdb::kdxfsubclass, "cascocentity"); // write version number. pfiler->writeitem(acdb::kdxfint16, (adesk::uint16) version_cascocentity); // todo: here you can file datamembers not // created by the objectarx add-in. pfiler->writeitem(acdb::kdxfxcoord, mcenter); pfiler->writeitem(acdb::kdxfxcoord, mfirst); pfiler->writeitem(acdb::kdxfxcoord, msecond); pfiler->writeitem(acdb::kdxfxcoord, mthree); pfiler->writeitem(acdb::kdxfxcoord, mfour); return es; } 请问我这个自定义实体类保存读取出错在哪儿? 还有本例中夹点函数、拉伸函数、变换函数以及对象捕捉点函数如何编程? acad::errorstatus cascocentity::getgrippoints(acgepoint3darray& grippoints, acdbintarray& osnapmodes, acdbintarray& geomids) const {。。。。} acad::errorstatus cascocentity::getstretchpoints(acgepoint3darray& stretchpoints) const {。。。。} acad::errorstatus cascocentity::movegrippointsat(const acdbintarray& indices, const acgevector3d& offset) {。。。。} acad::errorstatus cascocentity::movestretchpointsat(const acdbintarray& indices, const acgevector3d& offset) {。。。。} 请各位大侠帮帮忙呀,能不能给出一个从实体类派生的例子。谢谢大家。 |
| 所有的时间均为北京时间。 现在的时间是 05:43 PM. |