teem0n пишет:Переменные - вариант, координаты получаются.
НО! Если нарисовать полученные точки, то они образуют не ограничивающий прямоугольник, а что-то другое. Как я понимаю - прямоугольник с высотой, равной высоте строки текста данного шрифта и с длиной, равной длине этого текста, написанного в одну строку.
Вот тебе костыль в виде лиспа, по-другому можно с использованием класса VLAX.cs
- ищи сам по форумам
Код модуля (измени имя лисп файла "C:/Test/setwh.lsp" на то где сохранишь)
Option Explicit
Const lspfile As String = "C:/Test/setwh.lsp" '!<--- change lisp file name here !
Sub aab()
Dim obj As Object
Dim pp As Variant, mat As Variant, ctx As Variant
ThisDrawing.Utility.GetSubEntity obj, pp, mat, ctx, vbCrLf & "Select multiline attribute >> "
Dim att As AcadAttributeReference
Set att = obj
Dim txt As String
txt = att.TextString
Dim pmin As Variant
Dim pmax As Variant
Dim hdl As String
hdl = att.handle
ThisDrawing.SetVariable "users1", hdl
ThisDrawing.SendCommand "(load " & Chr(34) & lspfile & Chr(34) & ") "
ThisDrawing.SendCommand "(princ)" & vbCr
ThisDrawing.SendCommand "(setwh " & Chr(34) & hdl & Chr(34) & ") " & vbCr
Dim wid As Double
wid = CDbl(ThisDrawing.GetVariable("userr1"))
Dim hgt As Double
hgt = CDbl(ThisDrawing.GetVariable("userr2"))
Dim th As Double
th = att.Height
Dim p As Variant
p = att.InsertionPoint
p = ThisDrawing.Utility.TranslateCoordinates(p, acUCS, acWorld, False)
'change frame points relative to attribute Alignment property:
Dim pts(7) As Double
pts(0) = CDbl(p(0)) - th: pts(1) = CDbl(p(1)) + th
pts(2) = CDbl(p(0)) + wid + th: pts(3) = CDbl(p(1)) + th
pts(4) = CDbl(p(0)) + wid + th: pts(5) = CDbl(p(1)) - hgt - th
pts(6) = CDbl(p(0)) - th: pts(7) = CDbl(p(1)) - hgt - th
Dim pline As AcadLWPolyline
Set pline = ThisDrawing.ModelSpace.AddLightWeightPolyline(pts) 'ors
pline.Closed = True
pline.color = acCyan
pline.Lineweight = 40
End Sub
Код лиспа, сохрани где хочешь
В блокноте вставь следующий код
;;******************************************
(defun setwh(handle)
(setq en (handent (getvar "users1")))
(setq elist (entget en))
(setq wid (cdr (assoc 42 elist)))
(setq hgt (cdr (assoc 43 elist)))
(setvar "userr1" wid)
(setvar "userr2" hgt)
(princ))
;;*******************************************
Сохрани обязательно под именем setwh.lsp
в любой своей папке, но не забудь потом этот же путь
прописать в модуле