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

Вернуться   Форум 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.
Просмотров: 2052030
 
Непрочитано 14.08.2014, 16:58
#2221
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Средствами lisp'a - нереально.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Крайне сложно - в теории лисп вобще не факт что откуда-то загружен
Ну если имя файла доподлинно и заранее неизвестно, тогда я прогнал.
skkkk вне форума  
 
Непрочитано 14.08.2014, 17:10
#2222
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


Спасибо за ответы.

Цитата:
Сообщение от skkkk Посмотреть сообщение
Код:
[Выделить все]
(setq path (findfile "Lisp.lsp"))
и далее с помощью функций обработки строк приводить к нужному виду. Не то?
Насколько я понял, findfile ищет по путям поиска файлов, а мне нужно, чтобы этот лисп нашёл из какой папки он запущен и прописался в пути доступа.

Хотел сделать миниустановщик, как в VetCAD. Чтобы установить VetCAD, нужно загрузить файл "SetupVetCAD_XXXX.arx".
Он тут же запускается и прописывает нужные пути доступа. Но насколько я понял, это уже средствами arx нужно делать.

Хорошо, средствами LISP не получится. В какую тогда сторону смотреть? net или arx?
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.
kha вне форума  
 
Непрочитано 14.08.2014, 17:16
1 | #2223
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от kha Посмотреть сообщение
В какую тогда сторону смотреть? net или arx?
Не принципиально, можно еще COM, а еще можно установщиком вначале записать в самом лиспе (в реестре) путь к нему-же. Я обычно ставлю установщиком в %appdata%...
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 14.08.2014 в 17:23.
Дима_ вне форума  
 
Непрочитано 14.08.2014, 17:25
#2224
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


Дима_, пока что прописываю пути явно. В начале накидал переменных с путями.

Кулик Алексей aka kpblc, нашёл твою тему по этому поводу: http://www.caduser.ru/forum/index.ph...#message127730

по прочтению темы придумал, как можно быстро побороться с возможным переименованием имени сервера. Прописываю имя сервера в переменную в начале лиспа, нужные пути получаю strcat'ом
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.

Последний раз редактировалось kha, 14.08.2014 в 17:40.
kha вне форума  
 
Непрочитано 16.08.2014, 17:32
#2225
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


Нашёл, в каком месте взять путь к каталогу, из которого произведена последняя загрузка лиспа через диалог _appload.

После загрузки приложения AutoCAD прописывает путь в реестр:

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXXX\ACAD-AXXX:XXX\Profiles\[имя профиля]\Dialogs\Appload]

параметр MainDialog

Появился ещё один вопрос - как сделать так, чтобы лисп запустился автоматически после его загрузки через диалог _appload?
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.
kha вне форума  
 
Непрочитано 16.08.2014, 18:01
1 | #2226
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от kha Посмотреть сообщение
как сделать так, чтобы лисп запустился автоматически после его загрузки через диалог _appload?
В самом теле лиспа после закрывающей скобки defun прописать на исполнение определенную в этом лиспе команду или функцию.
Например:
Код:
[Выделить все]
(defun C:TEST ()
	...........
	...........

)
(C:TEST)
skkkk вне форума  
 
Непрочитано 16.08.2014, 20:43
#2227
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


skkkk, первым делом попробовал, но что-то пошло не так.

Сейчас получилось, благодарю

UPD: понял. Я писал (test), а надо было (c:test)

круто! теперь можно делать макросы для кнопок чуток попроще.

вместо ^C^C(load "test") test
можно писать ^C^C(load "test")
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.

Последний раз редактировалось kha, 16.08.2014 в 20:51.
kha вне форума  
 
Непрочитано 17.08.2014, 18:08
#2228
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kha Посмотреть сообщение
как сделать так, чтобы лисп запустился автоматически после его загрузки через диалог _appload?
Добавить самовызов функции.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.08.2014, 18:15
#2229
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Добавить самовызов функции.
Алексей, а это как? Не так ли, как я толковал в #2221? Offtop: Подозреваю, что ты не заметил еще одну страницу темы
skkkk вне форума  
 
Непрочитано 17.08.2014, 18:30
#2230
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Не так ли, как я толковал в #2221?
Да, так
Цитата:
Сообщение от skkkk Посмотреть сообщение
Подозреваю, что ты не заметил, что есть еще одна страница темы
Учитывая, что отвечал я с телефона, думаю - мне простительно

----- добавлено через 21 сек. -----
Только что сел за комп...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.08.2014, 20:07
#2231
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Фигней страдаете, господа писатели. Есть нормальный способ загрузки, придуманный автодеском давным давно. Сейчас это выглядит как связка CUIX и MNL. Это самый простой вариант, в котором есть и меню и панели инструментов с иконками. Причем команды подгружаются из строго определенного места. Более того, в cuix можно прописать нужные лиспы и они будут подгружаться автоматически. Хотя ИМХО это уже лишнее. Из mnl все что нужно и так прекрасно подгружается
gomer вне форума  
 
Непрочитано 17.08.2014, 23:10
#2232
Кулик Алексей aka kpblc
Moderator

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


gomer, http://adn-cis.org/posledovatelnost-...v-autocad.html и http://adn-cis.org/autocad-autoload-security.html видел? И потом, вопрос был совсем не про это
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2014, 02:10
#2233
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
видел?
Видал, вот из-за таких деятелей и наворотили непотребностей. а ведь все так красиво начиналось... а кончилось фондом помощи детям зимбабве... а кто теперь эти реакторы пользует? Еще раз повторюсь, чтоб не возникало вопросов типа а откуда ж у меня лисп загрузился, нужно разобрать авгиевы конюшни в системе и грузить все из одного места, обычно это
Код:
[Выделить все]
 (strcat (getenv "PROGRAMFILES") "\\" "MySuperPuperApp2014")
