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

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

Вызов команды лиспа без скобок и запись команды в файле acad.pgp

Ответ
Поиск в этой теме
Непрочитано 02.12.2022, 11:49 #1
Вызов команды лиспа без скобок и запись команды в файле acad.pgp
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 765

Всем доброго дня!
Кажется ничего сложного, но...
Недавно была тема "Чтобы результат работы команды (текст) был подчеркнутый". Лисп приложен в #7 и #23.

Алексей предоставил код программы для подчеркивания текста и Мтекста, с вызовом "defun t1".
Код:
[Выделить все]
 (defun t1 (/ selset)
  (if (setq selset (_kpblc-conv-selset-to-vla
                     (_kpblc-selset-msg
                       "Select single- or multiline texts"
                       (function (lambda ()
                                   (ssget "_:L" '((0 . "*TEXT")))
                                 ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of _kpblc-selset-msg
                   ) ;_ end of _kpblc-conv-selset-to-vla
      ) ;_ end of setq
    (foreach ent selset
      (cond
        ((= (vla-get-objectname ent) "AcDbText")
         (vla-put-textstring ent (strcat "%%u" (vla-get-textstring ent)))
        )
        ((= (vla-get-objectname ent) "AcDbMText")
         (vla-put-textstring ent (strcat "{\\L" (vla-get-textstring ent) "}"))
        )
      ) ;_ end of cond
    ) ;_ end of FOREACH
  ) ;_ end of if
) ;_ end of defun
При замене в лиспе "defun t1" на "defun С:t1", чтобы вызывать без скобок,
команда не срабатывает, подскажите, please, в чём может быть проблема?
Может нужны дополнительные функции?

И как правильно записывать команду лиспа t1 (в случае "defun t1") в файле acad.pgp со скобками или без?
"ПТ, *(t1)" или "ПТ, *t1" (без кавычек, конечно). Пробую и так и эдак не получается...
Делаю ПЕРЕИН. Выдает синтаксическую ошибку...
Вызываю псевдокоманду "ПТ". Пишет в КС: Неизвестная команда "ПТ".
Никогда раньше не было проблем с псевдоименами команд, у меня более 30-ти лисп- программ на псевдокомандах...

Последний раз редактировалось Ingpro, 15.01.2023 в 10:17.
Просмотров: 2251
 
Непрочитано 02.12.2022, 12:17
#2
===AAA===


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


Если с клавиатуры - вызывай просто t1,
в других случаях, например, из меню,
вызов выглядит, как (c:t1)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 02.12.2022, 12:20
#3
Кулик Алексей aka kpblc
Moderator

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


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


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Приведи свой код. И не забудь про форматирование кода
Изменения внесены в Ваш код, про форматирование кода совсем не в курсе.

Код:
[Выделить все]
 (vl-load-com)
(defun C:t1 (/ selset)
	  (if (setq selset (_kpblc-conv-selset-to-vla
	                     (_kpblc-selset-msg
	                       "Select single- or multiline texts"
	                       (function (lambda ()
	                                   (ssget "_:L" '((0 . "*TEXT")))
	                                 ) ;_ end of lambda
	                       ) ;_ end of function
	                     ) ;_ end of _kpblc-selset-msg
	                   ) ;_ end of _kpblc-conv-selset-to-vla
	      ) ;_ end of setq
	    (foreach ent selset
	      (cond
	        ((= (vla-get-objectname ent) "AcDbText")
	         (vla-put-textstring ent (strcat "%%u" (vla-get-textstring ent)))
	        )
	        ((= (vla-get-objectname ent) "AcDbMText")
	         (vla-put-textstring ent (strcat "{\\L" (vla-get-textstring ent) "}"))
	        )
	      ) ;_ end of cond
	    ) ;_ end of FOREACH
	  ) ;_ end of if
	) ;_ end of defun

Последний раз редактировалось Ingpro, 15.01.2023 в 10:18.
Ingpro вне форума  
 
Непрочитано 02.12.2022, 13:39
1 | #5
Кулик Алексей aka kpblc
Moderator

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


"c" случайно не на русском?
Второе - см.вложение (доступно в расширенном редакторе)
Миниатюры
Нажмите на изображение для увеличения
Название: ExtendedEditor.png
Просмотров: 10
Размер:	7.0 Кб
ID:	251687  
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.12.2022, 14:04
#6
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
"c" случайно не на русском?
Спасибо, Алексей, точно на русском была, теперь срабатывает без скобок. И псевдокоманда работает. Здорово!
Что интересно, в этом лиспе t1, если ввести команду и выбрать подчеркнутый текст (Мтекст нет), подчеркивание убирается... И в этом есть плюс...
С кодом так надо?
Код:
[Выделить все]
 (vl-load-com)
(defun C:t1 (/ selset)
	  (if (setq selset (_kpblc-conv-selset-to-vla
	                     (_kpblc-selset-msg
	                       "Select single- or multiline texts"
	                       (function (lambda ()
	                                   (ssget "_:L" '((0 . "*TEXT")))
	                                 ) ;_ end of lambda
	                       ) ;_ end of function
	                     ) ;_ end of _kpblc-selset-msg
	                   ) ;_ end of _kpblc-conv-selset-to-vla
	      ) ;_ end of setq
	    (foreach ent selset
	      (cond
	        ((= (vla-get-objectname ent) "AcDbText")
	         (vla-put-textstring ent (strcat "%%u" (vla-get-textstring ent)))
	        )
	        ((= (vla-get-objectname ent) "AcDbMText")
	         (vla-put-textstring ent (strcat "{\\L" (vla-get-textstring ent) "}"))
	        )
	      ) ;_ end of cond
	    ) ;_ end of FOREACH
	  ) ;_ end of if
	) ;_ end of defun
Ingpro вне форума  
 
Непрочитано 02.12.2022, 14:05
#7
Кулик Алексей aka kpblc
Moderator

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


Ага, только в свойствах посмотри, что там творится с однострочным текстом после пары-тройки десятков применения этого лиспа. Гарантирую - офигеешь.
Я предупреждал, кажется, что за результат не отвечаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.12.2022, 14:09
#8
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
в свойствах посмотри, что там творится с однострочным текстом после пары-тройки десятков
Понятно о чем речь - %%u%%u 1 - 1. Этих штук с каждым разом будет всё больше %%u%%%%%%u...
А это решается как-то, или можно не обращать внимание?
В принципе, думаю, не придется один и тот же текст подчеркивать/отменять подчеркивание по нескольку раз...
Код в #6 подправлен С - англ.

Последний раз редактировалось Ingpro, 02.12.2022 в 14:25.
Ingpro вне форума  
 
Непрочитано 02.12.2022, 14:39
#9
Кулик Алексей aka kpblc
Moderator

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


Чисто теоретически можно через vl-string-left-trim. Но если у тебя строка будет начинаться с % или u (после подчеркивания) - эти символы ты потеряешь.
Кстати, я не помню, но, по-моему, %%u и %%U визуально приводят к одному и тому же результату, но с точки зрения операций со строками это разные вещи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2022, 14:44
#10
===AAA===


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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
в других случаях, например, из меню,
вызов выглядит, как (c:t1)
Сорри, хотел написать "при вызове из своих программ".
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 02.12.2022, 15:12
#11
Ingpro


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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
в других случаях, например, из меню,
вызов выглядит, как (c:t1)
Спасибо, ===AAA===, но всё решилось после исправления С на английском...

Последний раз редактировалось Ingpro, 05.02.2023 в 15:27.
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вызов команды лиспа без скобок и запись команды в файле acad.pgp

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать результат команды «_LIST» в текстовый файл в AutoCAD 2012 LT. Ratmir AutoCAD 6 26.05.2022 12:19
В файле acad.pgp не назначается команда на букву "О" и не срабатывает команда "Разорвать в точке" Вася завод Программирование 2 15.12.2014 23:46
Узнать имя команды (функции) компилированного лиспа (.fas) Макса AutoCAD 19 14.11.2014 04:19
Не работают команды "подобие", "изменение ПСК вдоль объекта" A-l-l-A AutoCAD 5 25.09.2013 14:08
Как отключить повтор последней команды по Enter sibcat AutoCAD 11 01.05.2013 23:43