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

Вернуться   Форум 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.
Просмотров: 2048267
 
Непрочитано 26.07.2024, 21:09
#4661
Кулик Алексей aka kpblc
Moderator

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


Я бы заменил
Код:
[Выделить все]
 (member (car cname) (list "РЕГЕН" "REGEN" "_regen" "ВСЕРЕГЕН" "REGENALL" "_regenall"))
на нечто типа
Код:
[Выделить все]
 (wcmatch (strcase (vl-string-trim "_" cname)) "REGEN*")
Написал насухую, мог ошибиться с vl-string-trim.
Цитата:
Сообщение от Сет Посмотреть сообщение
Пока да, надо подумать об этом тоже.
Да че там думать - либо ssget "_.+:LX" (или как-то так), либо разблокировать слои и после обработки - восстанавливать все обратно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.07.2024, 21:10
#4662
Сет


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


Что касается мультивыноски, то вышеописанная проблема со смещением содержимого поля относительно полки присутствует и для обычных автокадовских стандартных мультивыносок, если выставить выравнивание по центру. То есть врядли тут может быть проблема в моем коде, формирующем мультивыноску. Я его сюда не выкладываю, потому что он громоздкий, врядли кто-то будет в нем подробно разбираться.
Сет вне форума  
 
Непрочитано 26.07.2024, 21:21
#4663
skkkk


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


Сет, а что мешает сделать свой реген? Сейчас посмотрел свой код - в своё время так и сделал, оказывается, даже забыл уже об этом. Да, такая же проблема была со смещением, ещё года с 2008-го. При вызове сначала запускается цикл назначения всем мультивыноскам выравнивания: запоминается изначальное значение каждой мультивыноски, назначается другое, затем возвращается исходное, после этого все мультивыноски переносятся на передний план и, наконец, запускается штатная регенерация. И не нужно никаких реакторов.
skkkk вне форума  
 
Непрочитано 26.07.2024, 21:27
#4664
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
а что мешает сделать свой реген?
Да, пожалуй можно и так сделать, обойтись без реакторов. Только сначала должна быть регенерация, а потом обработка мультивыносок.

Но это тоже костыль, только чуть изящнее
Сет вне форума  
 
Непрочитано 26.07.2024, 21:30
#4665
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Сет Посмотреть сообщение
Я его сюда не выкладываю, потому что он громоздкий, врядли кто-то будет в нем подробно разбираться.
Странно, у меня пока что получается нечто типа:
Код:
[Выделить все]
 (vl-load-com)

(defun _kpblc-ent-create-mleader (start-point end-point annostring / adoc anno leader)

  (setq adoc   (vla-get-activedocument (vlax-get-acad-object))
        leader (vla-addmleader
                 (vla-get-modelspace adoc)
                 (vlax-make-variant
                   (vlax-safearray-fill
                     (vlax-make-safearray
                       vlax-vbdouble
                       '(0 . 5)
                     )
                     (append start-point end-point)
                   )
                 )
                 0
               )
  )
  (vla-put-textstring leader annostring)
  leader
)
Начальная точка (откуда строить), конечная точка (где располагается полка), текст выноски. ВОзвращает указатель на MLeader. А потом ты уже с ним делаешь что угодно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.07.2024, 21:31
#4666
skkkk


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


Цитата:
Сообщение от Сет Посмотреть сообщение
Только сначала должна быть регенерация, а потом обработка мультивыносок.
У меня и наоборот работает
Offtop:
Цитата:
Сообщение от Сет Посмотреть сообщение
Но это тоже костыль, только чуть изящнее
С учётом упорного нежелания Автодеска работать над устранением подобных багов от версии к версии, у меня подобных костылей уже с десяток, наверное, наберётся.
skkkk вне форума  
 
Непрочитано 26.07.2024, 22:04
#4667
Сет


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Странно, у меня пока что получается нечто типа
Так у меня же не просто выноска строится, там много всего наворочено, чтобы и поле из блока бралось, и некоторые элементы форматирования текста, и особенности задания выноски (используется dcl-окно), потому лисп громоздкий.

Цитата:
Сообщение от skkkk Посмотреть сообщение
У меня и наоборот работает
Это странно. Ведь текст в мультивыноске с полем сползает с полки как раз после регенерации. Потому что поля обновляются. В моем случае обработку мультивыносок нужно производить после регенерации.
Сет вне форума  
 
Непрочитано 26.07.2024, 22:16
#4668
skkkk


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


Цитата:
Сообщение от Сет Посмотреть сообщение
Это странно. Ведь текст в мультивыноске с полем сползает с полки как раз после регенерации.
Вообще, логично. У меня, помнится, не из-за полей съезжали выноски. А так, думаю, практичнее будет вместо регена применять к мультивыноскам команду _UPDATEFIELD, особенно на громоздких чертежах.
skkkk вне форума  
 
Непрочитано 26.07.2024, 23:13
#4669
Сет


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


del
Сет вне форума  
 
