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

Вернуться   Форум 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.
Просмотров: 1973725
 
Непрочитано 11.10.2016, 13:00
#3081
Кулик Алексей aka kpblc
Moderator

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


Самое главное там с кодировкой не промахнуться, а так можно и его использовать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2016, 14:05
#3082
trushev


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


Спасибо всем за отклики.
trushev вне форума  
 
Непрочитано 12.10.2016, 11:56
#3083
kurstep


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


Здравствуйте, есть ли у кого-нибудь лисп позволяющий пользоватся командой РАСТЯНУТЬ (_STRETCH) на штриховке - чтоб штриховка не перемещалась а нормально растягивалась?
kurstep вне форума  
 
Непрочитано 12.10.2016, 13:45
#3084
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Кстати, бесплатный Notepage++ в плане интерфейса более продвинутый
Знаю о его существовании и использовании вместо штатного VLIDE.
Но позволяет ли он пошаговую отладку, выводит ли текущие значения переменных и т.п.?
Когда-то давно смотрел, но он меня не поразил, ну или я что-то не заметил...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 12.10.2016, 14:18
#3085
Сергей812


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


Цитата:
Сообщение от Alan Посмотреть сообщение
Но позволяет ли он пошаговую отладку, выводит ли текущие значения переменных и т.п.?
Когда-то давно смотрел, но он меня не поразил, ну или я что-то не заметил...
Он просто редактор, может чуть более удобный, чем встроенный в акад. Сразу видны принадлежность скобок друг другу (во встроенном надо хоткеи щелкать), встроенный словарь операндов и т.д. Я в лиспе пишу очень мало, в основном Net и иногда простые вещи через COM в связке Excel-Акад.
Сергей812 вне форума  
 
Непрочитано 12.10.2016, 15:56
#3086
trushev


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


Цитата:
Сообщение от Alan Посмотреть сообщение
пошаговую отладку, выводит ли текущие значения переменных
При отладке в стороннем текстовом редакторе для этих целей пользуюсь своей функцией, вставляя ее в код в требуемые точки останова:
Код:
[Выделить все]
(defun tect (kat / f)
  (setq f (open "aa" "w"))
  (princ kat f)
  (close f)
  (setq f (open "aa" "r"))
  (alert (read-line f))
  (close f)
)
Пример запуска (tect (list "T1" " X1 = " x1 " X2 = " x2))
где: T1 - номер точки останова, x1 x2 ... - список переменных STR, REAL, LIST, ... которые нужно проверить.
Применима при отладке диалогов в action_tile при вставке в тело (strcat ... "(tect (list \"T1\" \" X1 = \" x1 \" X2 = \" x2))")
trushev вне форума  
 
Непрочитано 12.10.2016, 16:53
#3087
Кулик Алексей aka kpblc
Moderator

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


Сугубо ИМХО: для отладки использовать лог - не самое лучшее решение. В VLIDE (если, конечно, ведется разработка именно под AutoCAD, а не под "клонкад") есть масса возможностей. Это раз. Второе: вставлять код напрямую в dcl - порочная практика. Нарисуй нормальную callback-функцию и используй ее при вызове диалога.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2016, 16:55
#3088
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от trushev Посмотреть сообщение
При отладке в стороннем текстовом редакторе для этих целей пользуюсь своей функцией, вставляя ее в код в требуемые точки останова:
Такое я прошел лет 20 назад, использовал редактор от Turbo-Pascal
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Он просто редактор, может чуть более удобный, чем встроенный в акад.
Понятно... Мне не подходит, Word получше как редактор . А для отладки VLIDE при всём его убогости
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 17.10.2016, 17:45
#3089
Red Nova

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


Подскажите плиз. Как можно получить и задать определенный параметр динамического блока (в моем случае линейный)? Задумал команду для изменения длины нескольких динамических блоков на подобии stretch. Не уверен возможно ли это, а может кто-то уже реализовал...
Red Nova вне форума  
 
Непрочитано 17.10.2016, 18:21
#3090
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


http://lee-mac.com/dynamicblockfunctions.html
если во время вставки блока, то:
1. http://forum.dwg.ru/showthread.php?t=18018
2. http://forum.dwg.ru/showpost.php?p=166681&postcount=36
kacugu на форуме  
 
Автор темы   Непрочитано 17.10.2016, 23:26
#3091
Red Nova

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


kacugu. Спасибо. Посмотрим
Red Nova вне форума  
 
Непрочитано 18.10.2016, 13:07
#3092
quazi


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


