nc2t 发表于 2006-7-26 11:36:00

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

本帖最后由 作者 于 2006-7-27 11:27:32 编辑 <br /><br /> <P>请问怎样可以使用ARX做一个Block块?</P>
<P>为什么我向 块 表中插入一个AcDbBlockRecord记录,不能自动的出现AcDbBlockBegin</P>
<P>和AcDbBlockEnd标志啊</P>
<P>我看到有一本书上写着,当关闭AcDbBlockRecord记录的时候会 自动加上那两个标记的啊??</P>
<P>我做的块为什么没有AcDbBlockBegin和AcDbBlockEnd?</P>
<P>大家要是做自定义的块(包含几个实体,比如一个圆和一个直线)都是怎么做啊?</P>

HuaiYu 发表于 2006-7-27 20:04:00

<P>这个问题在 SDK 上应该都有吧,在任何一本书上都是有例子的吧,</P>
<P>&nbsp;</P>

nc2t 发表于 2006-7-28 09:26:00

<P>我也是按照书上的例子写的阿,</P>
<P>而且我编译了书上的例子,也没有那两个标记阿</P>

pglyxq 发表于 2006-7-28 11:41:00

nc2t 发表于 2006-7-28 13:34:00

本帖最后由 作者 于 2006-7-28 16:07:12 编辑 <br /><br /> <P>其实我就是使用AsdkInspector.arx查看数据库,但是在我自定义的块中找不到,AcDbBlockBegin和AcDbBlockEnd这样的东西啊</P>
<P>你说我连这两个东西是什么地方的都搞不清楚,那我说每个块表记录都是以AcDbBlockBegin开始然后以AcDbBlockEnd结束中间就是我添加的一些实体(AcDbEntity),你说是不是这样啊?</P>
<P>但是我自定义的块就是不出现这些东西,而看到Modal_Space就有,而且别人写的块就有,所以我就不明白阿。下面是我的关键的代码,你看看有什么问题</P>

nc2t 发表于 2006-7-28 16:08:00

<P>void CreateBlock(char blkname)<BR>{<BR>&nbsp;AcDbDatabase *pCurDb;<BR>&nbsp;AcDbBlockTable *pBlockTable;<BR>&nbsp;AcDbBlockTableRecord *pBlockRecord = new AcDbBlockTableRecord;<BR>&nbsp;AcDbObjectId blockId;</P>
<P>&nbsp;pCurDb = acdbHostApplicationServices()-&gt;workingDatabase();<BR>&nbsp;pCurDb-&gt;getBlockTable(pBlockTable, AcDb::kForWrite);<BR>&nbsp;pBlockTable-&gt;add(blockId,pBlockRecord);<BR>&nbsp;pBlockTable-&gt;close();<BR>&nbsp;pBlockRecord-&gt;setName(blkname);</P>
<P>&nbsp;AcGePoint3d basePt(0.0,0.0,0.0);<BR>&nbsp;pBlockRecord-&gt;setOrigin(basePt);</P>
<P>&nbsp;AcDbCircle *pCir = new AcDbCircle;<BR>&nbsp;AcDbObjectId cirId;<BR>&nbsp;pCir-&gt;setColorIndex(2);<BR>&nbsp;pCir-&gt;setCenter(basePt);<BR>&nbsp;pCir-&gt;setRadius(10);</P>
<P>&nbsp;pBlockRecord-&gt;appendAcDbEntity(cirId,pCir);<BR>&nbsp;pCir-&gt;close();<BR>&nbsp;pBlockRecord-&gt;close();<BR>}<BR></P>

shinjikun 发表于 2006-8-1 04:59:00

<P>下面关于AcDbBlockBegin Class的话来自SDK:</P>
<P>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.</P>
<P>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.</P>
<P>Warning Do not derive from this class. Attempting to do so will cause your application to halt AutoCAD.</P>
<P>就是说:<BR>第一,AcDbBlockBegin对象存在于AcDbBlockTableRecord中,不存在于*MODAL_SPACE*中,起码不是你的自定义块中的。</P>
<P>第二,它是由AcDbBlockTable维护的,不可能被选择到,</P>
<P>第三,不要指望操控或者继承此类,以及其xData</P>
<P>第四,你的程序在我的机器上运行得很好,只要没有崩溃,我想,它在你的机器上运行得也是很好,只是那两个图元你没观察到罢了</P>

nc2t 发表于 2006-8-1 17:42:00

<P>恩~楼上的兄弟说的太对了,我知道为什么没有观察到了,其实就是只要是我保存一下图形就立刻在观察器中看到了,</P>
<P>谢谢大家关注我的问题~~</P>
<P>楼上的兄弟有没有QQ啊~~,要是方便的话有时间多交流啊</P>

shinjikun 发表于 2006-8-2 00:00:00

<P>恩,我的QQ是172522850,我有一个专门的群17086493,欢迎加入!</P>
页: [1]
查看完整版本: 怎样做一个块(Block),这个问题这么难么?,很着急大家帮忙看看吧 ?