cjb2187 发表于 2009-12-10 11:40:00

关于块另存的问题

<p>鄙人正在编写一个更改块名及插入基准点的程序,大致已编写完成的,只是在测试的时候发现一个问题,请教各位同好</p><p>因为我不想编一个只能修改全局块名及插入基准点的程序,事实上这样的程序明经里原来就有这样的程序,所谓全局块名事实上很简单,只是利用当前所选块参照对象(AcadBlockReference)的EffectiveName属性得到块名,再利用这个块名使用ThisDrawing.Blocks.Item(块名)的方法得到一个块对象(AcadBlock),再把这个块的Name改为所需改的块名就可以了,比如说图形中有一个块名为"XXX",在图中使用了10次,用上述的方法就可以将块名改为"YYY"等等其它块名</p><p>但是在实际的使用中我们要使用到一些内容相差不多的块,比如建筑中用到的同样款式但长宽不一样的门各窗,再比如电气图中用到的断路器,负荷开关,刀熔开关等,当然我们可以事先将常用的全部作成块,也可以作成动态块,但是如果是需要一些不太常用的,或只是这个工程才会用的某些块呢</p><p>现行的方法有两种<br/>1)复制一个相差不多的块,炸散,修改内容再组成新块<br/>2)如果是2006以上的版本,可以使用BEDIT命令进入"块编辑器",修改其内容后再用BSAVEAS命令另存为一个新块,再在图形中插入这个新的块</p><p>我编写的程序就是基于第一种方法,过程是<br/>1)选中块参照,得出比例,角度,插入点及块名等基本信息后将这个块参照删除<br/>2)使用ThisDrawing.Blocks.Add方法新建一个新块,块名自已给定,这个时候块里面是空的,没有任何内容<br/>3)在这个块里使用InsertBlock方法将原来的块插入进去<br/>4)使用Explode方法得出刚插入的块炸散后的对象<br/>5)将刚插入的块用Delete方法删除(有这一步是因为上一步的Explode与CAD中Explode命令不同,CAD中的命令执行后原块就不存在了,只留下炸散后的对象,而VBA中Explode方法,原块不会消失)<br/>6)在ModelSpace中用第一步得到的信息插入新块<br/>到这里就相当于将所选的块改了名字,例如本来图中有10个名为"XXX"的块,经过上述过程后所选的块的名字就变成了"YYY",而其它9个块名仍为"XXX",实际上是绕了一大圈,不过绕圈是计算机的事,又不要我们绕,所以也就无所谓了</p><p>不过测试的时候却出了问题,什么问题呢?问题在动态块上,因为动态块一旦打散后所有的动态定义就自动消失了,不论是可见性,还是拉伸旋转缩放,统统没有,就算再组成块也不可能恢复,所以程序失败</p><p>但是如果使用第二种方法编程,在另存块的时候会弹出对话框,这又该如何处理呢?</p>

雪山飞狐_lzh 发表于 2009-12-10 15:17:00

<p>把常用块定义放到一个文件里,然后CopyObjects</p>

cjb2187 发表于 2009-12-14 14:34:00

呵呵,我这里只是探讨一下如何新建一个和旧块的内容相同但块名不同的新块,所以楼上的方法即使可以解决问题,也不是我所需要的,不过还是谢谢了
页: [1]
查看完整版本: 关于块另存的问题