> Константин
Ты не уточнил, какой вариант используешь, поэтому привожу оба
;|Принцип работы
1. Высота текста — из текущего размерного стиля (DIMTXT)
2. Стрелки нет
3. Координаты берутся из МСК
4. Точность округления настраивается системной переменной LUPREC
команда _UNITS
|;
(defun C:NE ( / p1 p2)
;;На основе _kpblc-draw-leader
(defun _addleader (up-string low-string start-point end-point / lead_obj ann_obj point-list)
;; Прежде всего преобразовываем low-string в строковый вид:
(if (not low-string)(setq low-string "")) ;_ end of if
(setq point-list (apply 'append (list start-point end-point)))
;; Теперь собственно выполнение выноски.
(setq ann_obj (vla-addmtext
(if (and (zerop (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object))))
(= :vlax-false (vla-get-mspace (vla-get-activedocument (vlax-get-acad-object)))))
(vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(vlax-3d-point end-point)
0 ; устанавливается ширина именно 0, для нормального получения полки
(if (/= low-string "")(strcat up-string "\\P" low-string) up-string))
lead_obj (vla-addleader
(if (and (zerop (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object))))
(= :vlax-false (vla-get-mspace (vla-get-activedocument (vlax-get-acad-object)))))
(vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble
(cons 0 (1- (length point-list)))) point-list)) ann_obj acLineNoArrow) ;_ end of vla-AddLeader
) ;_ end of setq
(vla-put-Rotation ann_obj (angle '(0 0 0)(getvar "UCSXDIR")))
;; Меняем настройки будущей аннотации:
; (vla-put-height ann_obj (* 1 (getvar "dimscale")))
(vla-put-attachmentpoint ann_obj
;; Назначая точку выравнивания, будем использовать числовые значения:
;; acAttachmentPointBottomLeft -> 7
;; acAttachmentPointBottomRight -> 9
;; acAttachmentPointMiddleLeft -> 4
;; acAttachmentPointMiddleRight -> 6
(+ 4 (if (> (car end-point) (car start-point)) ; выноска вправо, точка — влево
0 2) ;_ end of if
(if (/= low-string "") ; нижняя строка есть, выр. — по центру
0 3) ;_ end of if
) ;_ end of +
) ;_ end of vla-put-AttachmentPoint
(vla-put-insertionpoint ann_obj (vlax-3d-point end-point))
;; Теперь модицифируем собственно выноску
(vla-put-verticaltextposition lead_obj acOutside)
(vla-put-ArrowheadSize lead_obj 0.5)
;; В принципе, строка ниже не требуется — так, для страховки.
(vla-put-coordinate lead_obj 1 (vlax-3d-point end-point)) lead_obj)
(vl-load-com)
(initget 1)
(setq p1 (getpoint "\nТочка: "))
(initget 1)
(setq p2 (getpoint p1 "\nНаправление выноски: "))
(setq p1 (trans p1 1 0)
p2 (trans p2 1 0))
(_addleader
(strcat "N=" (rtos (nth 1 p1) 2))
(strcat "E=" (rtos (nth 0 p1) 2))
p1 p2)(princ))
(princ "\nНаберите в командной строке NE")
Там в принципе все есть в комментариях, но еще раз обращаю внимание
1. Высота текста — из текущего размерного стиля ( DIMTXT )
2. Стрелки нет
3. Координаты берутся из МСК
4. Точность округления настраивается системной переменной LUPREC команда _UNITS