Вставить имя блока в чертёж
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вставить имя блока в чертёж

Вставить имя блока в чертёж

Ответ
Поиск в этой теме
Непрочитано 10.03.2023, 09:22 #1
Вставить имя блока в чертёж
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 775

Есть лисп, который показывает имя блока в командной строке. Подскажите, пожалуйста, как имя вставить в чертёж.
Код:
[Выделить все]
 (defun c:EFF_NAME (/ command_interrupted entity_selected)
    (while (not command_interrupted)
        (setq entity_selected (vl-catch-all-apply 'entsel (list "\nВыберите блок: ")))
        (cond
            (
                (vl-catch-all-error-p entity_selected)
                    (setq command_interrupted t)
            )
            (
                (null entity_selected)
            )
            (
                t
                    (if (= "AcDbBlockReference" (vla-get-objectname (vlax-ename->vla-object (car entity_selected))))
                        (princ (vla-get-effectivename (vlax-ename->vla-object (car entity_selected))))
                    )
            )
        )
    )
    (princ)
)
Просмотров: 1453
 
Непрочитано 10.03.2023, 09:43
#2
Кулик Алексей aka kpblc
Moderator

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


Полем Ну или вместо (princ .. создавать объект текста.
Я бы предпочел первый вариант, скорее всего.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.03.2023, 09:53
#3
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Полем Ну или вместо (princ .. создавать объект текста.
Нет, полем не надо, просто текст, как это добавить в лисп, я не справлюсь...
Ingpro вне форума  
 
Непрочитано 10.03.2023, 09:59
#4
Кулик Алексей aka kpblc
Moderator

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


Ну как создаются текстовые объекты - знаешь? Я про программное создание, естественно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.03.2023, 10:09
#5
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
как создаются текстовые объекты - знаешь? Я про программное создание
Совсем не в теме, поэтому прошу помощи у профи...
Ingpro вне форума  
 
Непрочитано 10.03.2023, 11:33
#6
Кулик Алексей aka kpblc
Moderator

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


Дык ета... Попробуй сначала командными методами, а потом - великий и узасный гугел https://www.google.com/search?q=auto...BA%D1%81%D1%82 покажет массу примеров. Попробуй разобраться.
Offtop: Можешь найти в глубинах форума книгу "САПР на базе" - там где-то в самом начале вроде были коды, показывающие, как создавать тексты. Правда, это чтение не на одну неделю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.03.2023, 11:40
#7
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй разобраться
Ок, Алексей...
Ingpro вне форума  
 
Автор темы   Непрочитано 11.03.2023, 16:20
#8
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Вот такое описание текста:
Текущий стиль текста: "Standard" Высота текста: 250
Аннотативный: Нет Выравнивание: сЛева
Угол поворота текста <0>: 0
Код:
[Выделить все]
  (progn 
      (if (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))) 0.0) ;_ end of =
        (progn ;; нулевая высота текста
   (setq txt_height 250)
          (vl-cmdf "_.TEXT" "0,0" txt_height 0 (rtos res 2))) ;_ end of progn
        (progn ;; фиксированнная высота
          (vl-cmdf "_.TEXT" "0,0" 0 txt (rtos res 2))) ;_ end of progn
         )
      (command "_.copybase" "0,0" (entlast) "" "_.erase" (entlast) "" "_.pasteclip" pause) 
      ) ;_ end of progn 
    ) ;_ end of if 
   (princ) 
  )
А как его прикрутить к имени блока? Подскажите, плз…
Наверное, надо имя выбранного блока скопировать в буфер, а затем вставить в чертёж?

Последний раз редактировалось Ingpro, 11.03.2023 в 16:28.
Ingpro вне форума  
 
Непрочитано 11.03.2023, 19:20
#9
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
имя вставить в чертёж
Код:
[Выделить все]
 
(defun c:EFF_NAME (/ command_interrupted entity_selected)
    (while (not command_interrupted)
        (setq entity_selected (vl-catch-all-apply 'entsel (list "\nВыберите блок: ")))
        (cond
            (
                (vl-catch-all-error-p entity_selected)
                    (setq command_interrupted t)
            )
            (
                (null entity_selected)
            )
            (
                t
                    (if (= "AcDbBlockReference" (vla-get-objectname (vlax-ename->vla-object (car entity_selected))))
		      		(progn
			      		(setq text_insertion_point (getpoint (setq text_string (vla-get-effectivename (vlax-ename->vla-object (car entity_selected))))))
			      		(vla-addtext (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
					    	 text_string
				  	     	(vlax-3d-point (trans text_insertion_point 1 0))
				  	    	 2.5	;	высота текста
	                         		  
	            			)
		  		)
                    )
            )
        )
    )
    (princ)
)
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 11.03.2023, 20:03
#10
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


koMon, спасибо большое за помощь!
Имя блока вставляет, но почему-то в ком. строке странная запись:
Команда: EFF_NAME
Выберите блок: A$C755D3A91
Может опять рус-версия?
В принципе это не мешает, просто интересно...

Последний раз редактировалось Ingpro, 11.03.2023 в 20:27.
Ingpro вне форума  
 
Непрочитано 11.03.2023, 20:30
#11
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


ятд это неверный копипаст и это скорее всего вот такое приглашение выбрать блок)

----- добавлено через ~32 мин. -----
или сохранение кода в экзотической кодировке.
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 11.03.2023, 21:05
#12
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Цитата:
Сообщение от koMon Посмотреть сообщение
неверный копипаст
А этот копипаст не вредит ничему?
Ingpro вне форума  
 
Непрочитано 11.03.2023, 21:23
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


как копипаст может навредить? откройте сохранённый лисп в текстовом редакторе, убдитесь, что приглашение выбрать блок читается на русском языке и сохраните его в текстовой кодировке ansi.
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 12.03.2023, 08:19
#14
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 775


Цитата:
Сообщение от koMon Посмотреть сообщение
сохранение кода в экзотической кодировке
На другом компе всё нормально, без экзотики, спасибо, koMon, за программу и пояснения.
Ingpro вне форума  
 
Непрочитано 12.03.2023, 18:20
#15
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от koMon Посмотреть сообщение
ятд это неверный копипаст и это скорее всего вот такое приглашение выбрать блок)
Копируй текст с форума в буфер обмена с текущим языком - русский и будет все ок, проверено.
Похожие темы
https://forum.dwg.ru/showthread.php?t=71089
https://forum.dwg.ru/showthread.php?t=18251
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вставить имя блока в чертёж



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить определенное слово или число без создания блока. dirks AutoCAD 5 22.02.2019 21:22
Как обновить атрибуты блока не смещая их в начальную точку? Tregart AutoCAD 15 04.07.2018 07:52
Имеется ли возможность ссылаться изнутри при создании блока на его же будущий номер ObjId ? Tyhig AutoCAD 6 14.08.2017 17:56
Как вставить подпись в чертёж? Lavrov48 AutoCAD 83 03.03.2016 12:36
свойство динамичного блока в его атрибуте Pave1 AutoCAD 14 29.12.2011 20:31