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

Вернуться   Форум 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.
Просмотров: 2055427
 
Непрочитано 05.05.2024, 15:13
1 | #4561
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,813


Цитата:
Сообщение от Sege Посмотреть сообщение
что дальше делать с полученным значением clr для его проверки (цвет равен красным)
(= 1 (vla-get-colorindex clr))
__________________
K Lisp
koMon вне форума  
 
Непрочитано 05.05.2024, 22:04
1 | #4562
Кулик Алексей aka kpblc
Moderator

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


Sege, попробуй взять дамп clr.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.05.2024, 03:54
#4563
Red Nova

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


Еще один вопрос. Имею блок (главнй блок) который в свою очередь состоит из блоков (второстипенные блоки).
Имея только Entity name одного из второстепенных блоков, возможно ли получить Entity name главного блока?
Файл примера прикрепляю.
Вложения
Тип файла: dwg
DWG 2018
Example.dwg (144.3 Кб, 9 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.05.2024, 09:15
#4564
Кулик Алексей aka kpblc
Moderator

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


Во-первых, ты получаешь указатель на вхождение блока или на его описание? Если на вхождение, то через OwnerId (или 330-ю группу) получить "владельца" можно. Если на описание - то никак: блок может быть вставлен куда угодно. Или вообще не вставлен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.05.2024, 16:26
#4565
Red Nova

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


Спасибо, получилось. Речь шла о вхождении блока.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 15.05.2024, 14:43
#4566
40in


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


Есть файл с кучей динамических блоков. В свойствах все блоки имеют одно имя, но по ENTGET получаю разные значения имени блока (assoc 2 ) Вот собственно и вопрос: как добраться до истинного имени блока?
40in вне форума  
 
Непрочитано 15.05.2024, 15:36
#4567
name02


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


Код:
[Выделить все]
 (setq ent (car (entsel "\n Select a Dynamic block :")))
(vla-get-Effectivename (vlax-ename->vla-object ent))
или более универсальный вариант от kpblC https://forums.augi.com/showthread.p...l=1#post610063

Или тут - на VLisp или чистом лиспе https://lee-mac.com/effectivename.html

Последний раз редактировалось name02, 15.05.2024 в 15:44.
name02 вне форума  
 
Непрочитано 15.05.2024, 15:36
#4568
Кулик Алексей aka kpblc
Moderator

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


Через ActiveX: vla-get-effectivename
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.05.2024, 15:37
#4569
Сергей812


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


Цитата:
Сообщение от 40in Посмотреть сообщение
Вот собственно и вопрос: как добраться до истинного имени блока?
просто получаете имена не самого исходного определения динблока, а промежуточных анонимных определений блоков - соответствующих заданному состоянию дин. параметров блока. А вот анонимные определения блоки будут ссылаться в качестве родительского элемента уже на искомый оригинальный динблок.

Последний раз редактировалось Сергей812, 15.05.2024 в 15:45.
Сергей812 вне форума  
 
Непрочитано 15.05.2024, 18:02
#4570
40in


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


Всем спасибо!!! Вы мне очень помогли!
40in вне форума  
 
Непрочитано 16.05.2024, 18:17 Отображение диалога по inetget
#4571
1958


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


Код:
[Выделить все]
  (initget "Нет Замечания Принято Брак Чужое")
 (setq reply (getkword "Проверка: [Нет/Замечания/Принято/Брак/Чужое]: "))
 (setq answ (cond ((= reply "Нет") 0)
                  ((= reply "Замечания") 1)
                  ((= reply "Принято") 2)
                  ((= reply "Брак") 3)
                  ((= reply "Чужое") 4)
                  (t nil)
            )
 )
Дома и на работе установлен AC2024. По вышеприведенному коду отображение диалога на работе и дома отличается. Я так понимаю, что это зависит от какой-то системной переменной. Какой? Или в чем-то другом причина?
Миниатюры
Нажмите на изображение для увеличения
Название: домашний.jpg
Просмотров: 34
Размер:	8.8 Кб
ID:	263090  Нажмите на изображение для увеличения
Название: рабочий.jpg
Просмотров: 35
Размер:	2.7 Кб
ID:	263091  
1958 вне форума  
 
Непрочитано 16.05.2024, 20:21
#4572
SetQ

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


Цитата:
Сообщение от 1958 Посмотреть сообщение
Я так понимаю, что это зависит от какой-то системной переменной. Какой? Или в чем-то другом причина?
Не похоже на переменную, скорее, какая-то неисправность в автокаде.
SetQ вне форума  
 
Непрочитано 17.05.2024, 17:28
#4573
1958


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


Цитата:
Сообщение от SetQ Посмотреть сообщение
скорее, какая-то неисправность в автокаде.
Ерунда эта появилась из-за авто переноса пользовательских настроек при установке AC2024. Я, в основном, работаю в AC2007. Пришлось возвращать настройки по умолчанию, а потом вручную настраивать автокад род себя и всё заработало нормально.
1958 вне форума  
 
Непрочитано 11.06.2024, 12:52
#4574
Сет


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


Как организовать выбор объекта по условию? Есть простая функция entsel, но она выбирает любой тип объекта. А мне бы хотелось, чтобы выбирался только объект, удовлетворяющий некоторым условиям. Ну например, это должно быть вхождение блока с именем "абв". То есть если пользователь на запрос программы "Выберите объект" кликает на любой другой объект - ничего не должно происходить. И только если пользователь кликнул на вхождение блока с именем "абв" - продолжилось бы выполнение лисп-программы.
Сет вне форума  
 
Непрочитано 11.06.2024, 13:28
#4575
Сергей812


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


цикл по факту выбора правильного объекта - вроде встроенной фильтрации типа выбираемого объекта в лиспе нет, в отличие от того же .Net
Сергей812 вне форума  
 
Непрочитано 11.06.2024, 13:32
#4576
Сет


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
цикл по факту выбора правильного объекта - вроде встроенной фильтрации типа выбираемого объекта в лиспе нет, в отличие от того же .Net
В функции ssget фильтрация есть. Получается такой функционал работает только для наборов, а для одиночного объекта нужно что-то изобретать?
Сет вне форума  
 
Непрочитано 11.06.2024, 13:55
1 | #4577
Сергей812


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


Цитата:
Сообщение от Сет Посмотреть сообщение
нужно что-то изобретать?
в лиспе приходится постоянно что-то изобретать, как и в том же VBA - языки остановились в своем развитии *-цать лет назад.. Хотя для сравнения в том же .Net можно задать искомый тип примитива, но проверку на
Цитата:
Сообщение от Сет Посмотреть сообщение
блока с именем "абв"
надо будет делать отдельно в коде. Т.е. только частично код сокращается по сравнению с лиспом в данном случае.
Сергей812 вне форума  
 
Непрочитано 11.06.2024, 14:02
1 | #4578
megabeton


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


Кликнул по объекту entsel'ом, посмотрел что это через entget, если удовлетворило условие, продолжил выполнение кода, если нет, выполнил новый entsel (через while)

----- добавлено через ~1 мин. -----
Встроенной фильтрации в entsel'е нет
megabeton вне форума  
 
Непрочитано 11.06.2024, 14:09
#4579
Сет


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
Кликнул по объекту entsel'ом, посмотрел что это через entget, если удовлетворило условие, продолжил выполнение кода, если нет, выполнил новый entsel (через while)
Примерно так и собирался поступить, но подумал может есть какой-то фильтр выбора по типу ssget.
Сет вне форума  
 
Непрочитано 11.06.2024, 14:16
#4580
megabeton


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


(while
(= "АБВ" (cdr (assoc 2 (entget (setq obj (car (entsel)))))))
(что то делаем с obj)
...
)
megabeton вне форума  
Ответ
Вернуться   Форум 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