CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

具有顺序依赖性的 dxfInFields() 的示例代码

2022-12-31 22:17| 发布者: admin| 查看: 260| 评论: 0|来自: AutoCAD

此代码示例演示如何编写与顺序相关的函数。dxfInFields()

Acad::ErrorStatus
AsdkPoly::dxfInFields(AcDbDxfFiler* filer)
{
    assertWriteEnabled();
    if ((AcDbCurve::dxfInFields(filer) != Acad::eOk) ||
        !filer->atSubclassData("AsdkPoly") )
    {
        return filer->filerStatus();
    }
    try
    {
        struct resbuf rb;
        // Object Version
        Adesk::Int16 version;
        filer->readItem(&rb);
        if (rb.restype != AcDb::kDxfInt16) 
            throw AcDb::kDxfInt16;
        version = rb.resval.rint;
        if (version > VERSION)
            return Acad::eMakeMeProxy;
        if (version == 1)
        {
            AcGePoint3d cent,sp;
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfXCoord) 
                throw AcDb::kDxfXCoord
                cent = asPnt3d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfXCoord + 1) 
                throw AcDb::kDxfXCoord + 1;
            sp = asPnt3d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfInt32) 
                throw AcDb::kDxfInt32;
            mNumSides = rb.resval.rlong;
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfNormalX) 
                throw AcDb::kDxfNormalX
                mPlaneNormal = asVec3d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfText) 
                throw AcDb::kDxfText;
            setName(rb.resval.rstring);
            filer->readItem(&rb);
            if (rb.restype != kDxfHardPointerId) 
                throw AcDb::kDxfHardPointerId;
            acdbGetObjectId(mTextStyle, rb.resval.rlname);
            // Convert data from old format.
            acdbWcs2Ecs(asDblArray(cent),asDblArray(cent),
                asDblArray(mPlaneNormal),Adesk::kFalse);
            mCenter.set(cent.x,cent.y);
            mElevation = cent.z;
            acdbWcs2Ecs(asDblArray(sp),asDblArray(sp),
                asDblArray(mPlaneNormal),Adesk::kFalse);
            mStartPoint.set(sp.x,sp.y);
            assert(mElevation == sp.z);
        } 
        else if (version == 2)
        {
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfXCoord) 
                throw AcDb::kDxfXCoord;
            mCenter = asPnt2d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfXCoord + 1) 
                throw AcDb::kDxfXCoord + 1;
            mStartPoint = asPnt2d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfInt32) 
                throw AcDb::kDxfInt32
                mNumSides = rb.resval.rlong;
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfNormalX)
                throw AcDb::kDxfNormalX;
            mPlaneNormal = asVec3d(rb.resval.rpoint);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfText) 
                throw AcDb::kDxfText
                setName(rb.resval.rstring);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfHardPointerId) 
                throw AcDb::kDxfHardPointerId;
            acdbGetObjectId(mTextStyle, rb.resval.rlname);
            filer->readItem(&rb);
            if (rb.restype != AcDb::kDxfReal) 
                throw AcDb::kDxfReal;
            mElevation = rb.resval.rreal;
        } 
        else assert(false);
    }
    catch (AcDb::DxfCode code)
    {
        filer->pushBackItem();
        filer->setError(Acad::eInvalidDxfCode,
            "\nError: expected group code %d", code);
        return filer->filerStatus();
    }
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 15:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部