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

Вернуться   Форум 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.
Просмотров: 2048290
 
Непрочитано 28.10.2014, 22:20
#2301
Кулик Алексей aka kpblc
Moderator

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


Открываешь экземпляр MS EXcel, в нем получаешь указатель на коллекцию рабочих книг - и потом уже собственно открытие файла.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2014, 23:24
#2302
skkkk


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


Цитата:
Сообщение от Curiosity Посмотреть сообщение
А как можно сделать так чтобы
(command "_rectang" pause pause)
повторялось до тех пор пока пользователь не нажмет enter или space?
Цитата:
Сообщение от skkkk Посмотреть сообщение
Вариант 1 (лисп):
Цитата:
Сообщение от Curiosity Посмотреть сообщение
Это не совсем то что мне нужно
Мне надо прервать _rectang без прекращения работы лиспа, чтобы лисп дальше выполнялся
(defun c:.... ()
........
(while (not ("Проверка нажатия enter или space"))
(command "_rectang" pause pause)
)
........
)
Извиняюсь, виноват - не проверил условие выхода по Enter. Значит, перед отрисовкой прямоугольника придется запрашивать точки. Если совсем по-простому, то будет примерно так:
Код:
[Выделить все]
 (defun C:TEST ( / pt1 pt2)
    (vl-cmdf "_PLINE" pause pause "")
	(setq pt1 T pt2 T)
	(while (and pt1 pt2)
		(setq pt1 (getpoint "\nПервый угол: "))
		(if pt1 (setq pt2 (getcorner pt1 "\nВторой угол: ")))
		(vl-cmdf "_RECTANG" "_none" pt1 "_none" pt2)
	)
    (vl-cmdf "_CIRCLE" pause pause)
)
skkkk вне форума  
 
Непрочитано 29.10.2014, 00:37
#2303
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если совсем по-простому
это не по простому. это по куринному...
gomer вне форума  
 
Непрочитано 29.10.2014, 04:01
#2304
skkkk


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


Offtop: Отвергаешь - предлагай. А так - всё это болтовня и флуд. Причем с ошибками. С пятью!
skkkk вне форума  
 
Непрочитано 29.10.2014, 09:56
#2305
kurstep


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Открываешь экземпляр MS EXcel, в нем получаешь указатель на коллекцию рабочих книг - и потом уже собственно открытие файла.
Спасибо за ответ...Но мне так не понять, я представлял увидеть уже чтото похожее на код)
kurstep вне форума  
 
Непрочитано 29.10.2014, 10:03
#2306
Кулик Алексей aka kpblc
Moderator

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


kurstep, так ты свой вариант покажи Кроме того, вариантов работы с Excel из-под лиспа немеряно: http://www.google.ru/cse?cx=partner-...cel&gsc.page=1

----- добавлено через 39 сек. -----
Туда же (первая ссылка по результатам поиска): http://forum.dwg.ru/showthread.php?t=8147
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.10.2014, 19:19
#2307
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
С пятью!
вот ты бы логику продумал, чем чужие ошибки считать. С какого бодуна у тебя точки вдруг булевыми стали???
gomer вне форума  
 
Непрочитано 29.10.2014, 19:34
#2308
skkkk


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


Вот и рассказал бы, как правильно, чем обзываться
Почему я не могу для запуска цикла сначала их "заБУлить", а потом "заТОчить"? Чем чревата такая смена типа?
Первый алгоритм, который пришел мне в голову. Может, я пропустил тот урок?
Расскажи, пожалуйста, как правильно?
skkkk вне форума  
 
Непрочитано 29.10.2014, 20:36
#2309
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Расскажи, пожалуйста, как правильно?
правильно тут никак
а если по простому, то как минимум так, причем это еще без ловли блох
Код:
[Выделить все]
[lisp](defun c:test (/ *error* pt1 pt2)
;;; тут могла быть ваша реклама
;;; (fefun  *error* ( msg) ...
  (if
    (and (setq pt1 (getpoint "\nНачальная точка <Отмена>: "))
	 (progn	(initget 1)
		(setq pt2 (getpoint pt1 "\nКонечная точка: "))
	 )
    )
     (vl-cmdf "_.PLINE" "_none" pt1 "_none" pt2 "")
  )

  (while
    (and (setq pt1 (getpoint "\nПервый угол <Завершить>: "))
	 (progn	(initget 1)
		(setq pt2 (getcorner pt1 "\nВторой угол: "))
	 )
    )
     (vl-cmdf "_.RECTANG" "_none" pt1 "_none" pt2)
  )
  (if
    (setq pt1 (getpoint "\nЦентр <Отмена>: "))
     (vl-cmdf "_.CIRCLE" pt1 pause)
  )
)/LISP]
gomer вне форума  
 
