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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,977

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 1839870
 
Непрочитано 06.01.2022, 22:05
#4101
shishoq


 
Регистрация: 23.01.2005
spb
Сообщений: 99


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

а вообще она до 8. ну тут очевидно, что нужно что-то посильнее ))
shishoq вне форума  
 
Непрочитано 07.01.2022, 11:09
#4102
Кулик Алексей aka kpblc
Moderator

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


Я бы думал в сторону "не сильно простого" кода. Что-нибудь такого типа (варианты разных систем координат не учитываются):
Код:
[Выделить все]
 (defun t1 (/ adoc pt prec pt_str)
  (if (and (= (type (setq pt (vl-catch-all-apply (function (lambda () (getpoint "\nУкажите точку <Отмена> : ")))))
              ) ;_ end of type
              'list
           ) ;_ end of =
           pt
      ) ;_ end of and
    (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
           (setq prec 2) ; точность координат после запятой
           (setq pt_str (mapcar (function (lambda (x) (rtos x 2 prec))) pt))
           (vla-addtext (vla-get-modelspace adoc)
                        (strcat (car pt_str)
                                (apply (function strcat) (mapcar (function (lambda (x) (strcat ", " x))) (cdr pt_str)))
                        ) ;_ end of strcat
                        (vlax-3d-point pt)
                        (getvar "textsize")
           ) ;_ end of vla-AddText
           (vla-endundomark adoc)
    ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.01.2022, 17:11
#4103
shishoq


 
Регистрация: 23.01.2005
spb
Сообщений: 99


shishoq вне форума  
 
Непрочитано 07.01.2022, 20:39
#4104
Кулик Алексей aka kpblc
Moderator

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


???
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.01.2022, 11:36
#4105
Vladimir_Sergeevich

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


shishoq, чего такого? можно еще и закодить значение по умолчанию с возможность поменять на требуемое в процессе выполнения.
Код:
[Выделить все]
 (if (null curve-os)
	(progn
		(setq curve-os (car (nentsel "\nУкажите ось: ")))
		(sssetfirst nil (ssadd curve-os))
	);progn
(sssetfirst nil (ssadd curve-os))
);if
(if (null luprec-pk)
(setq luprec-pk 1)
)
(while fl
(initget "Другая Изменить Change Luprec")
(setq pt  (getpoint "\nУкажите точку: [Другая ось/Изменить точность]") )
(cond 
	((or (= pt "Другая") (= pt "Change"))
	(setq curve-os (car (nentsel "\nУкажите другую ось: ")))
	(sssetfirst nil (ssadd curve-os))
	
	)
	((or (= pt "Изменить") (= pt "Luprec"))
	(setq luprec-pk (getint "\nУкажите требуемую точность: "))
	(sssetfirst nil (ssadd curve-os))
	) 
);cond
(if (listp pt) (setq fl nil))
)
если еще немножко поупарываться - завести свою веточку в \HKEY_CURRENT_USER\Software\ и писать значение прямо туда
с прошедшими
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 05.02.2022, 23:46
#4106
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Здравствуйте. Я из начинающих липсогрызов, о которых в первом посте)

Подскажите, что у меня не так в программе. При открытии нового файла чертежа, она строит второй примитив, но некорректно, не строит в отрицательную сторону от точки 0.0.0. Потом "слетает" и выдает сообщение о том, что ящик нулевой длины не допускается. В консоли, списки координат выдает правильные.

----- добавлено через ~22 ч. -----
Разобрался. Привязки надо отключать.
Вложения
Тип файла: lsp Fasad.lsp (336 байт, 17 просмотров)

Последний раз редактировалось Alxndr1697, 06.02.2022 в 21:32.
Alxndr1697 вне форума  
 
Непрочитано 09.02.2022, 21:09
#4107
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Потом можешь посмотреть на *error* и почти универсальный обработчик ошибок.
404, что вполне закономерно, за давностью лет. Очень бы хотелось заиметь такую программку, если можно.
Alxndr1697 вне форума  
 
Непрочитано 09.02.2022, 21:12
#4108
Кулик Алексей aka kpblc
Moderator

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


И при чем тут инетовская ошибка?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2022, 21:33
#4109
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Прошел по указанной ссылке, там и есть ошибка 404. Не удается найти страницу.

----- добавлено через 52 сек. -----
Ссылка в посте 86.
Alxndr1697 вне форума  
 
Непрочитано 09.02.2022, 21:41
#4110
Кулик Алексей aka kpblc
Moderator

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


А, сорри. Ну да, аркада померла уже очень давно
Как эрзац-альтернативу можно попытаться использовать https://autolisp.ru/2009/09/13/error-catch/ - но там совсем уж мало ((
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2022, 21:45
#4111
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Благодарю. Буду разбираться.
Alxndr1697 вне форума  
 
Непрочитано 17.02.2022, 07:50
#4112
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


В диалоговом окне, в текстовом поле ввожу целое, или число с десятичной точкой. Программа обрабатывает результат в целое число.
Как прописать, чтобы результат был всегда вещественным?
Alxndr1697 вне форума  
 
Непрочитано 17.02.2022, 08:39
#4113
Кулик Алексей aka kpblc
Moderator

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


atoi заменить на atof ?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.02.2022, 22:42
#4114
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
atoi заменить на atof ?
Именно так. Спасибо.


Теперь у меня не получается извлечь данные из выпадающего списка. (key = "S_ko", для переменной S_k)
(setq S_k atoi (get_tile "S_ko")) - не работает. Понимаю, что надо как-то порядковый номер в выпадающем списке воткнуть функцией nht, но вот как это оформить, не знаю.
Alxndr1697 вне форума  
 
Непрочитано 17.02.2022, 23:08
#4115
Кулик Алексей aka kpblc
Moderator

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


1. Со скобками совсем бяда
2. Функции nht не знаю. nth - да, слышал
3. Без хоть какого-то куска кода дальше разговаривать особого смысла не вижу.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2022, 06:40
#4116
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


1. В сообщении, орфографические и программные. Но, я понял.
2. А вот это да, моя беда. Бывает, путаю местами буквы и потом теряю кучу времени на поиск ошибок.
3. Не хотел выкладывать, дабы не шокировать, но, видимо, придется.

И да, я знаю, как с новичками бывает трудно
Вложения
Тип файла: rar dialog_shkaf.rar (850 байт, 6 просмотров)
Тип файла: lsp Shkaf_otd_uch.lsp (7.4 Кб, 8 просмотров)

Последний раз редактировалось Alxndr1697, 18.02.2022 в 07:11.
Alxndr1697 вне форума  
 
Непрочитано 18.02.2022, 07:56
#4117
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (setq s_k (atoi (get_tile "S_ko")))
Грабли еще не шандарахнули?
Offtop: Грабли №2 тоже могут подпортить жизнь.

Код:
[Выделить все]
dialog_shkaf: dialog {label = "Шкаф отдельный с двумя фасадами";
	:spacer{height=1;}
	:column {
		:row {
			:boxed_column {label = "Параметры шкафа :";
				:spacer{height=1;}
				:row {
					:boxed_column {label = "Размеры шкафа :";
						:spacer{height=1;}
						:edit_box {label = "Высота :"; key = "eb_H"; value = "2000"; edit_width = 8;}
						:edit_box {label = "Длина (ширина) :"; key = "eb_L"; value = "1000"; edit_width = 8;}
						:edit_box {label = "Глубина (без учета фасада):"; key = "eb_B"; value = "600"; edit_width = 8;}
						:edit_box {label = "Высота цоколя :"; key = "eb_Hz"; value = "50"; edit_width = 8;}
					}
					:boxed_column {label = "Толщина материала для :";
						:spacer{height=1;}
						:popup_list {label = "Корпуса :"; key = "S_ko"; width = "8"; list = "16\n12\n17\n18\n19\n22\n25";}
						:popup_list {label = "Фасада :"; key = "S_fo"; width = "8"; list = "18\n12\n17\n16\n19\n22\n25";}
						:popup_list {label = "Заднего полика :"; key = "S_po"; width = "8"; list = "6\n3\n4\n8\n10\n12\n16";}
					}
					:boxed_column {label = "Зазоры фасада :";
						:spacer{height=1;}
						:edit_box {label = "Зазор между фасадами :"; key = "o_Z"; value = "3"; edit_width = 8;}
						:edit_box {label = "Отступ от корпуса вперед :"; key = "o_Vp"; value = "2"; edit_width = 8;}
						:edit_box {label = "Отступ сверху :"; key = "o_V"; value = "1,5"; edit_width = 8;}
						:edit_box {label = "Отступ снизу :"; key = "o_N"; value = "1,5"; edit_width = 8;}
						:edit_box {label = "Отступ слева :"; key = "o_L"; value = "1,5"; edit_width = 8;}
						:edit_box {label = "Отступ справа :"; key = "o_R"; value = "1,5"; edit_width = 8;}
						:edit_box {label = "Четверть заднего полика :"; key = "o_Cht"; value = "13"; edit_width = 8;}
					}
				}
			}
		}
		:spacer{height=1;}
		:boxed_row {label = ""; ok_cancel;}
	}
}
А если еще и ключи ставить на первое место - совсем будет кучеряво
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2022, 21:24
#4118
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


По поводу граблей, там говорится про какие-то красные отрезки... В общем, проверить не получилось.
Вторые, для меня, - темный лес пока.
По поводу оформления, понял. Скобки напротив и ключ на первое место.

Код (setq s_k (atoi (get_tile "S_ko"))) возвращает номер строки выпадающего списка, а надо бы содержание.
Alxndr1697 вне форума  
 
Непрочитано 18.02.2022, 21:49
#4119
Кулик Алексей aka kpblc
Moderator

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


Ну так примени nth, делов-то
Оформление lsp/dcl кода - чистой воды вкусовщина, на мое кривое-косое-лысое-седое-далее по тексту мнение можно не ориентироваться.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2022, 22:02
#4120
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 160


Применяю, - ничего не получается.

(setq s_k (nth (atoi (get_tile "S_ko")) <список> )) Что надо поставить на место списка?

----- добавлено через ~26 мин. -----
Если сам список создан в лисп-программе, примерно понятно, а если, как у меня, в dcl?

Последний раз редактировалось Alxndr1697, 18.02.2022 в 22:28.
Alxndr1697 вне форума  
Ответ
Вернуться   Форум 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