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

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 1971720
 
Непрочитано 23.08.2013, 11:12
#2021
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


gomer, в ответе твоём уловил намёк. Пошёл штудировать "Полещука".
Спасибо.
_______________
Намека не понял:
У Полещука на стр. 116, где "Функция Entget": "10" - координаты начальной точки, "11" - координаты конечной точки.
Для проверки нарисовал полилинию с несколькими вершинами. Ком.строка выдала все вершины под кодом "10". Что ж, беру за основу практику.

Последний раз редактировалось MrBrown, 23.08.2013 в 11:18.
MrBrown вне форума  
 
Непрочитано 23.08.2013, 11:16
1 | #2022
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Зачем там лямбда в запросе?
Отрезок - это LINE. У него под кодом 10 _ начальная точка в мировой СК, под кодом 11 - конечная точка в мировой СК.
У Вас LWPOLYLINE - это простая "плоская" полилиния. У нее под кодами 10 координаты всех вершин, их может быть очень много, поэтому неразумно им давать коды 10, 11, 12... Причем координаты ДВУХМЕРНЫЕ в системе координат ОБЪЕКТА.
Штудировать в этом плане лучше DXF Reference.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.08.2013, 11:22
#2023
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


Do$, ну, если честно, я выдрал эту строчку с лямбдой из какого-то макроса на форуме и, начитавшись "Маркса", решил с ней разобраться. И, как видно, влип. Спасибо за ссылку. И, да, сам же нарисовал полилинию, а хочу коды отрезка. Невнимательность, однако.
_________________
С отрезком все получилось - и "10", и "11".

А такой вопрос: есть ли способ производить загрузку макроса побыстрее? Или каждый раз, изменив его, надо идти по пути "Сервис-приложения-загрузить...".

Последний раз редактировалось MrBrown, 23.08.2013 в 11:33.
MrBrown вне форума  
 
Непрочитано 23.08.2013, 11:33
1 | #2024
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Если Вы программируете во встроенном редакторе VLIDE, то там по сочетаниям клавиш или кнопками можно выполнить быстро загрузку.
http://autolisp.ru/2009/09/10/vlide-misc-01/
http://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.08.2013, 12:32
#2025
skkkk


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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
А такой вопрос: есть ли способ производить загрузку макроса побыстрее? Или каждый раз, изменив его, надо идти по пути "Сервис-приложения-загрузить...
А если в блокноте, то сохраненный файл lsp можно мышкой перетащить в окно Автокада, либо вывести на панель новую кнопку и на нее повесить макрос
Код:
[Выделить все]
^C^C(load "test.lsp");test
Каждый раз при нажатии на кнопку лисп будет подгружаться.
Кстати, это только у меня VLIDE не понимает кириллицу?
skkkk вне форума  
 
Непрочитано 23.08.2013, 12:35
1 | #2026
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
Каждый раз при нажатии на кнопку лисп будет подгружаться.
Ну почему не в редакторе VLIDE нажимать кнопку????
Цитата:
Кстати, это только у меня VLIDE не понимает кириллицу?
Пишите сразу в редакторе.
P.S. Ну писали же в этой теме... о редакторе VLIDE.
Запускайте оттуда же!
Отладка там же пошагово через точки останова и т.д. и т.п.
Зачем усложнять себе жизнь?
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 23.08.2013, 12:45
#2027
skkkk


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


Ну не легла у меня душа к VLIDE. Возможно от невежества... Я настроил Notepad++ и уже привык.
Добавил автозавершение и подсветку, в том числе vla-функций... Сворачивание блоков текста также очень удобно, множественная замена текста. Подсветка всех повторений выделенной части текста, например, переменной. Автоматическое создание резервных копий. Всем этим активно пользуюсь, но никого не агитирую, только мое скромное мнение. Хотя, признаюсь, иногда руки тянутся, влекомые авторитетом уважаемых программистов, разобраться с VLIDE, но пока так и не дошли
Но знаю точно, не один я такой, и это несколько успокаивает. Тем более, что я всего лишь любитель.
А писать сразу во VLIDE как, если я часто беру коды с форума и допиливаю под себя?
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 107
Размер:	352.4 Кб
ID:	110373  

Последний раз редактировалось skkkk, 23.08.2013 в 13:24.
skkkk вне форума  
 
Непрочитано 23.08.2013, 13:22
1 | #2028
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Кириллицу понимает. Есть проблема с копипастом (та же, что и с командной строкой), решается сменой текущего языка на русский перед копированием-вставкой.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.08.2013, 14:13
1 | #2029
Кулик Алексей aka kpblc
Moderator

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


