Как создать мультивыноску в Nanocad.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как создать мультивыноску в Nanocad.

Как создать мультивыноску в Nanocad.

Ответ
Поиск в этой теме
Непрочитано 12.07.2024, 14:54 #1
Как создать мультивыноску в Nanocad.
azmt
 
Уфа
Регистрация: 02.04.2011
Сообщений: 88

Здравствуйте. Хочу создать мультивыноску в нанокад. Пишу такой код

(setq a (getpoint "Точка вставки:"))
(setq b (getstring "Размер:"))
(command "_mleader" a pause (strcat "Размер " b))

Как вариант пробовал просто

(setq a (getpoint "Точка вставки:"))
(command "_mleader" a pause "108")

Мультивыноска создается, но без текста.
Просмотров: 1499
 
Непрочитано 12.07.2024, 16:08
#2
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Как вариант:

(command "_mleader" a pause "108" (command))

Сорри, "108" - лишнее

:-)

(command "_mleader" a pause (command))

а потом (entlast) поменять в ней группу 304.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 12.07.2024 в 16:24.
===AAA=== вне форума  
 
Непрочитано 12.07.2024, 19:15
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


ИМХО командными методами создавать мультивыноски, многострочные тексты, таблицы - так себе затея.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2025, 15:01
#4
виктор ермаков

геодезия делетантская
 
Регистрация: 17.05.2006
Сообщений: 3


;Добрый день. Помучался с командными методами и в итоге решил сделать такую функцию для отрисовки выносок в нанокад:
Код:
[Выделить все]
 ;**********************************************************************************************************************************
