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

Вернуться   Форум 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.
Просмотров: 1965894
 
Автор темы   Непрочитано 11.02.2017, 23:45
#3241
Red Nova

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


Всем ку!
Подскажите плиз со следующей задачей.
Требуется запросить ввод у пользователя.
Ввести разрешено либо число/букву (и числа и буквы могут быть и двузначными), либо список из нескольких чисел/букв разделенных запятой и/или пробелом
Затем введенное нужно перевести в список из strings.

Пример 1
Вводим:
F, 1, 2, LW
Получаем:
("F" "1" "2" "LW")

Пример 2
Вводим:
20 a
Получаем:
("20" "a")

Пример 3
Вводим:
R1
Получаем:
("R1")

Могу начать так:
(getstring T "\nyour prompt:")
и получить string типа։
"F, 1, 2, LW"

Как можно дальше раздробить "F, 1, 2, LW" на список?

----- добавлено через ~3 ч. -----
Нашел вариант у Lee Mac-а․ Не совсем то, но подстроиться можно.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 12.02.2017, 10:06
#3242
Кулик Алексей aka kpblc
Moderator

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


Ну дык... Либо initget + getkword, либо создавать диалог и выбирать в нем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.02.2017, 03:35
#3243
Red Nova

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


Спасибо, учту
__________________
Блог
Red Nova вне форума  
 
Непрочитано 14.02.2017, 10:03
#3244
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Как можно дальше раздробить "F, 1, 2, LW" на список?
http://forum.dwg.ru/showthread.php?p=911449
roaa вне форума  
 
Непрочитано 14.02.2017, 18:52
#3245
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Нашел мастер-класс 2014-ого от А. Кулика. Там есть пример с командой _purge
Вроде идея описанная в статье понятно, но почти сразу начинается головная боль. Во-первых он (приведенные код) не работает (может опечатка в PDF) _o - мне автокад называется неверным ключом...
Во-вторых, не понимаю, зачем вводить другие ключи если мы уже указали _a - т.е удалять все объекты. Вот код чтоб было понятнее.

Не вижу разницы в работе этого (за исключением ошибки с _o)
Код:
[Выделить все]
 (defun c:pua ()
(repeat 3
(command "_.-purge" "_a" "*" "_n")
(command "_.-purge" "_e")
(command "_.-purge" "_z")
(command "_.-purge" "_o")
(command "_.-purge" "_r" "*" "_n")
) ;_ end of repeat
(command "_.audit" "_y")
) ;_ end of defun
и этого:
Код:
[Выделить все]
 
(defun c:pua ()
(repeat 3
(command "_purge" "_a" "*" "_n")
) ;_ end of repeat
(command "_audit" "_y")
) ;_ end of defun
Просьба ничем не кидаться, я совсем новичок в этом и понимаю, что первый вариант "правильнее", т.к. его делал специалист, а второй - я =) И еще вопрос зачем делать "-" и "." в начале. Что делает "-" я понимаю, но не понимаю зачем закладывать это в код - смысл видеть все эти абзацы в кс во время работы лиспа? А вот что точка дает перед именем мне неизвестно.
Готов пойти по всем ссылкам куда пошлете и читать книги =), чем в принципе и занимаюсь в последние дни. Просто такие странности в чужом коде в самом начале пути ставят в тупик, начинает казаться, что вообще ничего не понимаю.

И еще маленькие вопросы, в диалоговом окне purge есть галочка "удалять вложенные объекты" - как ее командно активировать? Я правильно понимаю, что ключи к любой команде можно посмотреть только вызвав ее через - и дальше искать заглавные буквы или есть какие-то "списки"?

Последний раз редактировалось Immortal_6666, 14.02.2017 в 19:22.
Immortal_6666 вне форума  
 
Непрочитано 14.02.2017, 19:36
#3246
skkkk


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


Immortal_6666, почему-то в последнее время нигде не могу найти список английских команд с опциями, раньше точно были они в онлайн-справке к AutoCAD 2010 - теперь там лишь какие-то скудные описания. Поскольку последнее время почти отошел от командных методов, давно не приходилось искать. Если кто ткнет в ссылку, буду признателен.

Скажу точно, что опция "_r" чистит зарегистрированные приложения, которые не чистит опция "_a". Про остальные опции из кода выше сказать не могу, т. к. неясно, какая из букв кажлой опции - заглавная, но видимо, они также не чистятся при выборе "всего". Если скинешь полный список опций этой команды, будет яснее. Черточка означает вызов команды в бездиалоговом режиме (в режиме командной строки), если таковой для команды имеется. Это как раз для программной работы, без чертечки выскочит окно. Точка - это гарантированный вызов родной автокадовской команды, если вдруг она переопределена пользователем на свое усмотрение.
skkkk вне форума  
 