Непрочитано 29.10.2014, 22:43
#2310
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


gomer, вот молодец, так бы сразу и .. И не надо было людям грубить, б.. р..!
Nike вне форума  
 
Непрочитано 29.10.2014, 23:16
#2311
gomer

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


Nike,
gomer вне форума  
 
Непрочитано 30.10.2014, 10:58
#2312
Curiosity

Конструктор
 
Регистрация: 10.03.2014
Якутск
Сообщений: 18


Извиняюсь за глупые вопросы
Почему в vlide при отладке кода с функцией lambda, выскакивает окно "источник"? при этом отладка кода останавливается
Curiosity вне форума  
 
Непрочитано 30.10.2014, 13:53
#2313
wahir


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


приветствую. надеюсь, правильно понимаю, что вопросы новичков по лиспу можно задавать здесь.
посоветуйте, в какой книге удобно сведены в таблицы dxf-коды примитивов с описаниями возможных значений? а то как доходит дело до чего-то нового, пол дня парюсь что куда писать.
конкретно сейчас меня интересует создание размеров. может и не через entmake это удобно делать, подскажите как принято.
wahir вне форума  
 
Непрочитано 30.10.2014, 13:58
#2314
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Curiosity Посмотреть сообщение
Почему в vlide при отладке кода с функцией lambda, выскакивает окно "источник"? при этом отладка кода останавливается
Настройки VLIDE в студию. Ну и код не помешал бы.
Цитата:
Сообщение от wahir Посмотреть сообщение
в какой книге удобно сведены в таблицы dxf-коды примитивов с описаниями возможных значений?
Любая книга по лиспу за авторством Полещука. Я бы брал "постарше"
Цитата:
Сообщение от wahir Посмотреть сообщение
создание размеров. может и не через entmake это удобно делать, подскажите как принято.
ИМХО принято так, как удобно программисту. Можно через entmake, можно через vla, можно через командные методы - вариантов масса.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.10.2014, 14:52
#2315
Curiosity

Конструктор
 
Регистрация: 10.03.2014
Якутск
Сообщений: 18


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Настройки VLIDE в студию. Ну и код не помешал бы.
Вот скриншоты, в настройках все по умолчанию я ничего не менял