;Ермаков В.А. 01/02/2025
;4400965@mail.ru
;функция для отрисовки выноски в нанокад 23 и нанокад 25
;пример (EVA-MLEADER (list 0 0 0) (list 10 10 10) "тестова¤ выноска")
;**********************************************************************************************************************************
(defun EVA-MLEADER (eva_pt1 eva_pt2 eva_txt / eva_mleader_txt_right eva_mleader_txt_left eva_angle eva_ent eva_vla eva_mleader_lst)
;с помощью (entget (car (entsel))) получим список выноски где текст —ѕ–ј¬ј и закомментируем в нем "ненужные" элементы:
(setq eva_mleader_txt_right '(
;(-1 . #<»м¤ примитива: 0000028286F5E630>) 
(0 . "MULTILEADER")
 ;(5 . "5A8") (330 . #<»м¤ примитива: 0000028286F4D9F0>)
  (100 . "AcDbEntity") 
  ;(67 . 0) (410 . "Model")
   (8 . "0") (100 . "AcDbMLeader") (270 . 2) (300 . "CONTEXT_DATA{") (40 . 1.0) (10 8.0 0.0 0.0) (41 . 4.0) (140 . 4.0) (145 . 2.0)
    (174 . 1) (175 . 1) (176 . 0) (177 . 0) (290 . 1) (304 . "tst") (11 0.0 0.0 1.0) 
    ;(340 . #<»м¤ примитива: 0000028286F4E030>) 
    (12 10.0 2.0 0.0) (13 1.0 0.0 0.0) (42 . 0.0) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . -1073741824) (171 . 1) (172 . 5) 
    (91 . -1073741824) (141 . 0.0) (92 . 0) (291 . 0) (292 . 0) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) (296 . 0)
     (110 -10.0 -10.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 0) (302 . "LEADER{") (290 . 1) (291 . 1) (10 0.0 0.0 0.0) (11 1.0 0.0 0.0)
      (90 . 0) (40 . 8.0) (304 . "LEADER_LINE{") (10 -10.0 -10.0 0.0) (91 . 0) (92 . -1056964608) (305 . "}") (271 . 0) (303 . "}") 
      (272 . 9) (273 . 9) (301 . "}") 
      ;(340 . #<»м¤ примитива: 0000028286F4F430>)
       (90 . 279552) (170 . 1) (91 . -1056964608) 
       ;(341 . #<»м¤ примитива: 0000028286F4D7B0>) 
       (171 . -2) (290 . 1) (291 . 1) (41 . 8.0) (42 . 4.0) (172 . 2) 
       ;(343 . #<»м¤ примитива: 0000028286F4E030>) 
       (173 . 1) (95 . 1) (174 . 1) (175 . 0) (92 . -1056964608) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) (293 . 0)
        (294 . 0) (178 . 0) (179 . 1) (45 . 1.0) (271 . 0) (272 . 9) (273 . 9) (295 . 0)))
        ;дл¤ проверки что все работает выполним (entmake eva_mleader_txt_right) и убедимс¤ что в точке 0,0 создана выноска.
        
        ;с помощью (entget (car (entsel))) получим список выноски где текст —Ћ≈¬ј и закомментируем в нем "ненужные" элементы:
        (setq eva_mleader_txt_left '(
        ;(-1 . #<»м¤ примитива: 0000028286F5E670>) 
        (0 . "MULTILEADER")
         ;(5 . "5B2") (330 . #<»м¤ примитива: 0000028286F4D9F0>) 
         (100 . "AcDbEntity") 
         ;(67 . 0) (410 . "Model")
          (8 . "0") (100 . "AcDbMLeader") (270 . 2) (300 . "CONTEXT_DATA{") (40 . 1.0) (10 -18.8 0.0 0.0) (41 . 4.0) (140 . 4.0)
           (145 . 2.0) (174 . 1) (175 . 1) (176 . 2) (177 . 0) (290 . 1) (304 . "tst") (11 0.0 0.0 1.0)
           ; (340 . #<»м¤ примитива: 0000028286F4E030>) 
            (12 -10.0 2.0 0.0) (13 1.0 0.0 0.0) (42 . 0.0) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . -1073741824) (171 . 3) 
            (172 . 5) (91 . -1073741824) (141 . 0.0) (92 . 0) (291 . 0) (292 . 0) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0)
             (295 . 0) (296 . 0) (110 10.0 -10.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 0) (302 . "LEADER{") (290 . 1) (291 . 1) 
             (10 0.0 0.0 0.0) (11 -1.0 0.0 0.0) (90 . 0) (40 . 8.0) (304 . "LEADER_LINE{") (10 10.0 -10.0 0.0) (91 . 0) (92 . -1056964608) 
             (305 . "}") (271 . 0) (303 . "}") (272 . 9) (273 . 9) (301 . "}")
             ; (340 . #<»м¤ примитива: 0000028286F4F430>) 
              (90 . 279552) (170 . 1) (91 . -1056964608)
               ;(341 . #<»м¤ примитива: 0000028286F4D7B0>)
                (171 . -2) (290 . 1) (291 . 1) (41 . 8.0) (42 . 4.0) (172 . 2)
                 ;(343 . #<»м¤ примитива: 0000028286F4E030>) (173 . 1) (95 . 1) (174 . 1) (175 . 2) (92 . -1056964608) (292 . 0)
                  (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) (293 . 0) (294 . 0) (178 . 0) (179 . 3) (45 . 1.0) (271 . 0) 
                  (272 . 9) (273 . 9) (295 . 0)))
                  ;дл¤ проверки что все работает выполним (entmake eva_mleader_txt_left) и убедимс¤ что в точке 0,0 создана выноска.
                  
                  ;проверим в какой четверти координатной сетки наход¤тс¤ точки через которые строитс¤ выноска:
                  ;(setq eva_pt1 (getpoint) eva_pt2 (getpoint) eva_txt "test")
                  (setq eva_angle (angle eva_pt1 eva_pt2))
                  ;если угол от 0 до 90 и от 0 до -90 то выбираем список eva_mleader_txt_right
                  ;если угол от 90 до 180 и от -90 ддо -180 то выбираем список eva_mleader_txt_left
                  ;в нанокаде 23 счет от 0 до пи и от 0 до -пи, в нанокаде 25 счет от 0 до 2пи поэтому сначала иф дл¤ 23 нанокада, потом дл¤ 25        
                  (if (minusp eva_angle)                  
                  (if (or (and (>= eva_angle 0) (< eva_angle (/ pi 2))) (and (< eva_angle 0) (> eva_angle (/ pi -2))))
                  (setq eva_mleader_lst eva_mleader_txt_right)
                   (setq eva_mleader_lst eva_mleader_txt_left)
                   )
                  (if (or (and (>= eva_angle 0) (< eva_angle (/ pi 2))) (and (< eva_angle (* 2 pi)) (> eva_angle (/ (* 3 pi) 2))))
                  (setq eva_mleader_lst eva_mleader_txt_right)
                  (setq eva_mleader_lst eva_mleader_txt_left)
                  )
                  )
                                     
                   ;строим выноску по списку:
                   (entmake eva_mleader_lst)
                   ;заменим текст на нужный нам текст:
                   (setq eva_ent (entlast))
                   (setq eva_mleader_lst (entget eva_ent))
                   (setq eva_mleader_lst (subst (cons 304 eva_txt) (assoc 304 eva_mleader_lst) eva_mleader_lst))
                   (entmod eva_mleader_lst)
                   (entupd eva_ent)
                   ;переносим построенную выноску в точку eva_pt2:
                   (setq eva_ent (entlast))
                   (vl-load-com)
                   (setq eva_vla (vlax-ename->vla-object eva_ent))
                   (vla-move eva_vla (vlax-3D-point (list 0 0 0)) (vlax-3D-point eva_pt2))
                   ;хвост выноски со стрелкой ставим в точку eva_pt1:
                   (setq eva_ent (entlast))
                   (setq eva_mleader_lst (entget eva_ent))
                   (setq eva_mleader_lst (subst (cons 10 eva_pt1) (assoc 10 (member '(304 . "LEADER_LINE{") eva_mleader_lst)) eva_mleader_lst))
                   (entmod eva_mleader_lst)
                   (entupd eva_ent)
                   (princ)
                   )
                   ;дл¤ проверки (repeat 10 (EVA-MLEADER (getpoint) (getpoint) \"test747\"))
				   (princ "\nфункци¤ EVA-MLEADER загружена. ƒл¤ запуска команды набери в командной строке (EVA-MLEADER (getpoint) (getpoint) \"test747\") , нажми \"ENTER\" и укажи две точки на чертеже.")
             (princ)

Последний раз редактировалось Кулик Алексей aka kpblc, 07.04.2025 в 07:37.
виктор ермаков вне форума  
 
Непрочитано 07.04.2025, 06:05
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ну и не забываем, что связка "построение объектов через (entmake ...)" / "отмена сделанного"
в nanoCAD-23.1 даёт удивительные результаты, способные свернуть мозги пользователю. :-(((
Как в 25-м не знаю, не было возможности проверить.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 07.04.2025, 14:17
| 1 #6
ltnchik1405

проектировщик
 
Регистрация: 03.07.2009
Кострома
Сообщений: 1,102
Отправить сообщение для ltnchik1405 с помощью Skype™


Offtop: А чем стандартные не устраивают, извините?
ltnchik1405 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как создать мультивыноску в Nanocad.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать массив по траектории в NanoCAD filgavrilov Другие CAD системы 1 04.02.2019 14:09
Как создать вид в пространстве листа из 3D модели Айдар_ AutoCAD 2 21.05.2018 10:04
Как создать монолитные ступенчатые фундаменты в Tekla 2016? ALEX-LCL Tekla 10 29.12.2017 15:21
Как создать мультивыноску с текстом в прямоугольниках EvgenXP AutoCAD 8 01.11.2017 13:30
Civil 3d 2015 RUS. Как создать стиль метки (ордината) колодца на виде профиля? dima_25 Вертикальные решения на базе AutoCAD 5 07.05.2017 10:17