明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2837|回复: 8

怎样做一个块(Block),这个问题这么难么?,很着急大家帮忙看看吧 ?

[复制链接]
发表于 2006-7-26 11:36:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2006-7-27 11:27:32 编辑

请问怎样可以使用ARX做一个Block块?

为什么我向 块 表中插入一个AcDbBlockRecord记录,不能自动的出现AcDbBlockBegin

和AcDbBlockEnd标志啊

我看到有一本书上写着,当关闭AcDbBlockRecord记录的时候会 自动加上那两个标记的啊??

我做的块为什么没有AcDbBlockBegin和AcDbBlockEnd?

大家要是做自定义的块(包含几个实体,比如一个圆和一个直线)都是怎么做啊?

发表于 2006-7-27 20:04:00 | 显示全部楼层

这个问题在 SDK 上应该都有吧,在任何一本书上都是有例子的吧,

 

 楼主| 发表于 2006-7-28 09:26:00 | 显示全部楼层

我也是按照书上的例子写的阿,

而且我编译了书上的例子,也没有那两个标记阿

发表于 2006-7-28 11:41:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2006-7-28 13:34:00 | 显示全部楼层
本帖最后由 作者 于 2006-7-28 16:07:12 编辑

其实我就是使用AsdkInspector.arx查看数据库,但是在我自定义的块中找不到,AcDbBlockBegin和AcDbBlockEnd这样的东西啊

你说我连这两个东西是什么地方的都搞不清楚,那我说每个块表记录都是以AcDbBlockBegin开始然后以AcDbBlockEnd结束中间就是我添加的一些实体(AcDbEntity),你说是不是这样啊?

但是我自定义的块就是不出现这些东西,而看到Modal_Space就有,而且别人写的块就有,所以我就不明白阿。下面是我的关键的代码,你看看有什么问题

 楼主| 发表于 2006-7-28 16:08:00 | 显示全部楼层

void CreateBlock(char blkname[200])
{
 AcDbDatabase *pCurDb;
 AcDbBlockTable *pBlockTable;
 AcDbBlockTableRecord *pBlockRecord = new AcDbBlockTableRecord;
 AcDbObjectId blockId;

 pCurDb = acdbHostApplicationServices()->workingDatabase();
 pCurDb->getBlockTable(pBlockTable, AcDb::kForWrite);
 pBlockTable->add(blockId,pBlockRecord);
 pBlockTable->close();
 pBlockRecord->setName(blkname);

 AcGePoint3d basePt(0.0,0.0,0.0);
 pBlockRecord->setOrigin(basePt);

 AcDbCircle *pCir = new AcDbCircle;
 AcDbObjectId cirId;
 pCir->setColorIndex(2);
 pCir->setCenter(basePt);
 pCir->setRadius(10);

 pBlockRecord->appendAcDbEntity(cirId,pCir);
 pCir->close();
 pBlockRecord->close();
}

发表于 2006-8-1 04:59:00 | 显示全部楼层

下面关于AcDbBlockBegin Class的话来自SDK:

The AcDbBlockBegin class represents the block header portion of a block definition within AutoCAD (that is, group codes 2, 3, 10, 20, 30, and 70). Objects of this class are created and handled automatically by AutoCAD for each AcDbBlockTableRecord.

Applications do not need to create objects of this class nor can they add or remove them from databases. Applications are free to add or manipulate xdata on objects of this class as well as work with extension dictionaries for objects of this class.

Warning Do not derive from this class. Attempting to do so will cause your application to halt AutoCAD.

就是说:
第一,AcDbBlockBegin对象存在于AcDbBlockTableRecord中,不存在于*MODAL_SPACE*中,起码不是你的自定义块中的。

第二,它是由AcDbBlockTable维护的,不可能被选择到,

第三,不要指望操控或者继承此类,以及其xData

第四,你的程序在我的机器上运行得很好,只要没有崩溃,我想,它在你的机器上运行得也是很好,只是那两个图元你没观察到罢了

 楼主| 发表于 2006-8-1 17:42:00 | 显示全部楼层

恩~楼上的兄弟说的太对了,我知道为什么没有观察到了,其实就是只要是我保存一下图形就立刻在观察器中看到了,

谢谢大家关注我的问题~~

楼上的兄弟有没有QQ啊~~,要是方便的话有时间多交流啊

发表于 2006-8-2 00:00:00 | 显示全部楼层

恩,我的QQ是172522850,我有一个专门的群17086493,欢迎加入!

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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