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

Вернуться   Форум 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.
Просмотров: 1965708
 
Непрочитано 25.10.2019, 14:43
#3861
koMon


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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
как будет выглядеть подобный алгоритм для обратной операции - демаскировки Мтекста?
похоже, что демаскировку нереально сделать просто удалив/заменив dxf группы примитва. видимо самым нелучшим вариантом будет создание копии мтекста без маски с удалением оригинала.
koMon вне форума  
 
Непрочитано 25.10.2019, 15:24
#3862
skkkk


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


Код:
[Выделить все]
(vlax-put (vlax-ename->vla-object (car (entsel))) 'BackgroundFill 0)
skkkk вне форума  
 
Непрочитано 25.10.2019, 16:06
#3863
koMon


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


koMon вне форума  
 
Непрочитано 25.10.2019, 18:30
#3864
Browning Zed


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


Есть вот такой, более изощренный код. Но как я не пробовал играться с функцией mip:entsel ничего не выходит, не получается заставить прогу указывать объект точечно-циклично, только рамкой.
Код:
[Выделить все]
 (defun c:bmoff(/ ss mts vl_mts )
	  (setq ss (ssget '((0 . "MTEXT"))));выбор мтекстов в чертеже
	  (setq mts (ssnamex ss))
	  (setq ss nil)
	  (setq mts (mapcar 'cadr mts));выкидывание номеров набора из списка
	  (setq mts (vl-remove-if-not '(lambda (x) (eq (type x) 'ENAME)) mts))   ;выкидывание способов набора из списка
	 
	  (setq vl_mts (mapcar 'vlax-ename->vla-object mts))
	 
	  (mapcar '(lambda (x) (vla-put-BackgroundFill x :vlax-false)) vl_mts)
)

Последний раз редактировалось Browning Zed, 25.10.2019 в 18:38.
Browning Zed вне форума  
 
Непрочитано 25.10.2019, 23:19
#3865
koMon


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


Изощрённость - это хорошо. А если сделать в одном флаконе?
koMon вне форума  
 
Непрочитано 26.10.2019, 03:04
#3866
Browning Zed


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


Любой вариант подошел бы. Главный вопрос - как сделать выбор/подтверждение кликом на объекте, чтобы не рамкой выбирать.
Browning Zed вне форума  
 
Непрочитано 27.10.2019, 18:07
#3867
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (vl-load-com)
(defun c:bmoff1 (/ ent)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (while (= (type (setq ent (vl-catch-all-apply (function (lambda () (ssget "_+.:S:E:L" '((0 . "MTEXT"))))))))
            'pickset
            ) ;_ end of =
    (vla-put-backgroundfill (vlax-ename->vla-object (ssname ent 0)) :vlax-false)
    ) ;_ end of while
  (princ)
  ) ;_ end of defun
(defun c:bmoff2 (/ ent)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (while (= (type
              (setq ent (vl-catch-all-apply (function (lambda () (car (entsel "\nSelect MTEXT <Cancel> : "))))))
              ) ;_ end of type
            'ename
            ) ;_ end of =
    (if (= (cdr (assoc 0 (entget ent))) "MTEXT")
      (vl-catch-all-apply
        (function (lambda () (vla-put-backgroundfill (vlax-ename->vla-object ent) :vlax-false)))
        ) ;_ end of vl-catch-all-apply
      (princ "\nSelected object is not MTEXT")
      ) ;_ end of if
    ) ;_ end of while
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.10.2019, 19:11
#3868
Browning Zed


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


Кулик Алексей aka kpblc, спасибо, работает. Но теперь пропала возможность снятия маски со всех ранее выбранных Мтекстов.
Цель была такая: если до выполнения команды, Мтексты выбраны не были, запускается алгоритм точечного цикла выбора объектов. Но, если, до выполнения команды, ранее был осуществлен выбор Мтекстов программа снимает с них маскировку и завершается.
Browning Zed вне форума  
 
Непрочитано 27.10.2019, 19:20
#3869
Кулик Алексей aka kpblc
Moderator

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


Browning Zed, да бога ради. Пиши свое ветвление, кто запрещает? Все данные у тебя есть
Смотри ключи ssget, анализируй значение pickfirst, и пиши свой код.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2019, 09:35
#3870
Vladimir_Sergeevich

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


Доброго времени...
Вопрос странноватый: есть жуткое желание редактировать IAcadLWPolyline. Есть замечательный метод AddVertex, но одновременно с ним мне надо пересчитать смежные точки... тут только в лоб ковырять свойство Coordinates, которое еще и и хранится как вариант, и править список как мне надо и назад в вариант паковать?
Али есть более элегантное решение?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 28.10.2019, 09:55
#3871
Кулик Алексей aka kpblc
Moderator

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


Ты еще забыл про кривизну и возможные переназначения ширины. Так-то создаешь vlax-variant из Double и устанавливаешь свойство Coordinates. А вот с остальным придется ковыряться.
А на фига вообще такое надо?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2019, 10:16
#3872
Vladimir_Sergeevich

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ты еще забыл про кривизну и возможные переназначения ширины.
Не забыл, в моей задаче такого нет
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А на фига вообще такое надо?
Все как всегда, свести тыканье мышкой к минимуму. Уже затыкался (создать/сместить два раза/еще раз создать/ снова сместить/ полученное сопряч / лишее зачистить)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 28.10.2019, 10:29
#3873
Кулик Алексей aka kpblc
Moderator

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


Так есть же уже "Набор утилит для работы с полилиниями" от VVA - не подходит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2019, 11:42
#3874
Vladimir_Sergeevich

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Так есть же уже "Набор утилит для работы с полилиниями" от VVA - не подходит?
это который pl-tools?
Если про него речь, то мне тяжеловато его анализировать, что бы выцеплять нужное, а в чистом виде неприменимо.

p.s.
сделал пока так и в общем получается то что хочется
Код:
[Выделить все]
 (defun sad-change-lwPlinePoint (obj par pt / ptLst) ;| редактирование заданной точки в полилинии
args
	* obj - vla-object
	* par - number of Vertex
	* pt - new point (three real)
rez
	* obj - vla-object
|;
	(setq 
		ptLst (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates obj)))
		ptLst (subst (car pt) (nth (fix (* 2 par)) ptLst) ptLst)
		ptLst (subst (cadr pt) (nth (fix (1+ (* 2 par))) ptLst) ptLst)
		ptLst (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length ptLst)))) ptLst))
	)
	(vla-put-Coordinates obj ptLst)
	obj
)
осознаю косяк, но не знаю как подступиться... Ежели каким то чудом координата совпадет у нескольких точек, случится полный ахтунг...
неужто надо как-то поштучно перебирать весь список до заданной вершины, подставлять нужную и дальше собирать хвост? хотя в моем случае хвоста то нет, всегда EndParam подставляется.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 28.10.2019 в 14:14.
Vladimir_Sergeevich вне форума  
 
Непрочитано 02.11.2019, 21:51
#3875
Browning Zed


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


Привет. Составил простенький код, который меняет цвет определенных слоев, а также меняет ширину и сглаживание полилиний на этих слоях. И вроде все хорошо, программа работает, но ровно до того момента, как в названии слоя не появляется кириллица. И, если, в названии встретится хотя бы один кириллический символ - код ломается. Что можно придумать в данной ситуации?
UPD. Разобрался, в файле lsp была установлена не та кодировка.

Последний раз редактировалось Browning Zed, 03.11.2019 в 17:40.
Browning Zed вне форума  
 
Непрочитано 05.11.2019, 17:45
1 | #3876
koMon


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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
Любой вариант подошел бы.
компилированный вариант aio.
Вложения
Тип файла: rar mtext_bgmask.fas!.rar (9.9 Кб, 7 просмотров)

Последний раз редактировалось koMon, 12.11.2019 в 11:32.
koMon вне форума  
 
Непрочитано 10.11.2019, 21:52
#3877
Browning Zed


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


Цитата:
Сообщение от koMon Посмотреть сообщение
компилированный вариант aio.
Спасибо! Круто придумал.
А нельзя ли еще сделать вариант, где по умолчанию в параметрах будет выставлена маска в цвет экрана, и в выпадающем окошке (где выбираем маскировать или демаскировать текст) добавить опцию "Выход"?

Последний раз редактировалось Browning Zed, 10.11.2019 в 22:22.
Browning Zed вне форума  
 
Непрочитано 12.11.2019, 11:00
1 | #3878
koMon


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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
А нельзя ли
можно -> #3876
koMon вне форума  
 
Непрочитано 12.11.2019, 18:24
#3879
Browning Zed


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


Спасибо, гуру. Замечательная прога вышла по итогу. Думаю, можно смело вписать в список мастхэва для всех юзеров автокада.
Browning Zed вне форума  
 
Непрочитано 17.12.2019, 13:25
#3880
hroost

Проектирование
 
Регистрация: 01.09.2009
Сообщений: 19


Подскажите плз можно ли простым методом (в одну строку без разбивки на атомы и циклов) вычислить min/max из списка точечных пар вида (X1 Y1 Z1) (X2 Y2 Z2)… (Xn Yn Zn)
Конструкции вида (ниже) не работают
(setq ptLst1_min (apply 'min (ptLst1)));минимальная высота отметок
(setq ptLst1_min (mapcar 'min (ptLst1)));минимальная высота отметок
hroost вне форума  
Ответ
Вернуться   Форум 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