关于多行文字转换成单文字的方法 - 精华帖集合
www.dimcax.com
关于多行文字转换成单文字的方法
用过explode命令的人都知道,在cad环境中这个命令是可以选中多行文字直接分解为单文字。但是在vb或vba编程中用
retval=object.explode时,object是不包含多行文字及填充图案等对象的。这样,想用选择集选中所有多行文字用explode方法一次分解为单文字是不可能,除非新版本的cad出来支持这个功能吧。那总不可能就这样放弃自己的目的啊。下面我们用一个较笨的方法解决这个问题。
我就少说话多做事。
第一步,用以下语句选择出所有的多行文字
for i = 0 to acadapp.activedocument.modelspace.count - 1
if acadapp.activedocument.modelspace(i).entitytype = acmtext then
set mtextobj = acadapp.activedocument.modelspace(i)
tstring = mtextobj.textstring'得到当前文字内容
mtextobj.getboundingbox mtstar, mtend '取得多行文字的坐标
th = mtextobj.height: tw = mtextobj.width '取得多行文字的高和宽
set addt = acadapp.activedocument.modelspace.addtext(tstring, mtend, th)'在同一坐标中写入单文字
end if
next
第二步:通过第一步我们已经在原多行文字的几乎相同的的位置写入了单文字。接下来肯定是把多行文字删除就可以了。那就做一个删除过程吧
sub delmtext() '删除所有多行文字
'---------------------------------------------------------------
dim ssetobj as acadselectionset '定义选择集
set ssetobj = acadapp.activedocument.selectionsets.add("gtext") '新建选择集
dim ftype(0) as integer '组码过滤
dim fdata(0) as variant
ftype(0) = 0
fdata(0) = "mtext"
dim ft as variant '数据转换
dim fd as variant
ft = ftype
fd = fdata
ssetobj.select acselectionsetall, , , ft, fd '选中所有多行文本
ssetobj.erase
'-------------------------------------------------------------------------------
这样多行文字到单文字就转换完毕。方法有点笨,但能完成任务就可以了,效率也不低。