Непрочитано 14.02.2017, 19:53
#3247
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Цитата:
Сообщение от skkkk Посмотреть сообщение
Immortal_6666, почему-то в последнее время нигде не могу найти список английских команд с опциями, раньше точно были они в онлайн-справке к AutoCAD 2010 - теперь там лишь какие-то скудные описания. Поскольку последнее время почти отошел от командных методов, давно не приходилось искать. Если кто ткнет в ссылку, буду признателен.

Скажу точно, что опция "_r" чистит зарегистрированные приложения, которые не чистит опция "_a". Про остальные опции из кода выше сказать не могу, т. к. неясно, какая из букв кажлой опции - заглавная, но видимо, они также не чистятся при выборе "всего". Если скинешь полный список опций этой команды, будет яснее. Черточка означает вызов команды в бездиалоговом режиме (в режиме командной строки), если таковой для команды имеется. Это как раз для программной работы, без чертечки выскочит окно. Точка - это гарантированный вызов родной автокадовской команды, если вдруг она переопределена пользователем на свое усмотрение.
Спасибо - про точку нигде не попадалась информация.
А насчет черточки - я понимаю, что она делает, но в коде без нее тоже никаких окон нет. Я использую режим с черточкой, чтобы предварительно "подсмотреть" ключи команд перед написанием макроса. Но не понимаю, зачем ее включили в данный код - с ней в командной строке выводится целый том войны и мира, без нее лисп работает "тихо", но тоже работает и без диалоговых окон.

Ключи описаны в файле (он в открытом доступе лежит, думаю, автор не будет против, что я приложу его сюда), данный пример - страницы 5,6.

Главный вопрос, наверное, как догадаться, что purge с ключом "все" чистит на самом деле не все и что нужно вызывать ключи _r и другие?
Вложения
Тип файла: pdf AUR_2014_Presentation_Kulik_lisp.pdf (276.5 Кб, 24 просмотров)

Последний раз редактировалось Immortal_6666, 14.02.2017 в 20:01.
Immortal_6666 вне форума  
 
Непрочитано 14.02.2017, 20:08
1 | #3248
Кулик Алексей aka kpblc
Moderator

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


На тот момент, если не ошибаюсь, у меня было несколько файлов, в которых очистка "всего" не удаляла ни пустые тексты, ни нулевую геометрию, ни т.н. "Связанные данные" (они же AcDgnLS). Почему так получалось - не помню, но для гарантии и перестраховки дополнительно ввел соответствующие ключи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2017, 20:18
#3249
skkkk


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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
А насчет черточки - я понимаю, что она делает, но в коде без нее тоже никаких окон нет
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
не понимаю, зачем ее включили в данный код
Это справедливо не для всех версий и не для всех команд, думаю, поэтому программисты машинально ставят ее.
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
с ней в командной строке выводится целый том войны и мира
Я, например, часто как раз предпочитаю проконтролировать, что удалилось. Например, когда потёр ненужные блоки с чертежа, проверить: а удалились ли они из базы или я стёр не все?
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
как догадаться, что purge с ключом "все" чистит на самом деле не все и нужно вызывать ключи _r и другие?
Проверив, например, что после чистки "всего" зарегистрированные приложения также чистятся. Алексей, видимо, доходил до этого как-то так. Пункт "_O", кстати, - Orphaned data ("осиротевшие" данные) - видимо, уже давно упразднен, по крайней мере, в 2011-м его точно нет (или, может, он предусмотрен только в каких-то вертикалках). Поэтому и выдает ошибку. Там же в файле Алексеем указана рекомендация чистить файл три раза. Это потому, что при удалении, например, блока, в котором находился текстовый объект определенного стиля этот стиль еще использовался, а после удаления - уже нет; повторная очистка стирает его из базы чертежа.

----- добавлено через 56 сек. -----
Вот Алексей уже сам и ответил.
skkkk вне форума  
 
Непрочитано 14.02.2017, 20:20
#3250
Кулик Алексей aka kpblc
Moderator

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


Он не упразднен, он появился только в 2015 версии, если не ошибаюсь.
P.S. Вообще говоря, уже достаточно давно предпочитаю обходиться некомандными методами Контроля больше
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2017, 20:41
#3251
skkkk


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Он не упразднен, он появился только в 2015 версии, если не ошибаюсь.
То-то я и думаю, вроде что-то новенькое...
Кулик Алексей aka kpblc, это и есть "связанные данные"?
Что за зверь такой, просвети, пожалуйста?
skkkk вне форума  
 
Непрочитано 15.02.2017, 12:10
#3252
Кулик Алексей aka kpblc
Moderator

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


http://adn-cis.org/forum/index.php?topic=709.0
http://adn-cis.org/forum/index.php?topic=2617
"Что это такое и откуда берется" - на русском информации мало: https://www.google.ru/webhp?hl=ru&sa...%D0%B2+autocad
По моим ощущениям, это последствия перегона данных из Microstation (кажется) в dwg.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.02.2017, 12:36
#3253
skkkk


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


