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

Вернуться   Форум 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.
Просмотров: 1973025
 
Непрочитано 22.11.2010, 21:18
#1201
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


то ShaggyDoc
спасибо за совет. Но, я писал выше что трапецию я просто для примера привел. в качесве контура могут быть любые фигуры симметричные-несимметричные, совокупности образованные и дугами и линиями вместе.
и уменьшать их надо по краям на одинаковое расстояние.
Michael! вне форума  
 
Непрочитано 22.11.2010, 21:52
#1202
Кулик Алексей aka kpblc
Moderator

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


Michael!, отлично! В VLIDE выполни такой код:
Код:
[Выделить все]
'((0 . "LWPOLYLINE")
  (100 . "AcDbEntity")
  (100 . "AcDbPolyline")
  (90 . 56)
  (70 . 1)
  (10 1413.87 1100.07)
  (42 . -1.94714)
  (10 1392.33 1105.01)
  (42 . 0.0)
  (10 1081.39 830.394)
  (42 . 0.0)
  (10 1357.76 1139.79)
  (42 . -1.94714)
  (10 1352.94 1161.35)
  (42 . -1.39512)
  (10 1525.95 1355.04)
  (42 . -1.94714)
  (10 1547.91 1352.67)
  (42 . 0.0)
  (10 1633.72 1448.73)
  (42 . 0.626224)
  (10 1583.93 1569.89)
  (42 . 0.0)
  (10 1305.31 1618.09)
  (42 . 0.0)
  (10 1584.2 1667.9)
  (42 . 0.626224)
  (10 1634.67 1788.78)
  (42 . 0.0)
  (10 1549.41 1885.32)
  (42 . -1.94714)
  (10 1527.43 1883.08)
  (42 . -1.39512)
  (10 1355.51 2077.74)
  (42 . -1.94714)
  (10 1360.45 2099.27)
  (42 . 0.0)
  (10 1085.83 2410.21)
  (42 . 0.0)
  (10 1395.22 2133.85)
  (42 . -1.94714)
  (10 1416.78 2138.67)
  (42 . -1.39512)
  (10 1610.47 1965.66)
  (42 . -1.94714)
  (10 1608.11 1943.69)
  (42 . 0.0)
  (10 1704.17 1857.89)
  (42 . 0.626224)
  (10 1825.33 1907.68)
  (42 . 0.0)
  (10 1870.39 2183.17)
  (42 . 0.0)
  (10 1919.39 1907.55)
  (42 . 0.626224)
  (10 2040.41 1857.42)
  (42 . 0.0)
  (10 2136.71 1942.95)
  (42 . -1.94714)
  (10 2134.41 1964.92)
  (42 . -1.39512)
  (10 2328.58 2137.39)
  (42 . -1.94714)
  (10 2350.13 2132.51)
  (42 . 0.0)
  (10 2660.3 2408.0)
  (42 . 0.0)
  (10 2384.81 2097.83)
  (42 . -1.94714)
  (10 2389.68 2076.29)
  (42 . -1.39512)
  (10 2217.22 1882.11)
  (42 . -1.94714)
  (10 2195.25 1884.42)
  (42 . 0.0)
  (10 2109.71 1788.12)
  (42 . 0.626224)
  (10 2159.84 1667.1)
  (42 . 0.0)
  (10 2435.47 1618.09)
  (42 . 0.0)
  (10 2159.56 1567.47)
  (42 . 0.626224)
  (10 2108.76 1446.73)
  (42 . 0.0)
  (10 2193.75 1349.95)
  (42 . -1.94714)
  (10 2215.73 1352.13)
  (42 . -1.39512)
  (10 2387.1 1156.99)
  (42 . -1.94714)
  (10 2382.1 1135.47)
  (42 . 0.0)
  (10 2655.85 823.763)
  (42 . 0.0)
  (10 2347.23 1100.99)
  (42 . -1.94714)
  (10 2325.66 1096.23)
  (42 . -1.39512)
  (10 2132.46 1269.79)
  (42 . -1.94714)
  (10 2134.88 1291.75)
  (42 . 0.0)
  (10 2039.07 1377.82)
  (42 . 0.626224)
  (10 1917.77 1328.37)
  (42 . 0.0)
  (10 1870.39 1053.01)
  (42 . 0.0)
  (10 1823.7 1328.77)
  (42 . 0.626224)
  (10 1702.82 1379.23)
  (42 . 0.0)
  (10 1606.28 1293.97)
  (42 . -1.94714)
  (10 1608.52 1271.99)
  (42 . -1.39512)
  (210 0.0 0.0 1.0)
  )