Все она понимает. Просто при копировании "откуда-то" в этом "откуда-то" должна быть включена русская раскладка...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.08.2013, 14:24
#2030
skkkk


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
решается сменой текущего языка на русский перед копированием-вставкой
Цитата:
Сообщение от Кулик Алексей aka kpblc
Все она понимает. Просто при копировании "откуда-то" в этом "откуда-то" должна быть включена русская раскладка...
Действительно. Или еще можно сохранить файл, а затем открыть его во VLIDE (меню Файл->Открыть файл...). Тогда с кириллицей все в порядке. И как оказалось, в 2011-м Акаде во VLIDE уже есть подсветка vla-функций. Похоже, может оказаться удобным писать код в Notepad++, а отладку производить в редакторе VLIDE. Попробуем...
skkkk вне форума  
 
Непрочитано 23.08.2013, 14:31
#2031
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
во VLIDE уже есть подсветка vla-функций
Она и в 2004 была... Достаточно было выполнить (vl-load-com)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.08.2013, 14:51
#2032
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Даже больше: есть подсветка функций, написанных на ObjectARX/NET и подгруженных в AutoCAD.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.08.2013, 15:15
#2033
Кулик Алексей aka kpblc
Moderator

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


Естественно! А если tbl импортнешь корректно, так еще и левые методы и свойства станут подсвечиваться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.08.2013, 15:49
#2034
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Мммм... Это, например, методы работы с excel-word?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.08.2013, 16:31
1 | #2035
Кулик Алексей aka kpblc
Moderator

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


И это тоже. Основная проблема - определить, какую tlb надо импортировать, и ее путь. Но в принципе это решается, насколько я помню.
ИМХО - это аналог раннего связывания со всеми его плюсами и минусами. Лично я предпочитаю работать с поздним связыванием, поскольку позднее немного универсальнее, но при этом и затратнее (по времени, по скорости...).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.08.2013, 13:53
#2036
dirge


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


Здравствуйте, подскажите пожалуйста у функции ssget можно как-то запротектить выбор объектов которые уже в наборе в другом наборе? Суть такая я в цикле перебираю координаты и в набор попадают объекты, можно как-то сделать чтобы одинаковые объекты потом не копировались в новый набор.
Сам код:
Код:
[Выделить все]
   (setq i 0)
  (while (< i (length positions))
    (setq objects
	   (vl-remove-if
	     'listp
	     (mapcar 'cadr (ssnamex (ssget "_CP" (nth i positions))))
	   )
    )
    (setq pos (cons objects pos))
    (setq i (1+ i))
  )
dirge вне форума  
 
Непрочитано 27.08.2013, 23:48
#2037
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Функции SSMEMB - проверка наличия примитива в наборе и SSDEL - удаление примитива из набора.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 16.09.2013, 22:06
#2038
chicot


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


Неожиданно столкнулся с проблемой создания набора из динамических блоков.
Симптомы:
После вставки динамического блока в пространство модели, пробую извлечь его имя с помощью
Код:
[Выделить все]
  (setq UMR_bJIOKA (cdr(assoc 2 (entget (car (entsel))))))
. На выходе все в ажуре (т.е. в случае с примером из прилагаемого файла, получаем "flower"). Теперь видоизменим блок с помощью динамической операции "отразить" (flip).Опять запускаем запрос на имя
Код:
[Выделить все]
 (setq UMR_bJIOKA (cdr(assoc 2 (entget (car (entsel))))))
... и получаем удар в пах , а именно "*U6" !!! Причем характкрно, что если открыть свойства этого блока в КАДе, то там английским по белому в поле "имя" значится как раз "flower", а никакое не "*U6".
На даный момент выяснил, что *U это признак временного блока. Но , увы, сие никак не сдвинуло ситуацию с мертвой точки. Просьба ко всем завсегдатаям "списочного" пантеона объяснить простолюдину где грабли, на которые я наступаю. Файл с примером экспериментального блока прилагаю:
http://files.mail.ru/AB7D56C47B8941609F904FBF2205B25C
chicot вне форума  
 
Непрочитано 17.09.2013, 17:16
#2039
Кулик Алексей aka kpblc
Moderator

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


Сам же находил тему: http://forum.dwg.ru/showthread.php?t=85454
Там есть соответствующие коды
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.09.2013, 17:56
#2040
chicot


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


Да, огромное спасибо! Уже разобрался. Приношу свои искренние "Я больше не буду" Но справедливости ради, попробуйте забить в поиск "Создание набора из динамических блоков" (а меня именно ssget с фильтром по имени интерисовал), ну или просто "Динамические блоки". Это беда всех форумов - поиск не инструмет, а большая рулетка. Да да да - нужно уметь формулировать запрос! Но скажите, Бога ради, что еще нужно было ввести в поле поиска, что бы попасть на http://forum.dwg.ru/showthread.php?t=85454 ? Я там побывал только после того как меня Земляк носом ткнул во время общения в Скайпе.
chicot вне форума  
Ответ
Вернуться   Форум 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