Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 227
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 2048481
 
Непрочитано 19.02.2024, 14:04
1 | #4521
Кулик Алексей aka kpblc
Moderator

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


Значит влегкую не получится, диалог все равно будет вываливаться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.02.2024, 08:30
#4522
posetitel


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


Хорошо, со всплывающим окном подтверждения придется мириться.
А можно ли как прописать условие проверки, выполнима ли команда _SPDSNET_ExportACAD? Т.е. чтобы если команда не найдена (модуль СПДС не установлен на машине), лисп продолжал выполнять следующие команды по списку, а не прерывался с ошибкой?
posetitel вне форума  
 
Непрочитано 20.02.2024, 09:42
1 | #4523
Кулик Алексей aka kpblc
Moderator

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


vl-catch-all-apply - ИМХО самое простое
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.02.2024, 12:19
#4524
Alxndr1697


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


Цитата:
Сообщение от posetitel Посмотреть сообщение
Есть команда _SPDSNET_ExportACAD, которая должна взрывать все объекты spds extension (Autodesk SPDS)
А заменить на (command-s "_.Explode" "_all" ""), например?

Параметр "_All", возможно, неверный. У меня взрывает только первый объект, а должен, вроде как, все

Последний раз редактировалось Alxndr1697, 20.02.2024 в 12:25.
Alxndr1697 вне форума  
 
Непрочитано 20.02.2024, 12:47
#4525
Кулик Алексей aka kpblc
Moderator

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


Угу, и разбить вообще все? Включая размеры, таблицы, что там еще попадется?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.02.2024, 12:50
#4526
Alxndr1697


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


Дык, я подумал, что такая задача и стоИт...

Понял, надо фильтр на "все объекты spds extension (Autodesk SPDS)"
Alxndr1697 вне форума  
 
Непрочитано 20.02.2024, 12:58
#4527
posetitel


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


Да, хотел взрывать штатными средствами, раз есть такая опция, да и spds extension - очень специфические объекты, и лучше делать все так, как у них предусмотрел разработчик, иначе косяки вылезают в неожиданных местах.
Подскажите, как работает vl-catch-all-apply, какой у нее принцип?
Ну т.е. эта функция похожа на оператор если: если ошибка делай то, если нет ошибки делай это?
Т.е. после проверяемого условия мне нужно будет два раза написать продолжение кода, чтобы он выполнялся и при возникновении ошибки и без возникновения ошибки?
posetitel вне форума  
 
Непрочитано 20.02.2024, 13:30
#4528
name02


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


Цитата:
Сообщение от posetitel Посмотреть сообщение
Подскажите, как работает vl-catch-all-apply, какой у нее принцип?
Читай справку vl-catch-all-apply и vl-catch-all-error-p
name02 вне форума  
 
Непрочитано 20.02.2024, 21:13
#4529
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,105


Цитата:
Сообщение от posetitel Посмотреть сообщение
Хорошо, со всплывающим окном подтверждения придется мириться.
Можно довольно просто сделать, чтобы 'Ok' в окне нажимался сам (окно будет всплывать и тут же закрываться).
SetQ вне форума  
 
Непрочитано 21.02.2024, 08:50
#4530
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от SetQ Посмотреть сообщение
Можно довольно просто сделать, чтобы 'Ok' в окне нажимался сам (окно будет всплывать и тут же закрываться).
Это как?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2024, 09:44
#4531
Сергей812


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Это как?
найти окно, затем хэндл кнопки и послать ей (кнопке) сообщение BM_CLICK - чистое WinApi, которое вроде из лиспа тоже можно вызывать.
Сергей812 вне форума  
 
Непрочитано 21.02.2024, 10:44
#4532
posetitel


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


Цитата:
Сообщение от posetitel Посмотреть сообщение
Да, хотел взрывать штатными средствами, раз есть такая опция, да и spds extension - очень специфические объекты, и лучше делать все так, как у них предусмотрел разработчик, иначе косяки вылезают в неожиданных местах.
Подскажите, как работает vl-catch-all-apply, какой у нее принцип?
Ну т.е. эта функция похожа на оператор если: если ошибка делай то, если нет ошибки делай это?
Т.е. после проверяемого условия мне нужно будет два раза написать продолжение кода, чтобы он выполнялся и при возникновении ошибки и без возникновения ошибки?
Запилил лисп по советам форумчан и все работало, спасибо откликнувшимся, но традиционно косяки вылезли откуда не ждали, а именно в долбаном СПДСе от автодеска, он очень криво сам взрывает свои же объекты. Тамошний форум закрыт (только чтение), сами понимаете из-за чего. Теперь придется искать другие способы.
posetitel вне форума  
 
