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

Вернуться   Форум 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.
Просмотров: 1965681
 
Непрочитано 22.07.2008, 14:34
#41
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


Влезу, пожалуй, немного в обучение.
По задаче из #31.
1. Как будут выбираться тексты: по одному или оптом? Для этого можно использовать разные функции: ssget, entget.
2. Это уже как более опытные порекомендуют, но начинать следовало бы с функций, оперирующих dxf-кодами объектов (примитивов), пока не лезть во всякие vla- .
3. Попробуйте пока сделать программу без проверок на ошибки, используйте тестовый файл с точно известными и правильными объектами. Потом переходите на работу с другими файлами - по мере наступания на грабли будете узнавать как эти грабли отсекать.

Итак получается: ssget, ssname, entget, assoc, atof, +, rtos, cons, subst, entmod ( или entmake). Кажется даже в порядке следования не ошибся. setq добавлять по вкусу.

Насчет numberp: посмотрите внимательнее на работу функции atof.
Олег К. вне форума  
 
Непрочитано 22.07.2008, 14:37
#42
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Например давайте попробуем написать программу складывающие 2 числа хранящиеся в однострочном тексте а результат поместить в 3й текст.
Какие функции необходимо использовать для такой программы?
ЗЫ. программу нужно не оптимизированную, а максимально простую для понимания. без vl- vla- vlr и пр.
ЗЗЫ. Также мне кажется не нужно писать нам готовую программу а потом ее разбирать. Нужно только показать куда копать и чем, естественно помагая в ошибках.
Из вредности:
Код:
[Выделить все]
(defun c:summtext (/ ent1 ent2 res)
  (if (and (setq ent1 (car (entsel "\nУкажи первый однострочник : ")))
           (setq ent2 (car (entsel "\nУкажи второй однострочник : ")))
           ) ;_ end of and
    (progn
      (setq res (+ (atof (cdr (assoc 1 (entget ent1))))
                   (atof (cdr (assoc 1 (entget ent2))))
                   ) ;_ end of +
            ) ;_ end of setq
      (princ (rtos res 2 4))
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
И вариант немного посложнее для понимания
Код:
[Выделить все]
(defun c:summtext2 (/ ent1 ent2)
  (princ
    (if
      (and (setq ent1 (car (entsel "\nУкажи первый однострочник : ")))
           (setq ent2 (car (entsel "\nУкажи второй однострочник : ")))
           ) ;_ end of and
       (strcat
         "\nSumm = "
         (rtos (apply
                 '+
                 (mapcar '(lambda (x) (atof (cdr (assoc 1 (entget x)))))
                         (list ent1 ent2)
                         ) ;_ end of mapcar
                 ) ;_ end of apply
               2
               4
               ) ;_ end of rtos
         ) ;_ end of strcat
       (strcat "\nNothing")
       ) ;_ end of if
    ) ;_ end of princ
  (princ)
  ) ;_ end of defun
P.S. Код без проверок и отлова ошибок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2008, 14:43
1 | #43
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Дохлый номер - пытаться научиться на форуме, да еще в одной ветке. Научиться-то на форуме можно, но путем самостоятельного изучения литературы, справки и анализа публикуемых на форуме программ. Только хороших (например, от VVA). К тому же набегут другие со своими задачками. Кому сумму сделать, а кому и профиль одной кнопкой построить. Кто выяснять "кто здесь главный" и т.п. Будет "пожар в публичном доме во время наводнения".

Азбуку "побуквенно" разъяснять некому и некогда. Надо учиться работать. Поместил LISP в редактор VLIDE, выделил имя функции, нажал Ctrl-F1 и видишь справку по этой функции. Смотри, изучай аргументы, результаты, и как это использовано в разбираемой программе.

Очень хорошее учебное пособие поставляется прямо с AutoCAD - в папке Tutorial\Visual LISP. Семь уроков - от самого простого до самого сложного. И всё разжевано в справке - раздел AutoLISP Tutorial. Эта справка есть и в русском варианте, kpblc её выкладывал где-то здесь.

И делать свою программу, поначалу не разбрасываясь на другие.

Колонна - очень хороший пример. Для развития.

Сначала просто спросить размеры, направление и нарисовать прямоугольник. Потом догадаться, что размеры не обязательно каждый раз вводить, а можно по умолчанию предлагать. Потом выбор из типовых сочетаний. Потом не просто прямоугольник, а с решеткой, из уголков, из двутавров. Потом в 3D. И так до упора. А по ходу совершенствования этой программы можно научиться делать и сотни других.

Разбить на логические блоки - начало, ввод, контроль данных, черчение, завершение.

Не умеешь делать "хитрые" функции и не можешь пока понять, как они работают? Не страшно. Научись просто использовать готовые, например из библиотеки DwgRuLispLib

И всё получится!
ShaggyDoc вне форума  
 
Непрочитано 22.07.2008, 14:46
#44
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Кулик Алексей aka kpblc, спасибо но хотелось эту програмулю самому написать - уж больно простая... Лучше напиши мне прогу по теме с коэффициентом сжатия
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 22.07.2008, 14:50
#45
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Люди добрые, подскажите где взять перечень функций лисп, весь Хювенен прошелся (Т1) там только Get, никаких подвариантов.
(Но только так чтобы было в свободном скачивании.)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 14:52
#46
Кулик Алексей aka kpblc
Moderator

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


Red Nova, vlide -> F1. Там все (ну или почти все )
Shoorup, веришь - элементарно некогда Догадываюсь, что там надо многострочники переформатировать (снимать \W), но мозги сейчас другим забиты
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2008, 14:59
#47
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


ShaggyDoc,

Цитата:
Очень хорошее учебное пособие поставляется прямо с AutoCAD - в папке Tutorial\Visual LISP. Семь уроков - от самого простого до самого сложного. И всё разжевано в справке - раздел AutoLISP Tutorial. Эта справка есть и в русском варианте, kpblc её выкладывал где-то здесь.
У меня таких папок нет (AutoCAD2008, 2009), дал поиск, файлы тоже не нашел.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 15:00
#48
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


ну хоть подскажи может я сам смогу ее сделать... не думаю что она ну очень сложная.
Например мне нужно при выборе текста однострочного получить ее коэффициент сжатия. Как это сделать?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 22.07.2008, 15:00
#49
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


А что такое Vlide?
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 22.07.2008, 15:14
#50
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


ShaggyDoc,
Нашел. Это теперь тут
AutoCAD 2009\Help
файлы acad_alg.chm, acad_alr.chm, acad_alt.chm
Почитаю
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 15:16
#51
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


http://lisp.narod.ru/l1.html
http://aco.ifmo.ru/~nadinet/html/alisp.phtml в частности
http://aco.ifmo.ru/~nadinet/html/lectures/lect_lsp.html и
Глава4
http://www.ssga.ru/metodich/autocad/contents.html - ГЛАВА 12
FAQ по LISP писалось для версий Автокада 12-13, но на 95% справедливо и по сей день
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.07.2008, 15:17
#52
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Shoorup Посмотреть сообщение
при выборе текста однострочного получить ее коэффициент сжатия. Как это сделать?
DXF группа 41
(cdr (assoc 41 (entget <имя примитива>)))

Цитата:
Сообщение от Red Nova Посмотреть сообщение
А что такое Vlide?
Если в комстроке набрать vlide, то откроется встроенный в Автокад редактор, в котором и надо работать с исходиками АвтоЛИСП.
Alaspher вне форума  
 
Непрочитано 22.07.2008, 15:18
#53
Кулик Алексей aka kpblc
Moderator

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


Это не форум, это филиал чата местного значения
Цитата:
Сообщение от Red Nova Посмотреть сообщение
ShaggyDoc,
У меня таких папок нет (AutoCAD2008, 2009), дал поиск, файлы тоже не нашел.
Код:
[Выделить все]
c:\Program Files\AutoCAD 2008\Tutorial\VisualLISP\
Цитата:
Сообщение от Shoorup Посмотреть сообщение
ну хоть подскажи может я сам смогу ее сделать... не думаю что она ну очень сложная.
Например мне нужно при выборе текста однострочного получить ее коэффициент сжатия. Как это сделать?
См.DXF Reference, объект TEXT: 41-я группа. Также в DwgRuLispLib - Модификация ename-представлений примитивов У тебя проблема будет не в модификации примитива, а в вычислении. Там не отрезки, а полилинии. Дополнительная аналитика.
Цитата:
Сообщение от Red Nova Посмотреть сообщение
А что такое Vlide?
Visual Lisp Integrated Developmet Environment (вроде так расшифровывается): интегрированная среда разработки Visual Lisp. Также команда в AutoCAD.
---
Мать моя... Сколько написали, пока я о телефону общался...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2008, 15:24
#54
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
"пожар в публичном доме во время наводнения".
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.07.2008, 15:33
#55
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


короче мне такое не осилить... может ктонить сможет мне всетаки помочь с прогой с коэффициентом - я ее сам буду год писать
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 22.07.2008, 15:57
#56
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, Продолжим пример с колонной. Я нашел в хелпе весь список функций. От туда
Цитата:
Getreal - Pauses for user input of a real number, and returns that real number
Так что она нам и нужна.

Итак.
Код:
[Выделить все]
 (defun C:Колонна (/ columnwidth)
  (setq columnwidth (getreal T "Введите ширину колонны <Выход>: "))
А дальше опять торможу.
К стати, а зачем после getreal ставить “T”?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 16:11
#57
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Red Nova Посмотреть сообщение
К стати, а зачем после getreal ставить “T”?
Не надо при вызове getreal ставить T - работать не будет, это для getstring, чтоб пробелы можно было разрешить или запретить. Для задания размеров колонны в мм (которые не должны быть дробными) можно использовать и другую функцию. Дальше надо запросить следующие значения, которые идут по логике программы.
Alaspher вне форума  
 
Непрочитано 22.07.2008, 16:13
#58
Кулик Алексей aka kpblc
Moderator

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


А еще лучше, наверное - в данном конкретном случае - сразу запрашивать прямоугольник )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2008, 16:17
#59
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Далее надо задать вторую переменную, полагаю что так.
Код:
[Выделить все]
(defun C:Колонна (/ width thickness)
  (setq width (getreal "Введите ширину колонны <Выход>: "))
  (setq thickness (getreal "Введите толщину колонны <Выход>: "))
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 16:24
#60
Кулик Алексей aka kpblc
Moderator

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


А если захочется вводить не с клавиатуры, а с экрана?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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