Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 202
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12 1 |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 2050014
 
Непрочитано 06.08.2021, 09:59
#4021
Кулик Алексей aka kpblc
Moderator

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


А с какого перепугу ты работаешь с переменной окружения, когда надо работать с системной переменной?
Не setenv / getenv, а setvar / getvar
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2021, 10:06
#4022
Browning Zed


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


Если бы все было так просто. Системная переменная отвечает за другое - она активирует либо деактивирует функцию. Ключ в реестре же, ответственен за то будет или не будет присутствовать иконка данной функции в статус-баре. Мне нужно получить второе.
Browning Zed вне форума  
 
Непрочитано 06.08.2021, 10:25
#4023
Кулик Алексей aka kpblc
Moderator

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


Провокационные вопросы
1. Если поменять в самом каде - в реестре данные меняются?
2. Если "снаружи" руками поменять в реестре данные - статусная строка меняется? Если да, то сразу или нет?
3. Если реестр правился снаружи, что будет после выхода из када?

Что-то у меня подозрения, что на лиспе подобное нереализуемо, да и не особо надо конечному пользователю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2021, 11:37
#4024
Browning Zed


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


1. Да.
2. Статус-бар меняется, но только после перезапуска автокада.
3. Ничего необычного, стандартный выход из программы.
Browning Zed вне форума  
 
Непрочитано 06.08.2021, 12:05
#4025
Кулик Алексей aka kpblc
Moderator

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


Ответ на второй вопрос - ключевой.
По поводу третьего: допустим, настройка включена. Меняется реестр, и тут же выход из ACAD. Что окажется в реестре?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2021, 12:22
#4026
Browning Zed


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ответ на второй вопрос - ключевой.
Ну, меня и в таком виде бы устроило, с перезапуском программы.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Меняется реестр, и тут же выход из ACAD. Что окажется в реестре?
Немного не понял как смоделировать подобную ситуацию. Изменить реестр с одновременным выходом из акада?
Browning Zed вне форума  
 
Непрочитано 06.08.2021, 12:41
#4027
Кулик Алексей aka kpblc
Moderator

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


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


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


Остается значение, которое задавалось в реестре "вручную".
Browning Zed вне форума  
 
Непрочитано 24.08.2021, 11:56
#4029
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 760


Прошу помощи! Я в лиспе не силен. Собираю лисп как сборник обычных команд автокада.
Можно ли в лиспе запустить выполнение нескольких других лиспов?
AMDen на форуме  
 
Непрочитано 24.08.2021, 12:19
#4030
Кулик Алексей aka kpblc
Moderator

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


Можно, почему нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.08.2021, 12:22
#4031
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 760


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно, почему нет?
Как это сделать?
AMDen на форуме  
 
Непрочитано 24.08.2021, 13:06
#4032
Кулик Алексей aka kpblc
Moderator

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


Примерно так же, как вызываются стандартные функции. Я искренне не понимаю, в чем собственно "затык"?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.08.2021, 13:11
#4033
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 760


(command "CFTALL")
Пишет Неизвестная команда. Хотя если ввести в ком. строке CFTALL, все работает.
AMDen на форуме  
 
Непрочитано 24.08.2021, 13:38
#4034
Кулик Алексей aka kpblc
Moderator

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


Вызывай как
Код:
Естественно, код должен быть загружен. Что за функция / команда, за что отвечает и что делает - вопросы не ко мне.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.08.2021, 13:45
#4035
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 760


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вызывай как
Код:
[Выделить все]
1
(c:cftall)
Благодарю, теперь работает.
AMDen на форуме  
 
Непрочитано 30.08.2021, 09:10
#4036
posetitel


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


Товарищи, помогите с командой: как сделать слой с именем из буфера обмена?
есть простой лисп
(defun c:sloy ()
(command "-слой" )
(command "с" pause ^C^C)
(command "ПЛИНИЯ")
)
нужно, чтобы имя слоя не вводилось руками, а бралось из буфера и дальше выполнялась команда "ПЛИНИЯ"
posetitel вне форума  
 
Непрочитано 30.08.2021, 09:31
#4037
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ищите получение на лиспе содержимого буфера (встроенных методов вроде нет - так что через костыли), проверка: - что строка и не содержит запрещенных символов, и является ключем в таблице слоев - ну задавайте через тот же CLAYER.

----- добавлено через ~34 мин. -----
и при этом нет никаких гарантий, что в процессе работы другие программы не захотят использовать буфер обмена для своих нужд - он (буфер обмена) никак не защищен от изменений
Сергей812 вне форума  
 
Непрочитано 30.08.2021, 10:07
#4038
posetitel


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


костыли... печально это, думал быстренько можно просто командой сделать.
задача то по сути простая: скопировал из ворда название слоя, с помощью команды вызывающей лиспа создал такой слой в автокаде и начал сразу чертить в нем полилинию
posetitel вне форума  
 
Непрочитано 30.08.2021, 13:01
1 | #4039
koMon


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


ну можно и без костылей. проверки на правильность имени слоя нет.
Код:
[Выделить все]
 (defun c:pline_cb_layer ()
	(command "._pasteclip" '(1e10 1e10))
	(setq layer_mtext (entlast))
	(if (= "AcDbMText" (vla-get-objectname (vlax-ename->vla-object (setq layer_mtext (entlast)))))
			(progn
				(vl-catch-all-apply 'vla-add (list (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) 
												   (setq layer_name (vla-get-textstring (vlax-ename->vla-object layer_mtext)))
											 )
				)
				(setvar 'clayer layer_name)
				(vla-erase (vlax-ename->vla-object layer_mtext))
				(command "_.pline" pause)
			)
			(progn
				(vla-erase (vlax-ename->vla-object layer_mtext))
				(alert "В буфере обмена не текст!")
			)
	)
)
koMon вне форума  
 
Непрочитано 01.09.2021, 14:21
#4040
40in


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


Добрый день всем гуру Автокада!
Я пересел на новый компьютер и столкнулся с проблемой. Перестали работать некоторые мои программы.
В частности перестали програмно заполнятся динамические блоки в мультивыноске. Вот такой кусочек кода:

Код:
[Выделить все]
 (setq dl_trass 1589.2658
      kab      "32"
)
(setq pktochisk (getpoint "ВВЕДИТЕ 1 ТОЧКУ\n"))
(command "_cMLEADERSTYLE" "ВыноскиТрасса")
(command				;Начало COMMAND
  "_mleader"
  "С"
  pktochisk
  (mapcar '+ '(5 5) pktochisk)
  "32"
  (rtos dl_trass 2 0)
)
На старом компе AutoCad 2014, WinXP, х32
Новый комп AutoCad 2020, Win10, х64
Может быть кто-нибудь подскажет что делать, и куда копать? А то не хочется переделывать кучу утилит.....
Вложения
Тип файла: dwg
DWG 2010
Тест.dwg (63.4 Кб, 4 просмотров)
40in вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46