и скажи, в какую сторону чего надо уменьшать. Ну так, мне просто интересно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.11.2010, 22:56 Ну совсем чайниковский вопрос по LISP
#1203
nav3000


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


Всем доброго времени суток

Собственно просьба у меня к знатокам LISP . Дело в том что я в LISP полный профан.
Но вот сегодня возникла необходимость в одной функции на LISP (на С# для меня это было бы делом 10 минут в самом прямом сысле) Попытался сделать но увы ничего не получилось. Суть в следующем функция должна заполнить список из двух линий и потом в цикле отрисовать эти линии при помощи grdraw. Линии имеют координаты (0,0)(5,5) и (0,0)(0,10)

Понимаю, что на любом языке это не займет больше 10 минут как уже упомянул – для того кто знает. Но отвечу честно – вникать в замысловатый синтаксис LISP просто нет времени. (хотя конечно учиться никогда не поздно) просто функция нужна сейчас. Поэтому зараннее благодарен за помошь тому кто откликнется
nav3000 вне форума  
 
Непрочитано 22.11.2010, 23:38
#1204
Li6-D


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


Как-то так:
Код:
[Выделить все]
((lambda (/ L LN)
   ;Цикл, составляющий список из любого числа линий
   (while  (and (setq L (getpoint "\nУкажите 1-ю точку: "))
                (cdr (setq L (cons L (getpoint L "\nУкажите 2-ю точку: "))))
           )
     (setq LN (cons L LN))
     (print) (print L)
   )
   ;Цикл рисующий красненькие линии из сохраненного списка
   (foreach L LN (grdraw (car L) (cdr L) 1))
   (princ)
))

Последний раз редактировалось Li6-D, 22.11.2010 в 23:55. Причина: из-за отрисовки grdraw
Li6-D вне форума  
 
Непрочитано 22.11.2010, 23:49
#1205
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


то Кулик Алексей aka kpblc
не запустился этот код в vlide - скорее всего я не знаю как это сделать.
Michael! вне форума  
 
Непрочитано 23.11.2010, 00:00
#1206
gomer

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


Цитата:
функция должна заполнить список из двух линий и потом в цикле отрисовать эти линии при помощи grdraw.
Код:
[Выделить все]
(mapcar
 '(lambda (x)
   (grdraw (car x) (cadr x) 1)
  )
  (list '((0 0) (5  5))
        '((0 0) (0 10))
  )
)
gomer вне форума  
 
Непрочитано 23.11.2010, 00:05
#1207
Кулик Алексей aka kpblc
Moderator

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


Michael!, сорри, запарка...
Код:
[Выделить все]
(entmakex '((0 . "LWPOLYLINE")
  (100 . "AcDbEntity")
  (100 . "AcDbPolyline")
  (90 . 56)
  (70 . 1)
  (10 1413.87 1100.07)
  (42 . -1.94714)
  (10 1392.33 1105.01)
  (42 . 0.0)
  (10 1081.39 830.394)
  (42 . 0.0)
  (10 1357.76 1139.79)
  (42 . -1.94714)
  (10 1352.94 1161.35)
  (42 . -1.39512)
  (10 1525.95 1355.04)
  (42 . -1.94714)
  (10 1547.91 1352.67)
  (42 . 0.0)
  (10 1633.72 1448.73)
  (42 . 0.626224)
  (10 1583.93 1569.89)
  (42 . 0.0)
  (10 1305.31 1618.09)
  (42 . 0.0)
  (10 1584.2 1667.9)
  (42 . 0.626224)
  (10 1634.67 1788.78)
  (42 . 0.0)
  (10 1549.41 1885.32)
  (42 . -1.94714)
  (10 1527.43 1883.08)
  (42 . -1.39512)
  (10 1355.51 2077.74)
  (42 . -1.94714)
  (10 1360.45 2099.27)
  (42 . 0.0)
  (10 1085.83 2410.21)
  (42 . 0.0)
  (10 1395.22 2133.85)
  (42 . -1.94714)
  (10 1416.78 2138.67)
  (42 . -1.39512)
  (10 1610.47 1965.66)
  (42 . -1.94714)
  (10 1608.11 1943.69)
  (42 . 0.0)
  (10 1704.17 1857.89)
  (42 . 0.626224)
  (10 1825.33 1907.68)
  (42 . 0.0)
  (10 1870.39 2183.17)
  (42 . 0.0)
  (10 1919.39 1907.55)
  (42 . 0.626224)
  (10 2040.41 1857.42)
  (42 . 0.0)
  (10 2136.71 1942.95)
  (42 . -1.94714)
  (10 2134.41 1964.92)
  (42 . -1.39512)
  (10 2328.58 2137.39)
  (42 . -1.94714)
  (10 2350.13 2132.51)
  (42 . 0.0)
  (10 2660.3 2408.0)
  (42 . 0.0)
  (10 2384.81 2097.83)
  (42 . -1.94714)
  (10 2389.68 2076.29)
  (42 . -1.39512)
  (10 2217.22 1882.11)
  (42 . -1.94714)
  (10 2195.25 1884.42)
  (42 . 0.0)
  (10 2109.71 1788.12)
  (42 . 0.626224)
  (10 2159.84 1667.1)
  (42 . 0.0)
  (10 2435.47 1618.09)
  (42 . 0.0)
  (10 2159.56 1567.47)
  (42 . 0.626224)
  (10 2108.76 1446.73)
  (42 . 0.0)
  (10 2193.75 1349.95)
  (42 . -1.94714)
  (10 2215.73 1352.13)
  (42 . -1.39512)
  (10 2387.1 1156.99)
  (42 . -1.94714)
  (10 2382.1 1135.47)
  (42 . 0.0)
  (10 2655.85 823.763)
  (42 . 0.0)
  (10 2347.23 1100.99)
  (42 . -1.94714)
  (10 2325.66 1096.23)
  (42 . -1.39512)
  (10 2132.46 1269.79)
  (42 . -1.94714)
  (10 2134.88 1291.75)
  (42 . 0.0)
  (10 2039.07 1377.82)
  (42 . 0.626224)
  (10 1917.77 1328.37)
  (42 . 0.0)
  (10 1870.39 1053.01)
  (42 . 0.0)
  (10 1823.7 1328.77)
  (42 . 0.626224)
  (10 1702.82 1379.23)
  (42 . 0.0)
  (10 1606.28 1293.97)
  (42 . -1.94714)
  (10 1608.52 1271.99)
  (42 . -1.39512)
  (210 0.0 0.0 1.0)
  ))
