[toproc]大鹏追日 21:02:07
textbox能准确计算属性块中,某一个属性值的文字宽度么?
[ZZXXQQ] 21:02:57
直接从组码读出来
[toproc]大鹏追日 21:03:41
[qqimg]oldimg/{F45C19D8-C8E0-44F6-85FA-DE98525C8A6D}.jpg[/qqimg] X= 和Y=是一个属性块里面的两个属性值,不管何种比例插入属性块,我想能准确计算这两个属性文字的最大宽度,好按比例绘制横线
我看看,祖码有这个宽度值没
[toproc]大鹏追日 21:04:52
[qqimg]oldimg/{89FC419E-8E0F-ABF0-732C-0FA1BED7F504}.jpg[/qqimg]
[toproc]大鹏追日 21:07:26
斑竹,组码中没有X=-539.3571文字的宽度啊?
[ZZXXQQ] 21:07:43
41
高宽比
[toproc]大鹏追日 21:14:24
谢谢!但是,宽度=高度×高宽比,文字高度是2.5,高宽比是1,这个宽度算出来就不对了啊。要的不是单个文字的宽度,是整个“X=-539.3571”
[ZZXXQQ] 21:15:19
串长*字高*高宽比
[toproc]大鹏追日 21:16:33
恩,明白了。谢谢!我以为有啥简单的方法。textbox为什么计算不了属性块中文字的宽度呢?
[ywq8868]老叶 21:18:39
[vormittag]桔子 21:20:10
非等宽字符并不能这么算。
[toproc]大鹏追日 21:21:07
是说非等宽字符,不能用组码来计算吗?
[ZZXXQQ] 21:21:43
可以,但多个固定的字宽比
[vormittag]桔子 21:21:59
用串长*字高*高宽比好像不行。
[toproc]大鹏追日 21:22:13
我来试试 看行不
[vormittag]桔子 21:23:11
有的字体样式,各种字符的宽度并不完全一致的。
[toproc]大鹏追日 21:25:07
[qqimg]oldimg/{243EA927-7268-D083-6DBD-2371D565AF83}.jpg[/qqimg]
是有问题
[toproc]大鹏追日 21:27:07
对于单纯的文字 textbox可以计算,属性块里面的文字就有问题
[vormittag]桔子 21:27:54
一样的
[toproc]大鹏追日 21:28:01
(setq e (entlast))
(setq e1 (entnext e))
(setq e2 (entnext e1))
(setq sm1 (entget e1))
(setq sm2 (entget e2))
(setq tb1 (textbox (list (assoc 1 sm1))))
(setq tb2 (textbox (list (assoc 1 sm2))))
(setq kd1 (abs (- (caar tb1) (caadr tb1))))
(setq kd2 (abs (- (caar tb2) (caadr tb2))))
(setq kd (max kd1 kd2))
我之前是这样算的
e是属性块的图元名,e1和e2分别是X和Y坐标文字的图元名
算出来就是不对的
[vormittag]桔子 21:29:09
ttf字体就不要说了,肯定不是你想要的长度
[toproc]大鹏追日 21:31:12
我这个字体是黑体。。。。
[vormittag]桔子 21:32:03
(setq tb1 (textbox sm1))
[vormittag]桔子 21:35:17
你那种作法这样只会算这个字符串在当前的字体样式下的bb框。
[toproc]大鹏追日 21:35:23
谢谢!拿着函数直接照搬用的
[toproc]大鹏追日 21:35:58
也就是说,各种字体样式的bb框还要按字体样式来?
[vormittag]桔子 21:36:16
当然了。
[toproc]大鹏追日 21:36:35
非常感谢!
[vormittag]桔子 21:36:46
跟字高、高宽比都有关系。
[toproc]大鹏追日 21:37:41
你那个好,一下全搞定
[toproc]大鹏追日 21:41:59
感谢 ZZXXQQ和桔子,问题解决了!
[vormittag]桔子 21:42:18
不客气
【hehaidizhi】绿 21:47:07
Sub GetLenth()
Dim ExcelApp As New Excel.Application
Dim ExcelWkbk As Excel.Workbook
Set ExcelWkbk = ExcelApp.Workbooks.Add
Dim i As Integer
i = 1
Dim Ent As AcadEntity
Dim pt1 As Variant, pt2 As Variant
With ExcelWkbk.Worksheets("sheet1")
For Each Ent In ThisDrawing.ModelSpace
If Ent.ObjectName = "AcDbLine" Then
.Range("A" & i) = i
.Range("B" & i) = Ent.Length
i = i + 1
End If
Next Ent
End With
ExcelApp.ActiveWorkbook.SaveAs "d:AcadLen.xls"
ExcelApp.Workbooks.Close
ExcelApp.Quit
End Sub
哪位大哥帮我把上边程序存成cad可以加载的插件啊?
谢谢了 |