Вот кусок кода
(foreach item (_dwgru-conv-pickset-to-list ss1)
(setq xx (vl-list* (vl-sort (mapcar 'cadr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget item))) '<) xx))
(setq yy (vl-list* (vl-sort (mapcar 'caddr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget item))) '<) yy))
)
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 36
Размер:	261.1 Кб
ID:	137844  
Curiosity вне форума  
 
Непрочитано 30.10.2014, 15:39
#2316
Кулик Алексей aka kpblc
Moderator

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


Попробуй заменить ' на function. Например, так:
Код:
[Выделить все]
 (foreach item (_dwgru-conv-pickset-to-list ss1)
  (setq xx (vl-list* (vl-sort (mapcar
                                (function cadr)
                                (vl-remove-if-not
                                  (function
                                    (lambda (x)
                                      (= (car x) 10)
                                      ) ;_ end of lambda
                                    (entget item)
                                    ) ;_ end of function
                                  ) ;_ end of vl-remove-if-not
                                ) ;_ end of mapcar
                              '<
                              ) ;_ end of vl-sort
                     xx
                     ) ;_ end of vl-list*
        yy (vl-list*
             (vl-sort (mapcar
                        (function caddr)
                        (vl-remove-if-not
                          (function
                            (lambda (x)
                              (= (car x) 10)
                              ) ;_ end of lambda
                            ) ;_ end of function
                          (entget item)
                          ) ;_ end of vl-remove-if-not
                        ) ;_ end of mapcar
                      '<
                      ) ;_ end of vl-sort
             yy
             ) ;_ end of vl-list*
        ) ;_ end of setq
  ) ;_ end of foreach
Поставь соответствующие точки останова (теперь они работать будут) и смотри, что и как у тебя получается
P.S. Меня интересовало состояние меню "Debug", ну да ладно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.10.2014, 03:49
#2317
Curiosity

Конструктор
 
Регистрация: 10.03.2014
Якутск
Сообщений: 18


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй заменить ' на function. Например, так:
Код:
[Выделить все]
 (foreach item (_dwgru-conv-pickset-to-list ss1)
  (setq xx (vl-list* (vl-sort (mapcar
                                (function cadr)
                                (vl-remove-if-not
                                  (function
                                    (lambda (x)
                                      (= (car x) 10)
                                      ) ;_ end of lambda
                                    (entget item)
                                    ) ;_ end of function
                                  ) ;_ end of vl-remove-if-not
                                ) ;_ end of mapcar
                              '<
                              ) ;_ end of vl-sort
                     xx
                     ) ;_ end of vl-list*
        yy (vl-list*
             (vl-sort (mapcar
                        (function caddr)
                        (vl-remove-if-not
                          (function
                            (lambda (x)
                              (= (car x) 10)
                              ) ;_ end of lambda
                            ) ;_ end of function
                          (entget item)
                          ) ;_ end of vl-remove-if-not
                        ) ;_ end of mapcar
                      '<
                      ) ;_ end of vl-sort
             yy
             ) ;_ end of vl-list*
        ) ;_ end of setq
  ) ;_ end of foreach
Поставь соответствующие точки останова (теперь они работать будут) и смотри, что и как у тебя получается
P.S. Меня интересовало состояние меню "Debug", ну да ладно.
При такой конструкции vlide выдает ошибку
Цитата:
; ошибка: неверный синтаксис функции: ((LAMBDA (X) (= (CAR X) 10)) (ENTGET ITEM))
Curiosity вне форума  
 
Непрочитано 31.10.2014, 09:27
#2318
Кулик Алексей aka kpblc
Moderator

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


Вот веришь - я тупо заменил ' на function и отформатировал код. Не больше.
Код:
[Выделить все]
 (defun _dwgru-conv-pickset-to-list (value / tab item)
  (repeat (setq tab  nil
                item (sslength value)
                ) ;_ end setq
    (setq tab (cons (ssname value (setq item (1- item))) tab))
    ) ;_ end repeat
  ) ;_ end defun

(defun tt (/ xx yy ss1)

  (setq ss1 (ssget))

  (foreach item (_dwgru-conv-pickset-to-list ss1)
    (setq xx (vl-list*
               (vl-sort
                 (mapcar
                   (function cadr)
                   (vl-remove-if-not
                     (function
                       (lambda (x)
                         (= (car x) 10)
                         ) ;_ end of lambda
                       ) ;_ end of function
                     (entget item)
                     ) ;_ end of vl-remove-if-not
                   ) ;_ end of mapcar
                 '<
                 ) ;_ end of vl-sort
               xx
               ) ;_ end of vl-list*
          ) ;_ end of setq
    (setq yy (vl-list*
               (vl-sort
                 (mapcar
                   (function caddr)
                   (vl-remove-if-not
                     (function
                       (lambda (x)
                         (= (car x) 10)
                         ) ;_ end of lambda
                       ) ;_ end of function
                     (entget item)
                     ) ;_ end of vl-remove-if-not
                   ) ;_ end of mapcar
                 '<
                 ) ;_ end of vl-sort
               yy
               ) ;_ end of vl-list*
          ) ;_ end of setq
    ) ;_ end of foreach
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.11.2014, 18:46
#2319
Сергей812


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


Здравствуйте. Подскажите, пожалуйста, назначение функции vla-item? Нашел только примеры использования, а описание - нет(
Сергей812 вне форума  
 
Непрочитано 04.11.2014, 19:00
1 | #2320
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,105


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Здравствуйте. Подскажите, пожалуйста, назначение функции vla-item? Нашел только примеры использования, а описание - нет(
Цитата:
Gets the member object at a given index in a collection, group, or selection set.
Получает объект заданного номера из коллекции, группы или набора объектов.

http://help.autodesk.com/view/ACD/20...6-D3C3C349475B
SetQ вне форума  
Ответ
Вернуться   Форум 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