AutoCAD中“此图形中的一个或多个对象无法保存为指定格式”触发条件之一

最近更新于 2024-09-04 21:52

在尝试保存 dwg 图纸文件的时候出现:
此图形中的一个或多个对象无法保存为指定格式。操作未完成,因此未创建任何文件。
file
导致文件没法保存。

这个错误是我在测试自己编写的 ObjectARX 扩展程序时触发的。触发情景:
我这里的目标处理对象是 AcDbDimension 标注对象,在判断对象不是 AcDbDimension 后就执行 continue 跳过本次循环了。触发上面错误的情况就是选择了非标注对象,按照条件此时执行 continue,就结束本轮循环了,然后就遗忘了关闭 pEnt 对象,因此就会出现上面的错误。解决办法就是在 continue 之前,先 pEnt->close() 关闭打开的实体对象。

    ads_name  ent;
    ads_point pt;
    AcDbObjectId objId;
    AcDbEntity* pEnt = nullptr;

    while (true)
    {
        int ret = acedEntSel(L"选择一个标注对象(按Esc或Enter取消命令):\n", ent, pt);
        if (ret != RTNORM)
        {
            acutPrintf(L"取消命令。\n");
            break;
        }

        if (acdbGetObjectId(objId, ent) != Acad::eOk)
        {
            acutPrintf(L"获取对象ID失败。\n");
            continue;
        }

        if (acdbOpenObject(pEnt, objId, AcDb::kForWrite) != Acad::eOk)
        {
            acutPrintf(L"打开对象失败。\n");
            continue;
        }

        if (!pEnt->isKindOf(AcDbDimension::desc()))
        {
            acutPrintf(L"选择的不是标注对象。\n");
            continue;
        }

        AcDbDimension* pDim = AcDbDimension::cast(pEnt);
        pFun(pDim);
        pEnt->close();
    }
AutoCAD中“此图形中的一个或多个对象无法保存为指定格式”触发条件之一
Scroll to top