明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1711|回复: 5

关于插入dwg的问题求助

[复制链接]
发表于 2005-11-9 20:37:00 | 显示全部楼层 |阅读模式
整体思路是这样:
想通过打开一个dwg文件,然后把这个文件作为一个块,插入到新的dwg文件中
我用下面代码,执行后能够在block table record中查询到插入的记录,但就是无法在
AutoCAD2004的界面中显示出来。
 
    char *fname;
    struct resbuf *rb;
    Acad::ErrorStatus error;

    rb = acutNewRb(RTSTR);
    acedGetFileD("Pick a drawing", NULL, "dwg", 0, rb);
    fname = (char*)acad_malloc(strlen(rb->resval.rstring) + 1);
    strcpy(fname, rb->resval.rstring);
    acutRelRb(rb);

    AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
    pDb->readDwgFile(fname);

    AcDbObjectId blockId;
    char blockName[20] = "MyBlock";

    AcDbDatabase *pThisDB;
    pThisDB = acdbHostApplicationServices()->workingDatabase();

    AcGePoint3d ptOrg(10,10,0);
    AcGeScale3d XrefScale(10,10,1);

    pThisDB->insert(blockId, blockName, pDb);

    AcDbBlockReference *pBlkRef = new AcDbBlockReference;
    error = pBlkRef->setBlockTableRecord(blockId);
    error = pBlkRef->setPosition(ptOrg);
    error = pBlkRef->setRotation(0);
    error = pBlkRef->setScaleFactors( XrefScale);

    AcDbBlockTable *pBlockTable;
    error = pDb->getSymbolTable(pBlockTable, AcDb::kForRead);

    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
    pBlockTable->close();
    AcDbObjectId newEntId;
    error = pBlockTableRecord->appendAcDbEntity(newEntId, pBlkRef);
    pBlkRef->close();

    pBlockTableRecord->close();
    delete pDb;

请大虾们指教错误出在哪里?
另外有没有已经实现了的代码供我参考,发送到miraculous@sjtu.edu.cn
不胜感激!
发表于 2005-11-10 01:12:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-11-10 22:11:00 | 显示全部楼层

谢谢,这样实现了插入,但好像并不是作为一个整体块插入的。因为点击插入后的图形后,可以选择单条直线,而不是作为一个整体块选中。

另外在下面代码前得加上 rb = acutNewRb(RTSTR);否则会有warning C4700: 使用的局部变量“rb”尚未初始化

    acedGetFileD("Pick a drawing", NULL, "dwg", 0, rb);
    strcpy(fname, rb->resval.rstring);
    free(rb->resval.rstring);

发表于 2005-11-11 00:32:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-11-11 16:31:00 | 显示全部楼层

pglyxq再指教一下:

我在下列代码中加入了 pDb->wblock(pThisDb, blockId); 可仍然没有实现整个块的插入,请问哪个地方出了问题,谢谢

 AcDbDatabase *pThisDb = acdbHostApplicationServices()->workingDatabase();

 AcDbObjectId blockId;
 char blockName[20] = "MyBlock";

 acdbHostApplicationServices()->workingDatabase()
    ->insert(blockId, blockName, pDb);

 pDb->wblock(pThisDb, blockId);
 
 acdbHostApplicationServices()->workingDatabase()
    ->insert(AcGeMatrix3d::kIdentity, pDb);

发表于 2005-11-20 16:15:00 | 显示全部楼层
我只会2002,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 03:44 , Processed in 0.145354 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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