1、在CAD制图时,需要将图纸文件进行编辑修改等操作。将块中的多个对象分解为独立对象,但一次只能删除一个编组级。若块中包含一个多段线或嵌套块,那么对该块的分解就首先分解
1、在CAD制图时,需要将图纸文件进行编辑修改等操作。将块中的多个对象分解为独立对象,但一次只能删除一个编组级。若块中包含一个多段线或嵌套块,那么对该块的分解就首先分解为多段线或嵌套块,然后再分别分解该块中的各个对象。若块中的对象具有相同 X、Y、Z 比例的块,将被分解为它们的部件对象。非一致比例块则可能被分解成其他对象。当非一致比例块包含有不能分解的对象时,这些不能分解的对象将全部集中到一个以“*E”为前缀的匿名块中并且以非一致比例缩放进行参照。如果这个块中的所有对象都不可分解,则选定的块参照不能分解。
2、分解主要用于将一个对象分解为多个单一对象。主要应用于对整体图形、图块、文字、尺寸标注等对象的分解。使用分解方法有三种:
(1)单击菜单栏,“修改->分解”。
(2)单击编辑工具栏“分解命令”按钮
。
(3)在命令行中输入Explode,按回车键。
我们首先先激活分解命令,然后选中需要炸开的对象,最后按回车或空格确定就可以啦。
3、下面介绍关于二次开发分解块的使用方法(以MxDrawCAD为例);分别是c#语言和网页中的使用。
(1)实现思路:我们在视区中利用GetEntity方法选择一个实体,然后判断选择的实体类型是否是图块;如果是图块的话。就调用Explode打碎图块,方法十分简单。
(2)主要用到函数说明:IMxDrawBlockReference::Explode
打碎块引用,被打碎的引用对象还在,打碎的实体是新生成的。详细说明如下:
参数
说明
[out,retval] IMxDrawResbuf** newIds
返回打碎后新生成的实体id数组
在c#中实现如下:
// 与用户交在图面上选择要打碎的块引对象
MxDrawUtility mxUtility = new MxDrawUtility();
object getPt;
MxDrawEntity ent = mxUtility.GetEntity(out getPt,"n 选择图块:");
if (ent == null)
{
MessageBox.Show("没有选择实体..");
return;
}
if (ent is MxDrawBlockReference)
{
MxDrawBlockReference blkRef = (MxDrawBlockReference)ent;
MxDrawResbuf rb = (MxDrawResbuf)(blkRef.Explode() );
// 得到打碎后新生成的实体的id
for(Int32 i = 1; i < rb.Count;i++)
{
long entId = rb.AtLong(i);
}
}
在网页中实现如下:
// 与用户交在图面上选择要打碎的块引对象var ent = mxOcx.GetEntity("选择图块:");
if (ent == null)
{
alert("没有选择实体..");
return;
}
if (ent.ObjectName == "McDbBlockReference")
{
// 选择的是一个块对象,就调用打碎函数碎
var blkRef = ent;
var rb = blkRef.Explode();
// 得到打碎后新生成的实体的id
for(var i = 1; i < rb.Count;i++)
{
var entId = rb.AtLong(i);
}
}