找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1190|回复: 7

[求助]:关于创建块引用实体的,高手帮忙看一下为什么显示不出来

[复制链接]
发表于 2006-4-23 14:14:29 | 显示全部楼层 |阅读模式

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

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

×
请高手帮忙分析一下,为什么运行后图块显示不出来,谢谢了!

        AcDbBlockTableRecord *pLtBlockTableRec
                =new AcDbBlockTableRecord();
        pLtBlockTableRec->setName("ASDK_BLOCK_LT2");
        //获取块表
        //
        AcDbBlockTable *pBlockTable=NULL;
        acdbCurDwg()->getSymbolTable(pBlockTable,AcDb::kForWrite);
        //将新建的块表记录加入到块表中
        //
        AcDbObjectId blockId;
        pBlockTable->add(blockId,pLtBlockTableRec);
        pBlockTable->close();

acedGetPoint(NULL,"请选择圆形冷铁的圆心",center);

  AcDbCircle *pCircle=new AcDbCircle;
        CopyPoint(basePoint,center);
        pCircle->setCenter(basePoint);
        pCircle->setRadius(lt2_radius);
        //AcDbCircle *pCir;
        //pCir=new AcDbCircle(center,(0,0,1),lt2_radius);

        if (acdbEntLast(ent_lt2[0])!=RTNORM) {
                acdbFail("\nFail create last entity.");
                return;
        }
        //
        AcDbObjectId circleId;
        pLtBlockTableRec->appendAcDbEntity(circleId,pCircle);



    //画两条交叉线并将它们作为部件加入块表中
        AcGePoint3d pt1,pt2,pt3,pt4;

        acutPolar(center,PI/4,lt2_radius,asDblArray(pt1));//获得与圆心成45度角的圆周点
        acutPolar(center,5*PI/4,lt2_radius,asDblArray(pt2));
        acutPolar(center,3*PI/4,lt2_radius,asDblArray(pt3));
        acutPolar(center,7*PI/4,lt2_radius,asDblArray(pt4));

        AcDbLine *pLine;

        pLine=new AcDbLine(pt1,pt2);
        AcDbObjectId lineId1;
        //AddEntityToDbs(pLine);
        pLtBlockTableRec->appendAcDbEntity(lineId1,pLine);
        pLine->close();
       
        pLine=new AcDbLine(pt3,pt4);
        AcDbObjectId lineId2;
        //AddEntityToDbs(pLine);
        pLtBlockTableRec->appendAcDbEntity(lineId2,pLine);
        pLine->close();
        pLtBlockTableRec->close();
AcDbBlockReference *pBlkRef=new AcDbBlockReference;
        pBlkRef->setBlockTableRecord(blockId);

        struct resbuf to,from;
        from.restype=RTSHORT;
        from.resval.rint=1;
        to.restype=RTSHORT;
        to.resval.rint=0;
        AcGeVector3d normal(0.0,0.0,1.0);
        acedTrans(&(normal.x),&from,&to,Adesk::kTrue,&(normal.x));

        pBlkRef->setPosition(basePoint);
        pBlkRef->setRotation(0.0);
        pBlkRef->setNormal(normal);

        acdbCurDwg()->getSymbolTable(pBlockTable,AcDb::kForRead);
        AcDbBlockTableRecord *pBlockTableRec;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRec,AcDb::kForWrite);
        pBlockTable->close();

        AcDbObjectId newEntId;
        pBlockTableRec->appendAcDbEntity(newEntId,pBlkRef);
        pBlockTableRec->close();

        INSERT("ASDK_BLOCK_LT2",center,1,"0");
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-23 19:20:46 | 显示全部楼层
pBlockTable->add(blockId,pLtBlockTableRec);
看看是不是把这句放到块内图形添加的代码后
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-23 19:46:12 | 显示全部楼层
...
AcDbObjectId newEntId;
pBlockTableRec->appendAcDbEntity(newEntId,pBlkRef);
pBlockTableRec->close();

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

使用道具 举报

 楼主| 发表于 2006-4-23 20:08:51 | 显示全部楼层
刚才我试了
出现了崩溃
有提示:Invalid  type in acutBulidList() arg#g
还有一个图C:\Documents and Settings\lihui\桌面[/IMG]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-23 22:50:53 | 显示全部楼层
INSERT("ASDK_BLOCK_LT2",center,1,"0"); 这句干什么用?
if (acdbEntLast(ent_lt2[0])!=RTNORM) {
acdbFail("\nFail create last entity.");
return;
}
这些又是干什么的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-24 09:03:44 | 显示全部楼层
INSERT("ASDK_BLOCK_LT2",center,1,"0");这句话是插入刚才我定义的块,INSERT是我自定义的宏!这个宏没错,但是后面的参数有问题,我调试了就到这句出问题,但不知道该怎么改
if (acdbEntLast(ent_lt2[0])!=RTNORM) {
acdbFail("\nFail create last entity.");
return;
}这个是获得最后一个实体啊,没有错!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-25 09:17:12 | 显示全部楼层
好像没有问题,是不是对块的操作有误.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-25 09:35:07 | 显示全部楼层
我已经找到了INSERT("ASDK_BLOCK_LT2",center,1,"0");这句是多余的,因为我已经将块引用加入到模型空间中了!谢谢大家!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 17:38 , Processed in 0.443936 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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