找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 584|回复: 2

[求助]:ARX (VC60+ACAD2002)自定义实体类读写出错

[复制链接]
发表于 2005-6-7 18:32:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
定义成员:
        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);
                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)
{。。。。}

请各位大侠帮帮忙呀,求求你们了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-7 19:17:32 | 显示全部楼层
pFiler->readItem(&version);[/COLOR]
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);[/COLOR]

读了两次吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-8 08:54:00 | 显示全部楼层
谢谢binbin的解答,问题就是出在这儿。有空的时候看看这个帖子http://www.mjtd.com/bbs/dispbbs. ... ID=38142&page=1,方便的化给俺一个从entity派生的例子。谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 04:36 , Processed in 0.187203 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表