Реклама 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.
Просмотров: 1965989
 
Непрочитано 17.04.2015, 16:21
#2601
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


gomer, благодарю за помощь, за ответы и подсказки. Ну да, VLISP-это для меня пока ещё волшебство на грани "Грааля"
Про коды отрезков знаю, но мне хочется "тыкать курсором" не в концы отрезка, а в его середину. А макрос - не хочет (пока не хочет).
_________________________
Обозначение градуса - не работает. Возможно я не точно выразил мысль.
На приложенной картинке - результат работы макроса. Это м-текст, состоящий из двух строк. Вот в первой строчке находится эта злосчастная буква "d". А её надо заменить на значок градуса. Как?
Миниатюры
Нажмите на изображение для увеличения
Название: Макрос.jpg
Просмотров: 18
Размер:	43.4 Кб
ID:	147913  

Последний раз редактировалось MrBrown, 17.04.2015 в 16:32.
MrBrown вне форума  
 
Непрочитано 17.04.2015, 17:18
#2602
gomer

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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
Вот в первой строчке находится эта злосчастная буква "d". А её надо заменить на значок градуса. Как?
надо почитать справку, в старых версиях она была более удобная есть целый ряд функций для работы со строками, например (vl-string-translate "d" "%%d" str)
Цитата:
Сообщение от MrBrown Посмотреть сообщение
Про коды отрезков знаю, но мне хочется "тыкать курсором" не в концы отрезка, а в его середину. А макрос - не хочет (пока не хочет).
во первых, это совсем не макрос, во-вторых, макрос - сущность неодушевленная, она не может хотеть или не хотеть, мочь и не мочь она тоже не может. программа делает только то, что вы в нее заложили: не заложили обработку отрезков, вот она их и не обрабатывает. Еще раз повторяю ВЕТВЛЕНИЕ!!! Вы ж научиться хотите, а не чтоб вам написали задаром?
gomer вне форума  
 
Непрочитано 17.04.2015, 17:47
#2603
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