А так?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.11.2010, 00:41
#1208
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


вот в приложенном файле я нарисовал как должно происходить уменьшение.
интересная фигура. показательная
Вложения
Тип файла: dwg
DWG 2004
Drawing3.dwg (43.0 Кб, 3322 просмотров)
Michael! вне форума  
 
Непрочитано 23.11.2010, 00:56
#1209
Кулик Алексей aka kpblc
Moderator

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


Michael!, я не про это на самом деле говорил (кстати, обрати внимание на пост ShagyDoc - к мнению этого человека настоятельно рекомендую прислушиваться, он плохого не посоветует). Встречные вопросы: как вычисляется закон на рисунке выделения magenga-области? А что будет, если в область попадет дуга, которую придется "замыкать"? Встречных вопросов тьма...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.11.2010, 01:08
#1210
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


магента область - эта 1/4 или 1/3 (что не существенно важно, от 1/3 до 1/4 - для определенности можно взять 1/3) от всей длины детали. Используемые дуги всегда имеют радиус значительно больший длины детали, поэтому замыкаться они не будут/не смогут. Смещение в магента областях возможно максимум 30 мм. общие размеры деталей - от 300 мм до 2000 мм приблизительно по мин/макс.
Michael! вне форума  
 
Непрочитано 23.11.2010, 01:14
#1211
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Michael! Посмотреть сообщение
от всей длины детали
По периметру? Или по указанному направлению?
Кстати, 157 447 / 374 = 41.3, но никак не 0.(3)
Я все же рекомендую сначала выполнять все вычисления (координат точек, углов и радиусов дуговых сегментов), и только потом строить полилинию. На команде _.stretch я уже в свое время обжегся, повторения не хочу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.11.2010, 06:29
#1212
ShaggyDoc

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


Команда STRETCH не для программирования! Это очень удобное (иногда незаменимое) средство для интерактивной работы, но не для программиста. Хотя формально, конечно, можно и её использовать.

STRECH изменяет координаты точек (вершин полилиний, точек ставок блоков и т.д.). Программист все эти координаты может вычислить и изменить. Тем более, если надо нарисовать новые объекты. Я приводил пример с трапециями, но даже если
Цитата:
в качесве контура могут быть любые фигуры симметричные-несимметричные, совокупности образованные и дугами и линиями вместе
то это также решается созданием контура по вычисляемым точкам. У меня за 20 лет программирования в LISP не нашлось ни одного случая, в котором нельзя было бы вычислить координаты точек.
ShaggyDoc вне форума  
 
Непрочитано 23.11.2010, 10:33
#1213
nav3000


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


Li6-D
Цитата:
Как-то так:
Код:

