多行文字的实际高宽请参考组码42及43,给你一个cab大师的多行文字boundingbox的代码
- (defun box_mtext (ent / elst p10 txth ang vec wid hgt dxf UCSangle
- attpt ul ur lr ll)
- (defun dxf (code elst)
- (cdr (assoc code elst))
- )
- ;; incase it is a list, (ename point)
- (and (listp ent) (setq ent (car ent)))
- (setq elst (entget ent))
- (setq p10 (trans (dxf 10 elst) 0 1) ; insertion point WCS to UCS
- txth (dxf 40 elst) ; text height
- wid (dxf 42 elst) ; full width
- hgt (dxf 43 elst) ; full height
- ang (dxf 50 elst) ; rotation angle in UCS
- attpt (dxf 71 elst) ; attachment point code
- )
- ;|--------------------------------------------------------------
- ;; CAB 01/24/2006 removed as the ang fron DXF code 50 os in UCS
- ;; correct for UCS
- (setq ang (- ang (angle (trans '(0.0 0.0 0.0) 1 0)
- (trans '(1.0 0.0 0.0) 1 0)))
- )
- ;; angles 90 = (/ pi 2) 180 = pi 270 = (* pi 1.5)
- ---------------------------------------------------------------|;
-
- ;; Get upper left (ul) from insert point (p10)
- (cond ((= attpt 1) (setq ul p10)) ; top left
- ((= attpt 2) (setq ul (polar p10 (+ pi ang) (/ wid 2)))) ; top center
- ((= attpt 3) (setq ul(polar p10 (+ pi ang) wid))) ; top right
- ((= attpt 4) (setq ul (polar p10 (+ (/ pi 2) ang) (/ hgt 2)))) ; middle left
- ((= attpt 5) ; middle center
- (setq ul (polar (polar p10 (+ pi ang) (/ wid 2)) (+ (/ pi 2) ang) (+ (/ hgt 2)))))
- ((= attpt 6) ; middle right
- (setq ul (polar (polar p10 (+ pi ang) wid) (+ (/ pi 2) ang) (+ (/ hgt 2)))))
- ((= attpt 7) (setq ul (polar p10 (+(/ pi 2) ang) hgt))) ; bottom left
- ((= attpt 8) ; bottom center
- (setq ul (polar (polar p10 (+ pi ang) (/ wid 2)) (+ (/ pi 2) ang) hgt)))
- ((= attpt 9) ; bottom right
- (setq ul (polar (polar p10 (+ pi ang) wid) (+ (/ pi 2) ang) hgt)))
- );cond
- (setq ur (polar ul ang wid)
- lr (polar ur (+ ang (* pi 1.5)) hgt)
- ll (polar lr (+ ang pi) wid)
- );setq
- (list ll lr ur ul)
- );boxmtext
|