freejustin 发表于 2005-6-7 18:42:00

ARX (VC60+ACAD2002)自定义实体类读写出错

本帖最后由 作者 于 2005-6-8 8:52:11 编辑 <br /><br /> 定义成员:<BR>        AcGePoint3d                mFirst, mSecond, mThree, mFour;<BR>        AcGePoint3d                mCenter;



Acad::ErrorStatus cascoCEntity::dwgInFields(AcDbDwgFiler* pFiler)<BR>{<BR>        assertWriteEnabled();<BR>        Acad::ErrorStatus es;


        // Call dwgInFields from AcDbEntity<BR>        if ((es = AcDbEntity::dwgInFields(pFiler)) != Acad::eOk) {<BR>                return es;<BR>        }


        // Read version number.<BR>        Adesk::UInt16 version;<BR>        pFiler-&gt;readItem(&amp;version);<BR>        if (version &gt; VERSION_CASCOCENTITY)<BR>                return Acad::eMakeMeProxy;


        // Read the data members.<BR>        switch (version)<BR>        {<BR>        case (1):<BR>                // TODO: here you can file datamembers not<BR>                //                                               created by the ObjectARX Add-In.<BR>                <FONT color=#ff0000>pFiler-&gt;readItem(&amp;version);        //原来这儿多了一行,读了两次,谢谢xd论坛binbin<BR></FONT>                pFiler-&gt;readItem(&amp;mCenter);<BR>                pFiler-&gt;readItem(&amp;mFirst);<BR>                pFiler-&gt;readItem(&amp;mSecond);<BR>                pFiler-&gt;readItem(&amp;mThree);<BR>                pFiler-&gt;readItem(&amp;mFour);<BR>                break;<BR>        }<BR>        return pFiler-&gt;filerStatus();<BR>}


Acad::ErrorStatus cascoCEntity::dwgOutFields(AcDbDwgFiler* pFiler) const<BR>{<BR>        assertReadEnabled();<BR>        Acad::ErrorStatus es;


        // Call dwgOutFields from AcDbEntity<BR>        if ((es = AcDbEntity::dwgOutFields(pFiler)) != Acad::eOk) {<BR>                return es;<BR>        }


        // Write version number.<BR>        pFiler-&gt;writeItem((Adesk::UInt16) VERSION_CASCOCENTITY);


        // Write the data members.<BR>        // TODO: here you can file datamembers not<BR>        //                                               created by the ObjectARX Add-In.<BR>                pFiler-&gt;writeItem(mCenter);<BR>                pFiler-&gt;writeItem(mFirst);<BR>                pFiler-&gt;writeItem(mSecond);<BR>                pFiler-&gt;writeItem(mThree);<BR>                pFiler-&gt;writeItem(mFour);


        return pFiler-&gt;filerStatus();<BR>}


Acad::ErrorStatus cascoCEntity::dxfInFields(AcDbDxfFiler* pFiler)<BR>{<BR>        assertWriteEnabled();<BR>        struct resbuf rb;


        if ((AcDbEntity::dxfInFields(pFiler) != Acad::eOk) ||<BR>                               !pFiler-&gt;atSubclassData("cascoCEntity"))<BR>                return pFiler-&gt;filerStatus();


        // Read version number.<BR>        pFiler-&gt;readItem(&amp;rb);<BR>        if (rb.restype != AcDb::kDxfInt16) {<BR>                pFiler-&gt;pushBackItem();<BR>                pFiler-&gt;setError(Acad::eInvalidDxfCode,<BR>                                                                                                                                       "nError: expected object version group code %d",<BR>                                                                                                                                               AcDb::kDxfInt16);<BR>                return pFiler-&gt;filerStatus();<BR>        } else {<BR>                Adesk::UInt16 version = rb.resval.rint;<BR>                if (version &gt; VERSION_CASCOCENTITY)<BR>                        return Acad::eMakeMeProxy;<BR>        }


        // TODO: here you can file datamembers not<BR>        //                                               created by the ObjectARX Add-In.


        pFiler-&gt;readItem(&amp;rb);<BR>                       if (rb.restype != AcDb::kDxfXCoord) <BR>                mCenter = asPnt3d(rb.resval.rpoint);


        pFiler-&gt;readItem(&amp;rb);<BR>                       if (rb.restype != AcDb::kDxfXCoord +1) <BR>                mFirst = asPnt3d(rb.resval.rpoint);


        pFiler-&gt;readItem(&amp;rb);<BR>                       if (rb.restype != AcDb::kDxfXCoord +2) <BR>                mSecond = asPnt3d(rb.resval.rpoint);


        pFiler-&gt;readItem(&amp;rb);<BR>                       if (rb.restype != AcDb::kDxfXCoord +3) <BR>                mThree= asPnt3d(rb.resval.rpoint);


        pFiler-&gt;readItem(&amp;rb);<BR>                       if (rb.restype == AcDb::kDxfXCoord +4) <BR>                mFour = asPnt3d(rb.resval.rpoint);


        return pFiler-&gt;filerStatus();<BR>}


Acad::ErrorStatus cascoCEntity::dxfOutFields(AcDbDxfFiler* pFiler) const<BR>{<BR>        assertReadEnabled();<BR>        Acad::ErrorStatus es;


        if ((es = AcDbEntity::dxfOutFields(pFiler)) != Acad::eOk)<BR>                return es;


        // Write subclass marker.<BR>        pFiler-&gt;writeItem(AcDb::kDxfSubclass, "cascoCEntity");


        // Write version number.<BR>        pFiler-&gt;writeItem(AcDb::kDxfInt16, (Adesk::UInt16) VERSION_CASCOCENTITY);


<BR>        // TODO: here you can file datamembers not<BR>        //                                               created by the ObjectARX Add-In.


        pFiler-&gt;writeItem(AcDb::kDxfXCoord, mCenter);<BR>        pFiler-&gt;writeItem(AcDb::kDxfXCoord, mFirst);<BR>        pFiler-&gt;writeItem(AcDb::kDxfXCoord, mSecond);<BR>        pFiler-&gt;writeItem(AcDb::kDxfXCoord, mThree);<BR>        pFiler-&gt;writeItem(AcDb::kDxfXCoord, mFour);


        return es;<BR>}<BR>请问我这个自定义实体类保存读取出错在哪儿?


还有本例中夹点函数、拉伸函数、变换函数以及对象捕捉点函数如何编程?<BR>Acad::ErrorStatus cascoCEntity::getGripPoints(AcGePoint3dArray&amp; gripPoints,<BR>                                                                                                                                                                                                                                                                                                                                                                       AcDbIntArray&amp; osnapModes,<BR>                                                                                                                                                                                                                                                                                                                                                                       AcDbIntArray&amp; geomIds) const<BR>{。。。。}


Acad::ErrorStatus cascoCEntity::getStretchPoints(AcGePoint3dArray&amp; stretchPoints) const<BR>{。。。。}


Acad::ErrorStatus cascoCEntity::moveGripPointsAt(const AcDbIntArray&amp; indices,<BR>                                                                                                                                                                                                                                                                                                                                                                                               const AcGeVector3d&amp; offset)<BR>{。。。。}


Acad::ErrorStatus cascoCEntity::moveStretchPointsAt(const AcDbIntArray&amp; indices,<BR>                                                                                                                                                                                                                                                                                                                                                                                                                       const AcGeVector3d&amp; offset)<BR>{。。。。}


请各位大侠帮帮忙呀,能不能给出一个从实体类派生的例子。谢谢大家。
页: [1]
查看完整版本: ARX (VC60+ACAD2002)自定义实体类读写出错