((lambda (/ L LN)
;Цикл, составляющий список из любого числа линий
(while (and (setq L (getpoint "\nУкажите 1-ю точку: "))
(cdr (setq L (cons L (getpoint L "\nУкажите 2-ю точку: "))))
)
(setq LN (cons L LN))
(print) (print L)
)
;Цикл рисующий красненькие линии из сохраненного списка
(foreach L LN (grdraw (car L) (cdr L) 1))
(princ)
))

Спасибо за помощь Вот попробовал ваш код переделать в то что мне нужно
(мне не нужно брать точки с экрана)
хотел нарисовать хотя бы одну линию но ничего не вышло
Код:
[Выделить все]
(defun a1(/ L vectors)
	
	(and (setq L (0 0 0)) (cdr (setq (cons (setq L (5 5 0)))))
	(setq vectors (cons L vectors))

	
	
	(foreach L vectors (grdraw (car L) (cdr L) 1))
)
nav3000 вне форума  
 
Непрочитано 23.11.2010, 11:06
#1214
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


nav3000, перед (0 0 0) и (5 5 0) надо поставить апострофы: '(0 0 0) и '(5 5 0), тогда в переменной L будет сохранен список, в противном случае твоя прога при выполнении ищет функции 0 и 5, которых, естесственно нет.
alex8888 вне форума  
 
Непрочитано 23.11.2010, 12:58
#1215
nav3000


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


alex8888
Цитата:
перед (0 0 0) и (5 5 0) надо поставить апострофы: '(0 0 0) и '(5 5 0), тогда в переменной L будет сохранен список, в противном случае твоя прога при выполнении ищет функции 0 и 5, которых, естесственно нет.
Поставил и при загрузке файла поклучаю

Цитата:
malformed list on input at [READ] : File <C:/Dokumente und Einstellungen/Kasavchenko/Desktop/1.lsp>
nav3000 вне форума  
 
Непрочитано 23.11.2010, 13:47
#1216
Do$

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


Это азы!
Цитата:
Сообщение от nav3000 Посмотреть сообщение
malformed list on input
вылезло такое - пересчитывай скобки.
Do$ вне форума  
 
Непрочитано 23.11.2010, 14:25
#1217
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Скобки одной нет, а еще не понятно: (cdr (setq ???? (cons (setq L '(5 5 0))))), где переменная?
alex8888 вне форума  
 
Непрочитано 23.11.2010, 15:15
#1218
gomer

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


Цитата:
Сообщение от alex8888 Посмотреть сообщение
File <C:/Dokumente und Einstellungen/Kasavchenko/Desktop/1.lsp>
Цитата:
Сообщение от alex8888 Посмотреть сообщение
(cdr (setq ???? (cons (setq L '(5 5 0))))), где переменная?
Гы, гы... я молчу
gomer вне форума  
 
Непрочитано 23.11.2010, 21:07
#1219
Li6-D


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


Цитата:
Сообщение от nav3000 Посмотреть сообщение
Поставил и при загрузке файла получаю
Цитата:
malformed list on input at [READ] : File <C:/Dokumente und Einstellungen/Kasavchenko/Desktop/1.lsp>
nav3000, вот еще вариант:
Код:
[Выделить все]
(foreach L
 '(((0 0 0) (5 5 0))  ;первый отрезок
   ((0 0 0) (0 10 0)) ;второй отрезок
   ;|Здесь список
    отрезков можно
    продолжать
    сколько угодно
    долго|;
  )
  (grdraw (car L) (cadr L) 1)
)
Проще не бывает:
Код:
[Выделить все]
(grvecs
 '(-1   ;|цвет временных отрезков (красный пунктир)
           до следующего переопределения цвета
           в списке отрезков ниже|;
   (0 0 0) (5 5 0)
   (0 0 0) (0 10 0)
   ;.................
) )
Другой вариант с mapcar и lambda в сообщении gomer #1206

Последний раз редактировалось Li6-D, 23.11.2010 в 22:47.
Li6-D вне форума  
 
Непрочитано 23.11.2010, 21:15
#1220
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


to ShaggyDoc
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
то это также решается созданием контура по вычисляемым точкам. У меня за 20 лет программирования в LISP не нашлось ни одного случая, в котором нельзя было бы вычислить координаты точек.
Ты прав. Но тогда возникает вопрос - как определить эти точки?
Я ведь этого не знаю. Покажите как это сделать - объясните.
команду стретч я взял потому, что я хотел написать программу по своим действиям. А как вычислить координаты точек, и при этом сохранить контур неразрывным после его уменьшения мне абсолютно непонятно.
Или ручками все передвигать как раньше и незаморачиваться с программой.

то Кулик Алексей aka kpblc
по длине детали - это по размеру по оси "Х"
Michael! вне форума  
Ответ
Вернуться   Форум 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