明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1915|回复: 2

[求助] 一个简单程序的收尾问题

[复制链接]
发表于 2010-8-27 13:27:00 | 显示全部楼层 |阅读模式
用向导创建一个ARX程序,现在就面临最后的close 但是不知道怎么close 。
编译能通过,但是在AutoCAD里面运行的话,就会导致CAD发生致使错误而关闭

请问 ,如何关闭?

附:源程序

//设定直线的两个端点
//并创建一个指向对象的指针
AcGePoint3d p1Start(50,20,0),p2Start(50,40,0),
p3Start(50,60,0),p4Start(158,80,0),pxStart(100,0,0);
AcGePoint3d p1End(150,20,0),p2End(150,40,0),
p3End(150,60,0),p4End(150,80,0),pxEnd(100,100,0);


AcDbLine *p1l=new AcDbLine(p1Start,p1End);

AcDbLine *p2l=new AcDbLine(p2Start,p2End);

AcDbLine *p3l=new AcDbLine(p3Start,p3End);
AcDbLine *p4l=new AcDbLine(p4Start,p4End);

AcDbLine *pxl=new AcDbLine(pxStart,pxEnd);


////直线的块表指针
AcDbBlockTable *p1BT,*p2BT,*p3BT,*p4BT,*pxBT;

acdbHostApplicationServices()->workingDatabase()
->getBlockTable(p1BT,AcDb::kForRead);

acdbHostApplicationServices()->workingDatabase()
->getBlockTable(p2BT,AcDb::kForRead);

acdbHostApplicationServices()->workingDatabase()
->getBlockTable(p3BT,AcDb::kForRead);

acdbHostApplicationServices()->workingDatabase()
->getBlockTable(p4BT,AcDb::kForRead);

acdbHostApplicationServices()->workingDatabase()
->getBlockTable(pxBT,AcDb::kForRead);


//直线的块表记录的指针
AcDbBlockTableRecord *p1BTR,*p2BTR,*p3BTR,*p4BTR,*pxBTR;


p1BT->getAt(ACDB_MODEL_SPACE,p1BTR,AcDb::kForWrite);

p2BT->getAt(ACDB_MODEL_SPACE,p2BTR,AcDb::kForWrite);

p3BT->getAt(ACDB_MODEL_SPACE,p3BTR,AcDb::kForWrite);

p4BT->getAt(ACDB_MODEL_SPACE,p4BTR,AcDb::kForWrite);

pxBT->getAt(ACDB_MODEL_SPACE,pxBTR,AcDb::kForWrite);

//线 将AcDbLine类的对象添加到块表记录中 
AcDbObjectId l1Id,l2Id,l3Id,l4Id,lxId;


p1BTR->appendAcDbEntity(l1Id,p1l);
p2BTR->appendAcDbEntity(l2Id,p2l);
p3BTR->appendAcDbEntity(l3Id,p3l);
p4BTR->appendAcDbEntity(l4Id,p4l);
pxBTR->appendAcDbEntity(lxId,pxl);

/////收尾工作////////

// 关闭第一个图形数据库的各种对象 
p1BT->close();
p1l->close;

p2BT->close();
p2l->close();

p3BT->close();
p3l->close();

p4BT->close();
p4l->close();

pxBT->close();
pxl->close();



发表于 2010-8-30 10:24:00 | 显示全部楼层

/*冗余过多

AcDbBlockTableRecord *p1BTR,*p2BTR,*p3BTR,*p4BTR,*pxBTR;

p1BT->getAt(ACDB_MODEL_SPACE,p1BTR,AcDb::kForWrite);
p2BT->getAt(ACDB_MODEL_SPACE,p2BTR,AcDb::kForWrite);
p3BT->getAt(ACDB_MODEL_SPACE,p3BTR,AcDb::kForWrite);
p4BT->getAt(ACDB_MODEL_SPACE,p4BTR,AcDb::kForWrite);
pxBT->getAt(ACDB_MODEL_SPACE,pxBTR,AcDb::kForWrite);
*/
 
模型空间是特殊的块表记录对吧,你创建这么多指针操作一条记录是不是太冗余了?
这些容易导致你后面问题的产生,我们看看下面的代码:
 
// 关闭第一个图形数据库的各种对象 
p1BT->close(); //你利用此句已经将模型空间关闭了
p1l->close;

p2BT->close(); //你利用此句又将模型空间关闭一次,问题就出现了。
p2l->close();

p3BT->close();
p3l->close();

p4BT->close();
p4l->close();

pxBT->close();
pxl->close();
 
你应该先看看ObjectARX中的例子,然后再编写自己的代码,这样你会对操作CAD有一个新的认识。
 楼主| 发表于 2010-8-30 11:07:00 | 显示全部楼层
又增加了一个新的知识点  这个问题困惑了很久,原来是块表的理解不够

感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:28 , Processed in 0.244920 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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