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

Вернуться   Форум 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.
Просмотров: 1965989
 
Непрочитано 09.02.2015, 15:41
1 | #2421
Кулик Алексей aka kpblc
Moderator

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


Для этого надо писать обработчик ошибок (функцию *error*) или использовать vl-catch- функции (на autolisp.ru я показывал варианты и одного, и другого).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2015, 16:08
#2422
trushev


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


Спасибо! Тему "Код без ошибок – возможно ли?" нашел. Буду разбираться.
trushev вне форума  
 
Непрочитано 11.02.2015, 15:02
#2423
mkung


 
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165


Несколько вопросов:
1. (повтор) как программно к конфигурации печати ( например DWG To PDF.pc3) подключить файл описания принтера (например DWG To PDF New.pmp)?
2. Как из программы вызвать "проводник" - окно сохранения(открытия) файла?
3. Нужно сохранить файл перед обработкой. Как это сделать быстрее? Если использовать SaveAs - активной становится копия и при большом файле геморройно открывать старый-закрывать новый. Если через SSGET "_X" и потом WBLOCK - то можно ли быть уверенным, что чертеж будет идентичным?
Заранее благодарен.
mkung вне форума  
 
Непрочитано 11.02.2015, 15:20
#2424
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от mkung Посмотреть сообщение
(повтор) как программно к конфигурации печати ( например DWG To PDF.pc3) подключить файл описания принтера (например DWG To PDF New.pmp)?
Топик-ап, добрый день
Цитата:
Сообщение от mkung Посмотреть сообщение
Как из программы вызвать "проводник" - окно сохранения(открытия) файла?
startapp
Цитата:
Сообщение от mkung Посмотреть сообщение
Нужно сохранить файл перед обработкой. Как это сделать быстрее?
1. (command "_.save")
2. (vla-save ...
3. Похожую задачу делал на http://adn-cis.org/forum/index.php?t...sg7171#msg7171 , но результат оказался никому не нужным. Код оставил просто "на память".
Цитата:
Сообщение от mkung Посмотреть сообщение
Если через SSGET "_X" и потом WBLOCK - то можно ли быть уверенным, что чертеж будет идентичным?
Теоретически - да. Практически - еще вопрос.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2015, 15:29
#2425
mkung


 
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Цитата:

Сообщение от mkung
Нужно сохранить файл перед обработкой. Как это сделать быстрее?
1. (command "_.save")
2. (vla-save ...
3. Похожую задачу делал на http://adn-cis.org/forum/index.php?t...sg7171#msg7171 , но результат оказался никому не нужным. Код оставил просто "на память".
Сорри... КОПИЮ ФАЙЛА
mkung вне форума  
 
Непрочитано 11.02.2015, 15:40
#2426
Кулик Алексей aka kpblc
Moderator

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


Сходи по ссылке, почитай обсуждение.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.02.2015, 15:15
#2427
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Не понимаю первую скобку , что это значит, как можно по другому записать?
Код:
[Выделить все]
 
((lambda (/ res)(vlax-for sub VLA_ITEM(setq res (cons sub res))) (reverse res)))
sdv79 вне форума  
 
Непрочитано 13.02.2015, 23:48
#2428
Дима_

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


Это "локализация по месту" имени res - чтоб не засорять пространство имен - vlax-for устроен, так сказать, не в концепции лиспа - это чисто итеративная функция, а в функциональном стиле подобную "встроить" поленились - по факту функция берет vla коллекцию "VLA_ITEM" и возращает список ее item'ов - я тоже приодически использую подобнцй костыль - только "VLA_ITEM" у меня вынесен как аргумент.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 14.02.2015, 23:43
#2429
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Не понятно. Если убрать первую и последнюю скобку работать не будет. ПОЧЕМУ?
Что там происходит, какой элемент находится? Чем эту пустоту можно описать (заменить)?
sdv79 вне форума  
 
Непрочитано 15.02.2015, 00:39
#2430
Сергей812


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


а если убрать
Код:
заработает?
Сергей812 вне форума  
 
Непрочитано 15.02.2015, 19:58
#2431
Дима_

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Если убрать первую и последнюю скобку работать не будет. ПОЧЕМУ?
а у любого лиспа любую скобку(и) убери он уже по другому заработает, а в "пустоте" запускается только-что созданная функция.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.02.2015, 20:43
#2432
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Если кто знает, дайте ссылку, где об этом можно прочитать.
sdv79 вне форума  
 
Непрочитано 15.02.2015, 21:49
#2433
Сергей812


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


Чего читать то? В посте #2423 Дмитрий сказал, для чего такая конструкция:
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Это "локализация по месту" имени res - чтоб не засорять пространство имен
Может так будет понятнее

Код:
[Выделить все]
 (
 (lambda
    (/ res)
       (vlax-for sub VLA_ITEM
           (setq res (cons sub res) )
                                      )
       (reverse res)
 )
) 
Сергей812 вне форума  
 
Непрочитано 15.02.2015, 21:54
#2434
Кулик Алексей aka kpblc
Moderator

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


Или так:
(apply (function (lambda
(/ res)
(vlax-for sub VLA_ITEM
(setq res (cons sub res) )
)
(reverse res)
) '())
ЗЫ пишу с планшета, так что код не проверял и не тестировал. Могут быть косяки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.02.2015, 09:29
#2435
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Сергей812, я для себя именно в таком виде написал, поэтому не дают понимания крайние скобки (отсутствие функций).
Алексей, Ваш код не работает, но вносит ясность, это именно то о чем я спрашивал.
sdv79 вне форума  
 
Непрочитано 16.02.2015, 10:21
#2436
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Алексей, Ваш код не работает, но вносит ясность, это именно то о чем я спрашивал.
Правильно, я же скобки там не все поставил
P.S. Еще один вариант:
Код:
[Выделить все]
 (apply
  (function
    (lambda (sub / res)
      (vlax-for item sub (setq res (cons item res)))
      (reverse res)
      ) ;_ end of lambda
    ) ;_ end of function
  (list (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  )

Ну и еще один (просто работать не хочу - сил нет )
Код:
[Выделить все]
 (apply
  (function
    (lambda (/ res)
      (vlax-for item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
        (setq res (cons item res))
        ) ;_ end of vlax-for
      (reverse res)
      ) ;_ end of lambda
    ) ;_ end of function
  '()
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.02.2015, 15:03
#2437
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Алексей, спасибо. Я разобрался. Стало "легче".
Получилась конструкция
Код:
[Выделить все]
 
(setq DOC (vla-get-activedocument ; вида #<VLA-OBJECT IAcadDocument 000000000d3417e8> 
	     (vlax-get-acad-object)
	    ) ;/ vla-get-activedocument
) ;/ setq
(setq VLA_ITEM	(vla-item ; вида #<VLA-OBJECT IAcadBlock 0000000037c34e08> 
	          (vla-get-blocks
	          DOC
	          ) ;/ vla-get-blocks
	         (vla-get-effectivename VLA-OBJECT)
	        ) ;/ vla-item
) ;/ setq
(setq *VLA_ITEM (apply ; Получить список всех примитивов, входящих в блок вида (#<VLA-OBJECT IAcadAttribute 0000000035b20e48> #<VLA-OBJECT IAcadAttribute 0000000035b20f28>...
                 (function
                  (lambda (sub / res)
                   (vlax-for item sub
                   (setq res (cons item res)))
                   (reverse res)
                  ) ;/ lambda
                 ) ;/ function
                 (list VLA_ITEM)
 ) ;/ setq

sdv79 вне форума  
 
Непрочитано 18.02.2015, 09:56 entmake и entmakex
#2438
trushev


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


В прошлом веке познакомился с lisp'ом в объеме книги Ю. А. Кречко В. В. Полищук "Автокад 13: новые возможности" Москва "Диалог-МИФИ" 1996. В книге четко прописано ограничение: "... хотим добавить новый примитив, то должны использовать команды отрисовки или редактирования Автокада. Это ограничение связано с желанием защитить ГБД от неграмотного программиста: ...". Благодаря воспитательному эффекту форума обнаружил две новые для себя функции: entmake и entmakex. Безусловно такой подход на порядок, два увеличивает скорость работы lisp'а, существенно облегчает проблему отслеживания значений системных переменных. Но страх испортить ГБД остался.
На сколько защищена работа этих функций от действий "обезьяны с гранатой"?
trushev вне форума  
 
Непрочитано 18.02.2015, 10:10
#2439
Кулик Алексей aka kpblc
Moderator

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


А кто выступает в роли "обезьяны"? Если программист, но ничего не поможет. Если пользователь - то это более безопасно.
P.S. Кстати, прорекламируюсь-ка, пожалуй В свое время расписывал кое-что у себя на сайте: http://autolisp.ru/2009/09/22/programming-style/ ; http://autolisp.ru/2009/09/20/execution-speed-check/ ; http://autolisp.ru/2009/09/13/error-catch/ - ну так, для общей информации ))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2015, 10:40 entmake и entmakex
#2440
trushev


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


Алексей, спасибо за оперативный ответ. От ошибки не соответствия dxf кода типу данных не застрахован и квалифицированный программист.
(entmakex
'((0 . "LINE")
(10 0. 0. 0.)
(11 100. 10. 0.)
(8 . "СлойОтрезка")
(62 . 1)
(6 . "Continuous")
(370 . 25)
(210 0. 0. 1.)
)
Например после кода 8 вставлены координаты кода 11. Что будет в этом или подобном случае?
trushev вне форума  
Ответ
Вернуться   Форум 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