gomer вне форума  
 
Непрочитано 18.08.2014, 12:58
#2234
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от kha Посмотреть сообщение
вместо ^C^C(load "test") test
можно писать ^C^C(load "test")
С этой стороны не все ли равно, где прописать слово test: в макросе на кнопку или в теле файла *.lsp?
И зачем же каждый раз подгружать лисп? Я вижу, правда два оправданных варианта:
1. Тестирование и отладка кода происходит не во встроенном VLIDE, а в блокноте. Тогда нажатие на кнопку будет каждый раз подгружать измененный код и запускать его на исполнение.
2. Запуск функции необходим при старте Автокада. Дабы не лезть в acad.lsp или acaddoc20XX.lsp, добавляем файл в автозагрузку - и он грузится при старте и тут же исполняется (например, создаются слои, стили размеров, вставляются форматки и т.д.)
В случае с кнопкой для рядового пользователя подгружать лисп стоит лишь в том случае, если он еще не загружен. Конечно, загрузка происходит очень быстро и незаметно, но это как-то плохо, не по Фен-Шую что ли...
skkkk вне форума  
 
Непрочитано 18.08.2014, 18:36
#2235
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


skkkk, чтобы было по Фен-Шую можно поставить проверку на загрузку лиспа: ^C^C(if (= c:test nil) (Load (findfile "test.lsp")) (c:test)).

Хотя да, смысл теряется. Макрос проще выглядит без автозапуска лиспа:

^C^C(if (= c:test nil) (Load (findfile "test.lsp"))) test

Как только появляется молоток, сразу же всё вокруг кажется гвоздями

Цитата:
Сообщение от skkkk Посмотреть сообщение
2. Запуск функции необходим при старте Автокада. Дабы не лезть в acad.lsp или acaddoc20XX.lsp, добавляем файл в автозагрузку - и он грузится при старте и тут же исполняется (например, создаются слои, стили размеров, вставляются форматки и т.д.)
За это спасибо, всё голову ломал, как бы от редактирования acaddoc20XX.lsp уйти.
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.

Последний раз редактировалось kha, 18.08.2014 в 18:42.
kha вне форума  
 
Непрочитано 25.08.2014, 10:23
#2236
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Прошу критики и помидоров, дабы понять, в том ли направлении мыслю в целом.
Код:
[Выделить все]
 (defun c:pk ( / pt pt1 pt2 pk oldcmd adoc *mspace*)
(vl-load-com)
       (defun *error* (msg)
	(if oldcmd (setvar "CMDECHO" oldcmd))
        (princ msg)
	(princ)
	);end error
(setq oldcmd (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
      *mspace* (vla-get-ModelSpace adoc))
(if (null curve-os)
(setq curve-os (car (entsel "\nУкажите ось: ")))
);if
(initget "Другая ось")
(setq pt (getpoint "\nУкажите точку: [Другая ось]"))
(cond 
((= pt "Другая")
(setq curve-os (car (entsel "\nУкажите другую ось: ")))
(setq pt (getpoint "\nУкажите точку: "))
)
(t nil);t
);cond
(setq pk (vlax-curve-getDistAtPoint curve-os (vlax-curve-getClosestPointTo curve-os pt))
      pt1 (getpoint "\nУкажите положение текста: ")
      pt2 (getpoint pt1 "\nУкажите поворот текста: ")
)
    (vla-put-Rotation
	(vla-addText *mspace* 
	(strcat "+" (rtos (rem pk 100) 2 1)) 
	(vlax-3d-point pt1) 
	(getvar "textsize"))
    (angle pt1 pt2)
    )
(princ (strcat "\nПоложение точки отностительно оси: " (rtos pk 2 2)))

(setvar "CMDECHO" oldcmd)
(princ) 
);end defun
собственно должна выдавать привязки точек относительно оси с возможностью смены оси
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 25.08.2014, 11:23
#2237
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
Прошу критики и помидоров
1. Зачем CMDECHO ??? Где OSMODE?
2. Что будет если ось удалена после выполнения программы?
3. Что будет если активна не модель?
4. (t nil) ?
gomer вне форума  
 
Непрочитано 25.08.2014, 11:52
#2238
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


1. почему не надо отключать эхо? привзку отключать тут не надо
2. как то не приходило в голову, что у кого то рука поднимется на такое кощунство
3. все привязки делаются только в модели ибо там же и ось и вся ситуация
4. слизано с полещука - что бы функция возвращала nil в случае когда условие не выполняется. перечитал, подумал, наверно соглашусь, лишее...

з.ы. проверил 2:
Укажите точку: [Другая ось]неверное значение аргумента: AcDbCurve 2130622808
можно спокойно задать другую ось и продолжать ваять
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 25.08.2014, 12:08
#2239
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
почему не надо отключать эхо? привзку отключать тут не надо
потому что зачем, командные методы не используются, а пользователь должен видеть, что он ввел в комстроку. В вашем случае надо не отключать, а включать...
gomer вне форума  
 
Непрочитано 25.08.2014, 12:25
#2240
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Идею понял, но... кроме entsel в самом начале и getpoint 3 раза пользователь ничего не вводит, ему на координаты что ли смотреть?
кстати, ради интереса закомментил - разницы никакой не обнаружил, значит можно совсем убрать
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
Ответ
Вернуться   Форум 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