Спасибо, Алексей, понял. Это DGN. У gomer'a в CleanDWG есть очистка от типов линий DGN. И она отрабатывает в 2011-м с результатом "Стили линий dgn не найдены". А вот опции "_O" в purge нет. Мне пока не приходилось с ними встречаться в чертежах.
skkkk вне форума  
 
Непрочитано 17.02.2017, 17:24
#3254
I_g_o_r


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


Добрый день!!

Подскажите, пожалуйста, как быть. В чертеже создаю блок. Начинаю "вскрывать" его - выдает ошибку. Если этот блок скопировать, то скопированный блок будет так же выдавать ошибку. Но, если применить тот же код для исходного блока, то все работает.
Прикладываю код - он чисто для проверки. Блок тоже в прищепке.


Код:
[Выделить все]
 
(defun c:q () 
(setq nabor (ssget))

(setq dl (sslength nabor))
(setq i 0)

( While (< i dl)

(setq a (cdr (assoc -1 (entget (ssname nabor i)))))

;(print (entget (ssname nabor i)))
(print a)
(setq a (entnext a)); name insert
(print a)
(setq k (entget a))

			(WHILE a
			(setq k (entget a)); parametrs insert
			(setq a (entnext a))
			(print a)  
			)
(setq i (+ i 1))
)
(alert "Все ок!!")
)
Вложения
Тип файла: dwg
DWG 2013
Бложик.dwg (31.7 Кб, 13 просмотров)
I_g_o_r вне форума  
 
Непрочитано 18.02.2017, 08:26
#3255
Кулик Алексей aka kpblc
Moderator

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


Что ты хочешь получить? В каком месте ошибка? Какая ошибка?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2017, 09:55
#3256
I_g_o_r


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


Доброе утро!
Ошибка: неверный тип аргумента: lentityp nil. - выскакивает в 13 ой строке. Код - часть приложения, которое собирает блоки в кучку по списку с графической базы данных - просто убрал все лишнее.
Может что не то у меня с автокадом? На предприятии несколько версий, везде лицензия и везде похожая ситуация периодически возникает. Ошибка выпадает только в последнем созданном в этом чертеже блоке. И, что самое странное, когда просто копируешь этот блок рядышком - все начинает работать.
I_g_o_r вне форума  
 
Непрочитано 18.02.2017, 11:38
#3257
Кулик Алексей aka kpblc
Moderator

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


Тебе что от блока надо? На данный момент ты просто получаешь (зачем?) ename-указатели на элементы набора. Если не удается обработать последний примитив (а так и должно быть - ведь следом за ним вообще ничего нет), оно тебе вываливает ошибку.
Тебе сконвертировать набор в список примитивов надо, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2017, 13:24
#3258
I_g_o_r


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


Давай сначала. Допустим, я ищу в блоке определенную надпись. Для того чтобы до нее добраться - я должен проковырять весь блок. Здесь все упростил, чтобы "обкатать" на простом примере. Обычно все работает, но в этом случае код не проходит весь цикл ни разу - вылетает ошибка. Судя по тому что возникают вопросы - у тебя все работает и в конце вылетает окошко "все ок". Стало быть дело либо в моем автокаде, либо в моем компе.
I_g_o_r вне форума  
 
Непрочитано 18.02.2017, 13:58
#3259
Кулик Алексей aka kpblc
Moderator

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


Опять путаница между описанием блока и вхождением блока. https://www.google.ru/search?q=%D1%8...fIH8WS6ASpw5Ag

----- добавлено через 13 сек. -----
Хоть статью пиши, ей-богу!

----- добавлено через ~33 мин. -----
В качестве первых набросков: http://autolisp.ru/2017/02/18/blockdef-and-blockref/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.02.2017, 08:12
#3260
Romazn


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


Всем доброго времени суток!
Совсем недавно начал пробовать писать что то в лиспе, поэтому не совсем представляю себе его возможности.
Кто в курсе, скажите, есть ли возможность написать такого типа программу:
Есть огромная база чертежей *.DWG. Каждый чертеж имеет название в формате aaaaaa.bbbbbbb*.dwg
где : аааааа - номер машины
bbbbbbb - номер чертежа
* - любые символы(или их нет)
чертежи разложены по папкам с путем ...\аааааа*\...
где : аааааа - номер машины
* - любые символы.

Есть файл спецификации, в котором, помимо прочего, есть, в виде текста, номера чертежей. Вот так это выглядит:


То есть, например чертеж 543011.2801043(с картинки) будет иметь такой путь: ...\543011*\543011.2801043*.dwg

Есть ли у лиспа такие возможности, что бы при клике на номер чертежа в спецификации, данный чертеж открывался в новом окне?
Romazn вне форума  
Ответ
Вернуться   Форум 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