gomer,
Offtop: "Вы ж научиться хотите, а не чтоб вам написали задаром?" - увы, приходится учиться на старости, халява не проходит (http://forum.dwg.ru/showthread.php?t=120470).
Я просто вынужден освоить хотя бы основы, чтобы более-менее ориентироваться в несложных кодах. А эти основы приходится изучать, анализируя практические коды с приложенными комментариями. Полещук с Кудрявцевым и иже с ними - это, конечно, весьма полезно, но, сами понимаете, из-за одной-двух программок в два десятка строчек штудировать всего "Маркса" (читай "Полещука") - это на грани научного мазохизма. И я благодарен вам, всем мастерам AutoLISP, помогающим нам, независимо от реальной причины и мотива того или иного "чайника", обратившегося за помощью на форум. Спасибо.
MrBrown вне форума  
 
Непрочитано 20.04.2015, 09:23
#2604
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


Здравствуйте! Анализируя коды, обратил внимание, что мастера автолиспа одну строку кода комментируют одним знаком ";", а общие комментарии - тремя, вот так: ";;;". Хотя и одного достаточно. Это что, такой стиль или элемент культуры программирования?

Последний раз редактировалось MrBrown, 20.04.2015 в 09:50.
MrBrown вне форума  
 
Непрочитано 20.04.2015, 09:37
#2605
Кулик Алексей aka kpblc
Moderator

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


А кто как, я думаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2015, 09:40
#2606
Vladimir_Sergeevich

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


В Notepad++ есть подсветка синтаксиса и Коментарии с ;; там затеняются, а с ; нет.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 20.04.2015, 10:06
#2607
ShaggyDoc

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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
Здравствуйте! Анализируя коды, обратил внимание, что мастера автолиспа одну строку кода комментируют одним знаком ";", а общие комментарии - тремя, вот так: ";;;". Хотя и одного достаточно. Это что, такой стиль или элемент культуры программирования?
Стиль каждый вырабатывае сам. На стиль влияет и разная подсветка (затенение) в разных редакторах кода, и автоматическое форматирование. Каждый может выработать свой стиль. Особенно важно выработать стиль именования функций и переменных. И всё это является элементами культуры программирования.
ShaggyDoc вне форума  
 
Непрочитано 20.04.2015, 16:53
#2608
gomer

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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
Здравствуйте! Анализируя коды, обратил внимание, что мастера автолиспа одну строку кода комментируют одним знаком ";", а общие комментарии - тремя, вот так: ";;;". Хотя и одного достаточно. Это что, такой стиль или элемент культуры программирования?
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А кто как, я думаю.
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Стиль каждый вырабатывае сам.
Объясню тут первый и последний раз. Так как у Полещука эта тема раскрыта достаточно вяло, а пользуются комментами действительно в стиле "кто в лес, кто по дрова".

На самом деле есть 5 видов комментов: ";", ";_", ";;", ";;;" и ";||;".
1.1 Строчный комментарий - краткое пояснение строки, пишется в конце комментируемой строки. Выравнивается посередине строки.
1.2 Строчный комментарий - вставляется автоматически vlide при форматировании и засирает и без того непонятный код. Выравнивается в конец строки кода.
2. Надстрочный комментарий - однострочный коммент, пишется над комментируемой строкой. Используется когда для п.1 не хватает места. Выравнивается по позиции комментируемой строки. Часто бывает псевдомногострочным.
3. Заголовочный однострочный комментарий - используется для описания функций и больших кусков кода. Выравнивается по началу строки. Часто бывает псевдомногострочным.
4. Заголовочный многострочный комментарий - используется для описания функций, больших кусков кода и коротких вставок внутри строки кода. Выравнивается только начало.
Код:
[Выделить все]
 
;|
  заголовочный комментарий файла строка 1
  заголовочный комментарий файла строка 2
                            |;
(defun foo ()
;;; заголовочный комментарий функции строка 1
;;; заголовочный комментарий функции строка 2

  ;; бесполезный надстрочный комментарий
  (vl-load-com) ;  бесполезный строчный комментарий

  ;; надстрочный комментарий строка 1
  ;; надстрочный комментарий строка 2
  (princ ;|сейчас будет строка->|; "\nHello, World!")

  (princ) ;_  бесполезный строчный комментарий

)  ;_ конец defun
Каждый тип комментария имеет свою реакцию на форматирование во vlide, неправильное использование комментов приводит к неудобочитаемости кода
gomer вне форума  
 
Непрочитано 21.04.2015, 09:09
#2609
Vladimir_Sergeevich

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


, что за мистика?
Код:
[Выделить все]
!obj
(#<VLA-OBJECT IAcadLWPolyline 17cf2384>) ;;создан программно и сохранен в obj

(vlax-curve-getEndParam obj)
; ошибка: не удается получить идентификационный код объекта: (#<VLA-OBJECT IAcadLWPolyline 17cf2384>)

(vlax-ename->vla-object (car (entsel)))
Выберите объект: #<VLA-OBJECT IAcadLWPolyline 17cf2384> ;;имя объекта одно и то же

(vlax-curve-getEndParam (vlax-ename->vla-object (car (entsel))))
Выберите объект: 1.0      ;;и таким макаром отрабатывает нормально
В чем прикол?
з.ы. Сам дурак всего то надо было car сделать...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 21.04.2015 в 10:55.
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.04.2015, 12:23
#2610
skkkk


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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
";", а общие комментарии - тремя, вот так: ";;;". Хотя и одного достаточно. Это что, такой стиль или элемент культуры программирования?
Хоть я и не мастер, но отвечу за себя. Я пишу код в Notepad++, настроенном под LISP. Там есть сочетания клавиш для того, чтоб закомментировать или раскомментировать строку или несколько строк выделенного текста. Это сочетание добавляет одну точку с запятой в начало строки, если ее нет, и убирает одну же, если она есть. Если в коде из нескольких строк одна строка закомментирована, и я хочу закомментировать весь "абзац", то при применении сочетания клавиш абзац закомментируется, а стоявшая точка с запятой уберется, то есть одна закомментированная строка "раскомментируется". Чтобы такого не происходило, приходится ставить две и более точек с запятой в тех строках, которые еще могут понадобиться, но на данный момент в тестировании кода не участвуют. Может, откуда-то отсюда ноги растут у стремления вставить не один символ. А вообще, я думаю, что это все на усмотрение каждого отдельно взятого индивида-кодировщика. По крайней мере, о каких то правилах, даже негласных, по этому поводу я не слышал.

----- добавлено через ~13 мин. -----
Во блин, пропустил целую страницу обсуждения
Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
В Notepad++ есть подсветка синтаксиса и Коментарии с ;; там затеняются, а с ; нет.
Vladimir_Sergeevich, у меня затеняется даже с одной ";". А вот подсветка на форуме с одной срабатывает только если между ; и строкой перед ней есть хотя бы один пробел.
gomer, откуда дровишки? Интересная информация, и я даже склоняюсь к тому, чтобы пользоваться подобными соглашениями, мне нравится. Может, вообще стоит создать темку для обсуждения культуры программирования, форматирования, оформления, в которую собрать все принятые соглашения и правила написания кодов? Может, уже такая и была... Самого иногда бесит бардак в кодах функций, особенно в тех, что писались первыми и понятия не было еще ни о какой культуре. Сижу порой и думаю, что я хотел изобразить пару лет назад столь замысловатым поворотом кодов . Хоть такое бывает и редко, в основном я помню все свои мысли при написании того или иного кода, но думаю это оттого, что срок пока мал, да и кодов еще не так много. Но пришел к тому, что подробные комментарии крайне необходимы. Даже для того же поиска фрагмента кода через Ctrl+F. Постепенно перерабатываю все свои коды в удобоваримый вид. При этом новые с некоторых пор добротными комментариями снабжаю. Даже почитав чей-то совет когда-то тут на форуме, стал сначала построчно в редакторе в комментариях подробно прописывать алгоритм предстоящей функции, а затем приступать к написанию кода. Удобно - сразу знаешь, что делать, а после знаешь, что понаделал.

Последний раз редактировалось skkkk, 21.04.2015 в 12:47.
skkkk вне форума  
 
Непрочитано 24.04.2015, 08:18
#2611
Vladimir_Sergeevich

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


Вопрос: можно ли из лиспа создать новый каталог без участия пользователя? Сколько искал: все в интерактивном режиме через кнопочку и ручной ввод.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 24.04.2015, 12:52
1 | #2612
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2011/11/24/create-folde/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.04.2015, 14:27
#2613
Vladimir_Sergeevich

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


Алексей, благодарю! Как то я пропустил mkdir, хоть и перечитал весь раздел методов по новой. для моих нужд хватит и стандартного метода без рекурсий.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 27.04.2015, 07:33
#2614
Vladimir_Sergeevich

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


И снова я с глупыми вопросами...
Допиливал одну программку и захотелось к ней прикрутить прогресс-бар. проштудировав Полещука написал рабочий вариант через dcl.
И все бы хорошо, но создание нового документа вышибает dcl. это нормально?
Код:
[Выделить все]
 (setq doc (vla-get-Documents (vlax-get-acad-object))) ;;семейство документов
(vla-add doc "udp_plan.dwt") ;;создание нового документа на основе шаблона
Пока старт диалога поставил после создания всех нужных документов и все корректно завершается.
Диалог и функции управления прилагаются, если интересно.
Вложения
Тип файла: zip progress-bar.zip (1.2 Кб, 24 просмотров)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 07.05.2015, 12:01
#2615
Vladimir_Sergeevich

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


Возможно ли обновить внешние ссылки для неактивного документа?
Никак не пойму почему для активного документа такая конструкция работает, а для неактивного ни в какую
Код:
[Выделить все]
 	(vlax-for blkitem (vla-get-Blocks doc) ;;получаем семейство блоков каждого документа здесь doc - указатель на нужный чертеж
		;;почему то не срабатывает условие
		(if (= (vla-get-IsXref blkitem) :vlax-true) ;;проверка на внешнюю ссылку каждого блока в чертеже
			;;точнее условие срабатывает, но пишет, что отсутствует описание
			(progn (vla-Reload blkitem) ;;обновление блока внешней ссылки
			(princ "\nreloaded") 
			)
		)
	) ;;for
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 07.05.2015, 12:06
#2616
Кулик Алексей aka kpblc
Moderator

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


А зачем это делать? Если ссылка была изменена, она автоматически обновится при открытии документа.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.05.2015, 13:58
#2617
Vladimir_Sergeevich

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


Суть в следующем:
-создаю пачку чертежей
-сохраняю с нужным именем и в нужные каталоги
-вставляю в каждый перекрестные ссылки и подоснову (cond по имени файла)
-сохраняю изменения
-вот здесь надо воткнуть обновление ссылок, потому что без обновления подоснова (вставленная ссылка) видна только в одном чертеже, а надо что бы она утащилась на все чертежи
-дальше настройка слоев подосновы (без обновления ссылок обрабатываются только в одном чертеже)
-сохранение и закрытие все документов

Задним местом чую, что можно все закрыть и открыть снова... но так же проще было бы
з.ы. вторая неделя уже пошла, как ковыряю это место. Условие точно выполнятся. получение false проходит корректно, а при true вылетает ошибка "отсутствует описание". уже и в ловушку ошибок завернул - тупо пролетает мимо этого участка и хоть убей.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 07.05.2015 в 14:03.
Vladimir_Sergeevich вне форума  
 
Непрочитано 08.05.2015, 09:23
#2618
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


если команда vla-Reload не запрашивает документ, то подозреваю она заточена на активный...
и конечно тогда она не найдет в активном документе описание блока из другого документа...
можно попробовать sendcommand
kakt00z вне форума  
 
Непрочитано 08.05.2015, 10:00
#2619
Vladimir_Sergeevich

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


kakt00z, даже если sendcommand пройдет в неактивный документ, как обновить ссылку? _externalreferences работает только в оконном режиме, а других способов я не знаю (по крайней мере в cui их нет).
Цитата:
If the drawing specified is not active, it will be made active.
Я конечно не сильно знаю англицкий, но похоже этот метод сделает запрашиваемый документ активным, что в моем случае недопустимо, ибо пишу на лиспе и средой выполнения является активный документ.

p.s. vla-put-property тоже не спрашивает документ, но получая указатель на объект в неактивном документе меняет свойства там где надо, а не в активном. (в моем случае -LineWeight для слоев)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 08.05.2015 в 10:05.
Vladimir_Sergeevich вне форума  
 
Непрочитано 08.05.2015, 10:43
#2620
Кулик Алексей aka kpblc
Moderator

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


Vladimir_Sergeevich, ИМХО тебе надо будет сначала поменять VISRETAIN. Потом уже менять настройки слоев для ссылок. Перегружать ссылку при этом не надо.
ПРавда, я не знаю всей задачи.
__________________
Моя библиотека 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