Добрый день!
Помогите пожалуйста, нужно все штриховки в чертеже поместить за их собственные контуры.
LISPа не знаю, вот мои попытки:
Предварительно выделяю одну штриховку и выполняю
Код:
[Выделить все]
 (command "_-HATCHEDIT" "DR" "H")
становится как надо.
Вот еще нашел код, выбирающий все штриховки, может пригодится:
Код:
[Выделить все]
 (sssetfirst nil (ssget "_x" '((0 . "HATCH"))))
quazi вне форума  
 
Непрочитано 18.10.2016, 13:34
#3093
Сергей812


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


Ну так продолжайте изыскания - пускай сначала код корявый будет. Что получаете при вызове (ssget "_x" '((0 . "HATCH"))) - набор штриховок в текущем пространстве. Читайте дальше, как работать с наборами в лиспе.
Сергей812 вне форума  
 
Непрочитано 18.10.2016, 13:50
#3094
Кулик Алексей aka kpblc
Moderator

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


Кто сказал, что при (ssget "_X") получаем только текущее пространство?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.10.2016, 14:49
#3095
Сергей812


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


Да, сорри, ошибочно написал - что только текущее пространство. Если нужно, например, только с пространства модели получить - то в фильтр добавляем (67 . 0).
Сергей812 вне форума  
 
Непрочитано 18.10.2016, 14:54
#3096
quazi


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ну так продолжайте изыскания - пускай сначала код корявый будет. Что получаете при вызове (ssget "_x" '((0 . "HATCH"))) - набор штриховок в текущем пространстве. Читайте дальше, как работать с наборами в лиспе.
Здесь нашел как обработать выделение http://www.lee-mac.com/selsetprocessing.html и особо не разбираясь получилось вот:
Код:
[Выделить все]
 (defun c:test1 (/ e i n s)
  (if (setq s (ssget "_x" '((0 . "HATCH"))))
    (progn
      (setq i 0
	    n (sslength s)
      )
      (while (< i n)
	(setq e	(ssname s i)
	      i	(1+ i)
	)
	(command "_-HATCHEDIT" e "DR" "H")
      )
    )
  )
  (princ)
)
Вроде работает.
Скажите, может по другому лучше сделать было?
Был уверен, что в лиспе не нужно было цикла в явном виде, а просто хитро вставить одну функцию в другую достаточно
quazi вне форума  
 
Непрочитано 18.10.2016, 15:30
#3097
Сергей812


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


сразу же два примечания к коду:
1. ВАЖНО: как закончили работать с набором (s в вашем случае), так сразу его закрыли (освободили) - путем присвоения nil. Максимальное количество одновременно открытых наборов конечно, а сами они уничтожаться только при закрытии рисунка.
2. Желательно: вставить проверку набора на nil (нет штриховок) и об этом сообщать пользователю. А если набор существует - то тогда пошли обрабатывать.
ну и можно вставить маркеры начала и конца блока отмены соответственно.
Сергей812 вне форума  
 
Непрочитано 18.10.2016, 15:38
#3098
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ВАЖНО: как закончили работать с набором (s в вашем случае), так сразу его закрыли (освободили) - путем присвоения nil. Максимальное количество одновременно открытых наборов конечно, а сами они уничтожаться только при закрытии рисунка.
Необязательно: набор хранится как локальная переменная и будет уничтожен после выхода из функции / команды
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Желательно: вставить проверку набора на nil (нет штриховок) и об этом сообщать пользователю. А если набор существует - то тогда пошли обрабатывать
Тут согласен. В библиотеке готовых функций были решения по преобразованию набора в список.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
можно вставить маркеры начала и конца блока отмены соответственно.
Не можно, а нужно
Ну и еще: есть command, а есть command-s. В зависимости от того, под какую версию идет разработка, это может быть критичным.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.10.2016, 15:50
#3099
Сергей812


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Необязательно: набор хранится как локальная переменная и будет уничтожен после выхода из функции / команды
а храниться набор или имя набора в локальной переменной? У Полещука написано, что имя набора сохраняется в переменной. А в функциях (работы с набором) фигурирует просто "набор" без уточнения.
Сергей812 вне форума  
 
Непрочитано 18.10.2016, 17:12
#3100
Кулик Алексей aka kpblc
Moderator

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


В данном случае хранится указатель на набор, если я правильно понимаю. При выходе из функции указатель уничтожается, а счетчик активных наборов примитивов снижается на 1.

----- добавлено через 52 сек. -----
Где-то был код (то ли на .NET, то ли на лиспе), который показывал ограничения по количеству наборов. Можно и самому сделать такой кодик.
__________________
Моя библиотека 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