Непрочитано 29.07.2024, 12:19
#4670
Сет


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да че там думать - либо ssget "_.+:LX" (или как-то так), либо разблокировать слои и после обработки - восстанавливать все обратно.
Комбинирование режимов выбора ssget не документировано. Скомбинировать режимы "_X" и "_:L" не получилось. Поэтому сделал так:
Код:
[Выделить все]
 
(setq ss (ssget "_X" '((0 . "MULTILEADER"))))
(sssetfirst nil ss)
(setq ss (ssget "_:L"))
Сет вне форума  
 
Непрочитано 29.07.2024, 12:40
#4671
Кулик Алексей aka kpblc
Moderator

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


Насчет недокументированности : https://www.lee-mac.com/ssget.html
А зачем ты вообще формируешь набор? Может, проще будет программно пройтись по пространствам модели / листов и набрать в один список все указатели на мультивыноски (заодно контролируя состояние слоя, тип аннотации и теде)?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.07.2024, 13:22
#4672
Сет


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Насчет недокументированности : https://www.lee-mac.com/ssget.html
У Полещука написано, что комбинации режимов недокументированы. Скомбинировать X и :L в работающую конструкцию у меня не получилось. В частности "_+.X:L" - не работает.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А зачем ты вообще формируешь набор? Может, проще будет программно пройтись по пространствам модели / листов и набрать в один список все указатели на мультивыноски (заодно контролируя состояние слоя, тип аннотации и теде)?
Так набор вроде это и делает по сути. В принципе код компактный, работает - чего еще от него желать. Только быстродействия, но это надо будет как нибудь потестить на большом файле с тысячами мультивыносок.
Опционально было бы неплохо еще обрабатывать и выноски на блокированных слоях, но не стал заморачиваться с временной разблокировкой. Делаю функцию чисто для себя, а я не так уж и часто пользуюсь блокировкой слоев.
Сет вне форума  
 
Непрочитано 30.07.2024, 19:57
#4673
Сет


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


Можно ли использовать grread с объектной привязкой и ее отслеживанием?

Поиск в интернете дает довольно много разных решений на тему ПСЕВДО объектной привязки с функцией grread, но почему-то ни один из примеров у меня не работает как ожидается, то есть никакой объектной привязки нет. Например вот этот пример. Тут даже на демонстрационной гифке показана объектная привязка, но у меня почему-то эта функция так не работает. У меня Автокад 2022. В этой версии может уже пропали возможности, реализованные в этом примере? Обратил внимание, что все способы, которые попадались в поиске - довольно давние, около 15 лет им. В версии 2022 это уже не работает?
Сет вне форума  
 
Непрочитано 30.07.2024, 20:04
#4674
Кулик Алексей aka kpblc
Moderator

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


Сам по себе grread привязку не поддерживает. Решение, насколько я помню, было от Елпанова на theswamp.org, но оно настолько замороченное...
А тебе вообще зачем? Может, getpoint будет достаточно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.07.2024, 20:13
#4675
Сет


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Решение, насколько я помню, было от Елпанова на theswamp.org, но оно настолько замороченное...
Попадались и его примеры - не работают.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А тебе вообще зачем? Может, getpoint будет достаточно?
Хочу программно отрисовывать будущий вид создаваемых элементов, как это реализовано в оригинальных функциях автокад. Например ту же самую мультивыноску. Стандартная мультивыноска меня не устраивает. Рисую ее через vla-AddMLeader, далее меняю разные свойства. Нужно чтобы она была визуализирована, пока я перемещаю курсор по экрану.
Сет вне форума  
 
Непрочитано 30.07.2024, 20:38
| 1 #4676
Кулик Алексей aka kpblc
Moderator

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


Я бы уже задумывался о применении NET и его транзитной (вроде так называется) графики. JIG, в общем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.07.2024, 20:56
#4677
Сергей812


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


причем это будет штатный API акада, а не ежик из костылей)

----- добавлено через ~5 мин. -----
вот один из примеров для ознакомления от Kean Walmsley.
Сергей812 вне форума  
 
Непрочитано 30.07.2024, 22:27
#4678
Сет


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я бы уже задумывался о применении NET и его транзитной (вроде так называется) графики. JIG, в общем.
А где бы посмотреть азы по этой теме? То есть в принципе как это работает. После часа поиска в интернете - ничего путного не нашел.

----- добавлено через ~13 мин. -----
Или это имеется ввиду работа с ObjectArx? Как-то однажды попытался его освоить, но что-то не получилось с ходу написать dll, которая будет работать в среде автокад. Возможно из-за того, что писал в Embarcadero C++ Builder, хотя там рекомендуется Visual Studio, причем под разные версии ObjectArx - разные версии Visual Studio, такая "универсальность" отпугнула.
Сет вне форума  
 
Непрочитано 30.07.2024, 23:37
#4679
Кулик Алексей aka kpblc
Moderator

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


Дык ета... Сергей же ссылку дал - вот и вперед, с песнями ))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.07.2024, 09:14
#4680
Кулик Алексей aka kpblc
Moderator

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


Ну да, у меня самого пока что с JIG так себе дела обстоят (
__________________
Моя библиотека 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