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

Вернуться   Форум 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.
Просмотров: 1965761
 
Непрочитано 17.12.2018, 17:32
#3701
megabeton


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Может, пишется под какой-нибудь клон, где ActiveX просто не реализован.
Да нет, исключительно спортивный интерес, учусь только.

Подскажите (или ссылку на страницу этой темы, уверен, что обсуждалось на одной из 185 страниц),
как редактировать примитивы внутри блоков.
Интересует вариант с взрыванием и без.
megabeton вне форума  
 
Непрочитано 17.12.2018, 17:38
#3702
Кулик Алексей aka kpblc
Moderator

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


Взрывать точно не надо. А так - в готовых программах "Работа с подосновой", в библиотеке функций - "Нормализация блоков"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2018, 21:28
#3703
Zirra

работа все больше удивляет
 
Регистрация: 24.02.2012
Украина
Сообщений: 13


Здравствуйте! О лиспе и программировании только слышала, поэтому мой вопрос задаю здесь.

Есть программа, написанная в лиспе. Это расчет. Хотелось бы иметь то же самое, только в php. Есть человек, готовый сделать в php, но абсолютно не знакомый с лиспом.

Вопрос у меня такой: как сделать задание для выполнения расчета на php? Точнее, как вычленить данные для задания из программы, написанной на лиспе? Вообще технически это реально сделать, если я в этом не в зуб ногой?
Zirra вне форума  
 
Непрочитано 26.12.2018, 22:33
#3704
Сергей812


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


Цитата:
Сообщение от Zirra Посмотреть сообщение
Хотелось бы иметь то же самое, только в php. Есть человек, готовый сделать в php, но абсолютно не знакомый с лиспом.
насколько знаю, PHP работает с COM-объектами - поэтому можно попытаться получать данные из акада напрямую, не трогая лисп.

Цитата:
Сообщение от Zirra Посмотреть сообщение
Точнее, как вычленить данные для задания из программы, написанной на лиспе?
Если программа не скомпилирована, то исходный код открыт. Только зачем - PHP и лисп даже по синтаксису разные. Дайте человеку набор исходных данных, методику расчета и форму выходных отчетов.
Сергей812 вне форума  
 
Непрочитано 26.12.2018, 22:53
#3705
Zirra

работа все больше удивляет
 
Регистрация: 24.02.2012
Украина
Сообщений: 13


Спасибо!
Zirra вне форума  
 
Непрочитано 28.12.2018, 13:20
#3706
40in


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


Во всех учебниках написано что функция (ssget< точка >) формирует набор из всех примитивов проходящих через точку.
Вот простенький код:

(command "_pline" '(10 10) '(-10 -10) "")
(command "_pline" '(-10 10) '(10 -10) "")
(setq obj (ssget '(0.0 0.0)))
(setq b (sslength obj))

На выходе я получаю b=1.
Что я не так делаю? Почему выбирается только один примитив, а не два?
40in вне форума  
 
Непрочитано 28.12.2018, 14:21
#3707
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от 40in Посмотреть сообщение
формирует набор из всех примитивов
скорее из последнего примитива
koMon вне форума  
 
Непрочитано 28.12.2018, 15:35
#3708
40in


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


Вот собственно цитата из Полищука.....
https://ibb.co/vPV05jd

А методом научного тыка удалось установить, что выбирается примитив лежащий выше ...
40in вне форума  
 
Непрочитано 11.01.2019, 08:04
#3709
40in


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


Извините, но я опять заблудился в трех соснах)))
Вот простенький код:
(setq z (cdr (assoc 11 (entget (car (entsel "ВЫБОР : \n"))))))
(if (= z '(0.0 0.0 0.0))
(setq k "да")
(setq k "нет")
)
Делается выбор текста. На выходе К всегда НЕТ.
Вот картинка:
https://ibb.co/r33s2Pv
Что у меня не так?
40in вне форума  
 
Непрочитано 11.01.2019, 10:39
#3710
Сергей812


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


имхо, с координатами лучше работать через вычисление расстояния и проверкой по модулю попадания в заданный "зазор" погрешности.. а не сравнивать напрямую
Сергей812 вне форума  
 
Непрочитано 11.01.2019, 10:41
1 | #3711
Maksim7enov


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


Цитата:
Сообщение от 40in Посмотреть сообщение
Что у меня не так?
вроде "=" не работает с списком
Код:
[Выделить все]
 
(setq z (cdr (assoc 11 (entget (car (entsel "ВЫБОР : \n"))))))
(if (equal z '(0.0 0.0 0.0))
(setq k "да")
(setq k "нет")
)
Maksim7enov вне форума  
 
Непрочитано 29.01.2019, 10:24 Правильно передать точки
#3712
baaba

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


Самому стыдно, не знаю базовых вещей, хоть и умудрился что то написать/адаптировать для своих скромных нужнд. Может быть просто давно не занимался автолиспом. Разбираю вот такой кусок кода:
Код:
[Выделить все]
 (defun IsInTriangle (pt p1 p2 p3)
  ((lambda (n1 n2 n3)
     (or
       (and (equal n1 n2 1e-9) (equal n2 n3 1e-9))
       (null n1)
       (null n2)
       (null n3)
     )
   )
    (Normal3points pt p1 p2)
    (Normal3points pt p2 p3)
    (Normal3points pt p3 p1)
  )
)
Как правильно передать функции pt, pt1, pt2, ... ?
Я пытался так:
Код:
[Выделить все]
 (IsInTriangle (getpoint) (getpoint) (getpoint) (getpoint))
Или так:
Код:
[Выделить все]
 (IsInTriangle (cdr (getpoint)) (getpoint) (getpoint) (getpoint))
baaba вне форума  
 
Непрочитано 29.01.2019, 11:36
#3713
mkung


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


Попросили помочь определить через Лисп функцию, созданную на VBA. Не получается.
Если просто запустить - работает.
Код:
[Выделить все]
 (command "_vbarun" "E:\\_РАБОТА\\АСО\\Румянцев\\vba_run\\VBA\\InsertBeamCenter.dvb!InsertBeamCenter")
Если пытаюсь определить функцию:
Код:
[Выделить все]
 (defun c:ibc()
(command "_vbarun" "E:\\_РАБОТА\\АСО\\Румянцев\\vba_run\\VBA\\InsertBeamCenter.dvb!InsertBeamCenter")
)
После загрузки Лиспа вылетает ошибка и функция не определена:
Команда: _appload Name2.lsp успешно загружено.
Команда: ; ошибка: считан неверный символ (восьмеричный): 0

В чем тут дело?
mkung вне форума  
 
Непрочитано 29.01.2019, 11:55
#3714
Кулик Алексей aka kpblc
Moderator

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


baaba, а что за код у Normal3points ?
mkung, попробуй через vla-runmacro: https://knowledge.autodesk.com/searc...2C707-htm.html
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.01.2019, 12:02
#3715
Vladimir_Sergeevich

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


Цитата:
Сообщение от baaba Посмотреть сообщение
Самому стыдно, не знаю базовых вещей...
поди выдает ; ошибка: no function definition: NORMAL3POINTS ??
В таком виде никто код не проверит, потому что отсутствует описание функции Normal3points используемой в твоей IsInTriangle
теоретически правильно первый вариант:
Цитата:
Сообщение от baaba Посмотреть сообщение
Я пытался так:
Код:
[Выделить все]
 (IsInTriangle (getpoint) (getpoint) (getpoint) (getpoint))
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 29.01.2019, 12:12
#3716
baaba

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


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
поди выдает ; ошибка: no function definition: NORMAL3POINTS ??
В таком виде никто код не проверит, потому что отсутствует описание функции Normal3points используемой в твоей IsInTriangle
теоретически правильно первый вариант:
Выдаёт такое:
Код:
[Выделить все]
 Command: (IsInTriangle (cdr (getpoint)) (getpoint) (getpoint) (getpoint))
; error: bad argument type: numberp: nil
baaba вне форума  
 
Непрочитано 29.01.2019, 12:15
#3717
baaba

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
baaba, а что за код у Normal3points ?[/url]
Код:
[Выделить все]
 (defun Normal3points (p0 p1 p2)
  (Normalize (CrossProduct (mapcar '- p1 p0) (mapcar '- p2 p0)))
)
Код:
[Выделить все]
 (defun CrossProduct (v1 v2)
  (list	(- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
	(- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
	(- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
  )
)
Код:
[Выделить все]
 (defun Normalize (v)
  ((lambda (l)
     (if (/= 0 l)
       (mapcar (function (lambda (x) (/ x l))) v)
     )
   )
    (distance '(0 0 0) v)
  )
)
Вложения
Тип файла: lsp crp.lsp (1.9 Кб, 5 просмотров)
baaba вне форума  
 
Непрочитано 29.01.2019, 12:27
#3718
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
mkung, попробуй через vla-runmacro: https://knowledge.autodesk.com/searc...2C707-htm.html
Попробовал - то же самое: код по отдельности работает, при назначении функции та же ошибка.
Код:
[Выделить все]
 (vl-load-com)
(defun c:ibc()
	(setq acadObj (vlax-get-acad-object))
	(setq fileName (findfile "E:\\_РАБОТА\\АСО\\Румянцев\\vba_run\\VBA\\InsertBeamCenter.dvb"))
	(vla-LoadDVB acadObj fileName)
	(vla-RunMacro acadObj "InsertBeamCenter")
	(vla-UnloadDVB acadObj fileName)
)
Без DEFUN, кстати, тоже ошибка.
То есть если я в командную строку ввожу выражения - работает.
Если записываю их в Лисп-файл и загружаю - ошибка.

Последний раз редактировалось mkung, 29.01.2019 в 12:58.
mkung вне форума  
 
Непрочитано 29.01.2019, 13:16
#3719
Vladimir_Sergeevich

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


Цитата:
Сообщение от baaba Посмотреть сообщение
Код:
[Выделить все]
 (defun Normal3points (p0 p1 p2)
  (Normalize (CrossProduct (mapcar '- p1 p0) (mapcar '- p2 p0)))
)
Код:
[Выделить все]
 (defun CrossProduct (v1 v2)
  (list	(- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
	(- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
	(- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
  )
)
Код:
[Выделить все]
 (defun Normalize (v)
  ((lambda (l)
     (if (/= 0 l)
       (mapcar (function (lambda (x) (/ x l))) v)
     )
   )
    (distance '(0 0 0) v)
  )
)
Когда все функции загружены, нормально возвращает t/nil в зависимости попадает точка в треугольник или нет...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 29.01.2019, 13:30
#3720
Кулик Алексей aka kpblc
Moderator

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


mkung, я не работаю с VBA внутри ACAD (и никому не советую). VBA-Enabler у меня не установлен уже неизвестно сколько времени. Так что проверить не могу и вряд ли когда-нибудь смогу.
По сообщению непонятно, в каком месте вообще ошибка - может, в загрузке, может, в вызове. Кстати: https://www.afralisp.net/archive/met...cro_method.htm

----- добавлено через 40 сек. -----
И туда же, из официальной справки: после загрузки почему-то вызывается не просто имя процедуры:
Код:
[Выделить все]
 (vla-RunMacro acadObj "Module1.Drawline")
__________________
Моя библиотека 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