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

Вернуться   Форум 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.
Просмотров: 1965972
 
Автор темы   Непрочитано 03.08.2018, 21:10
#3661
Red Nova

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


Maksim7enov
getkword и разрешить ввод точки с экрана? Это как?

koMon
getdist то что нужно Спасибо.
Код:
[Выделить все]
 (setq pt2 (getdist pt1 "\nThe Radius Point (or Enter Diameter in inches):"))
__________________
Блог
Red Nova вне форума  
 
Непрочитано 03.08.2018, 23:23
#3662
Maksim7enov


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
getkword и разрешить ввод точки с экрана? Это как?
Думал задать вопрос для выбора нужного дуйствия с помощью getkword с указанием точки или ввода радиуса и сделать значение по умолчанию например точку.
Не особо понял задачу видимо.
Maksim7enov вне форума  
 
Непрочитано 20.09.2018, 09:11
#3663
Titli-pytli


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


Скажите пожалуйста, почему вот это -
Код:
[Выделить все]
   (vlax-for x (vla-get-blocks
		 (vla-get-activedocument (vlax-get-acad-object))
	       )
    (VL-CATCH-ALL-APPLY 'vla-delete (list x))
  )
удаляет ни только не использующиеся блоки, но и листы (вкладки листов)? Вроде бы "vla-get-blocks" только блоки должна брать? Нет? И как это поправить.
Titli-pytli вне форума  
 
Непрочитано 20.09.2018, 10:58
1 | #3664
Кулик Алексей aka kpblc
Moderator

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


У листов есть свои блоки. Которые прямого вхождения не имеют, грубо говоря. Поэтому проверяй у описания блока, не является ли он листом:
Код:
[Выделить все]
 (vlax-for x (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  (if (equal (vla-get-islayout x) :vlax-false)
    (vl-catch-all-apply 'vla-delete (list x))
    ) ;_ end of if
  ) ;_ end of vlax-for
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.09.2018, 13:46
#3665
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У листов есть свои блоки. Которые прямого вхождения не имеют, грубо говоря.
Я это понял так, что любое рабочее пространство в акаде - это пространство блока, и отличаются они в первую очередь флагом IsLayout. Список свойств для модели/листа/блока одинаков.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 24.09.2018, 13:55
#3666
Сергей812


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


ну это логично.. если уже есть базовый отлаженный механизм работы с блоком, то те вещи - которые можно свести к вставке блока, и реализуются соответствующе..
Сергей812 вне форума  
 
Непрочитано 27.11.2018, 19:01
#3667
megabeton


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


Добрый день! Делаю совсем первые шаги в лиспе. Подскажите следующее:
Ввожу

Цитата:
Команда: (setq x (getvar "CLAYER"))
"0"

Команда: (+ x 10)
; ошибка: неверный тип аргумента: numberp: "0"
Как "0" превратить в 0, что бы (+ x 10) выдавал результат 10
megabeton вне форума  
 
Непрочитано 27.11.2018, 19:34
#3668
Сергей812


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


думаю - чтобы выдавал результат, надо что в "x" был не nil - т.е. инициализировать х сначала

----- добавлено через ~4 мин. -----
хотя и
Код:
[Выделить все]
 (+ (getvar "CLAYER") 10)
тоже работать не будет - строковую величину и число сложить пытаетесь)

----- добавлено через ~10 мин. -----
А что вы хотите сделать, должно выглядеть примерно так:
Код:
[Выделить все]
 (strcat (getvar "CLAYER") (itoa 10))
к имени любого текущего слоя добавит 10 в конце.

Последний раз редактировалось Сергей812, 27.11.2018 в 19:44.
Сергей812 вне форума  
 
Непрочитано 27.11.2018, 20:11
#3669
megabeton


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


Суть в том, что я умышленно назвал слой "числом" (у меня еще есть слои "1", "3.14", и пр.), и теперь пытаюсь это число извлечь, чтобы потом проделать с этим числом арифметические операции.
Это вообще возможно?
megabeton вне форума  
 
Непрочитано 27.11.2018, 20:21
#3670
Сергей812


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


можно - просто полученное имя слоя через atof преобразовать в число:
Код:
[Выделить все]
 (+ (atof(getvar "CLAYER")) 10)
но это потенциальный источник ошибок - если текущий слой не будет числом, то ошибку получите.
Сергей812 вне форума  
 
Непрочитано 27.11.2018, 20:26
#3671
koMon


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
Команда: (setq x (getvar "CLAYER"))
(setq x (atof (getvar "CLAYER")))
koMon вне форума  
 
Непрочитано 28.11.2018, 08:48
#3672
megabeton


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


Спасибо. Подскажите, а как извлечь описание слоя (в диспетчере слоев есть такой пункт после имени, цвета, типа линий, веса и пр.). Т.е. имена слоев оставим текстовыми, а цифровую часть загоним в описание (слой "Стены кирпичные", а в описании "2.800")
megabeton вне форума  
 
Непрочитано 28.11.2018, 09:20
#3673
koMon


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
Подскажите, а как извлечь описание слоя
(vla-get-description (vlax-ename->vla-object (tblobjname "layer" (getvar 'clayer))))
koMon вне форума  
 
Непрочитано 28.11.2018, 09:29
#3674
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от megabeton Посмотреть сообщение
Подскажите, а как извлечь описание слоя (в диспетчере слоев есть такой пункт после имени, цвета, типа линий, веса и пр.). Т.е. имена слоев оставим текстовыми, а цифровую часть загоним в описание (слой "Стены кирпичные", а в описании "2.800")
Найди книгу Полещука "Автолисп и вижуаллисп в среде автокад" и изучай структуру документа. Раз уже стоит задача работы со слоями, посмотри в чем разница между (tblsearch "LAYER" (getvar "CLAYER")), (tblobjname "LAYER" (getvar "CLAYER")) и (entget (tblobjname "LAYER" (getvar "CLAYER"))) и разберись со значениями дхф-кодов... или сразу изучай ActivX
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 28.11.2018, 13:16
#3675
Сергей812


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


Полещук "AutoLISP и Visual LISP в среде AutoCAD" 2006г. - только в печатном виде разве что с рук можно купить сейчас, наверно.
Сергей812 вне форума  
 
Непрочитано 28.11.2018, 13:50
#3676
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Вот на Авито продается, за копейки - https://www.avito.ru/ekaterinburg/kn...ocad_811022774
Nike на форуме  
 
Непрочитано 29.11.2018, 16:41
#3677
megabeton


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


Цитата:
Сообщение от koMon Посмотреть сообщение
(vla-get-description (vlax-ename->vla-object (tblobjname "layer" (getvar 'clayer))))
А как извлечь описание не для текущего слоя, а для слоя выделенного объекта?
megabeton вне форума  
 
Непрочитано 29.11.2018, 16:55
1 | #3678
koMon


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
А как извлечь описание не для текущего слоя, а для слоя выделенного объекта?
(vla-get-description (vlax-ename->vla-object (tblobjname "layer" (cdr (assoc 8 (entget (car (entsel))))))))
koMon вне форума  
 
Непрочитано 30.11.2018, 14:31
#3679
megabeton


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


Создал набор объектов
(ssget '((0 . "text")))
Объекты в разных слоях.
Хочу поочередно с каждым слоем в наборе проделать различные операции.
Какой функцией это описать?
megabeton вне форума  
 
Непрочитано 30.11.2018, 15:39
#3680
Кулик Алексей aka kpblc
Moderator

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


Проходишь по всем элементам набора и делаешь что хочется. В чем собственно вопрос?
__________________
Моя библиотека 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