Непрочитано 21.02.2024, 11:04
| 1 #4533
Кулик Алексей aka kpblc
Moderator

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


Сносить SPDS Extension и дальше ExplodeAllProxy от А.Н.Ривилиса )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2024, 11:06
#4534
posetitel


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


а есть лисп, чтобы автоматизировать процесс:
снес спдс - применил ExplodeAllProxy от А.Н.Ривилиса - установил спдс
а?
posetitel вне форума  
 
Непрочитано 21.02.2024, 11:17
#4535
Кулик Алексей aka kpblc
Moderator

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


Учитывая, что SPDS Extension надо сносить средствами винды, насколько я помню?

----- добавлено через ~2 мин. -----
Ну а на старт каждого документа поставить нечто типа
(if (= (getvar "demandload") 3)
(alert "Сначала demandload в 2, а потом и поговорим")
(progn
(if explodeproxyinentity (vl-cmdf "_.explodeallproxy" "_.removeallproxy" "_n"))

----- добавлено через ~2 мин. -----
Код написан на коленке, и рабочим не является
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2024, 11:20
#4536
posetitel


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


То была шутка, конечно, не наудаляешься и не наставишься потом обратно этот модуль ради только взрывания его объектов.
Есть отдельная тема на форуме, как средствами лиспа взорвать, но в новой версии модуль опять перелопатили и тот лисп теперь не работает.
posetitel вне форума  
 
Непрочитано 21.02.2024, 11:24
#4537
Кулик Алексей aka kpblc
Moderator

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


Ну, подобное я себе ставить как бы не собираюсь.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2024, 13:14
#4538
posetitel


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


подскажите еще по другой теме:
в коде присвоил переменной имя файла
(setq с_dwg (strcat(getvar "DWGPREFIX")(getvar "DWGNAME")))
далее по этой переменной пытаюсь закрыть файл
(vla-Close с_dwg :vlax-true)
акад пишет ошибку: неверный тип аргумента: VLA-OBJECT "C:\\Users\\....имяфайла.dwg".
в чем может быть дело? У Полещука функция vla-Close не описывается, хотя в примерах есть, например, на странице 402.

добавлю, может это важно, что предварительно открываю другой документ

т.е. код выглядит так:
(setq с_dwg (strcat(getvar "DWGPREFIX")(getvar "DWGNAME")))
(vla-activate(vla-open (vla-get-documents (vlax-get-acad-object))(findfile o_dwg) :vlax-false))
(vla-Close с_dwg :vlax-true)

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

Последний раз редактировалось posetitel, 21.02.2024 в 13:53.
posetitel вне форума  
 
Непрочитано 21.02.2024, 13:51
1 | #4539
Кулик Алексей aka kpblc
Moderator

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


Правильно. Потому что надо передавать указатель на документ, а не непонятную строку

----- добавлено через 59 сек. -----
Если что, лисп в каде работает только в текущем документе. И при смене документа можно словить самые разнообразные приколы, вплоть до остановки выполнения лиспа.

----- добавлено через ~2 мин. -----
ПыСы для работы с нетекущим документов настоятельно рекомендую использовать менее варварские способы. Например, ObjectDBX (ну или вообще поднимать отдельный экземпляр ACAD'а и работать с ним)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2024, 14:33
#4540
posetitel


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


Напоминаю идею: получить переменные с именем открываемого (o_dwg) файла и закрываемого (с1_dwg), а потом открыть открываемый и закрыть закрываемый соответственно.
Код был примерно такой
(setq с1_dwg (strcat(getvar "DWGNAME")))
(setq с2_dwg (vla-Item (vla-get-documents (vlax-get-acad-object)) с1_dwg))
(vla-activate(vla-open (vla-get-documents (vlax-get-acad-object))(findfile o_dwg) :vlax-false))
(vla-Close с2_dwg :vlax-true )

нужный файл открылся, но закрыть первый не смог, получил ошибку "Ошибка Automation. Чертеж занят."
Скорее всего это из-за попытки закрыть документ из которого выполняется лисп, несмотря на то, что я уже открыл другой чертеж.
Ну и вообще моя идея изначально плохая, как пишут выше.
posetitel вне форума  
Ответ
Вернуться   Форум 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