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

Вернуться   Форум 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.
Просмотров: 1972359
 
Непрочитано 02.11.2016, 22:33
#3121
Кулик Алексей aka kpblc
Moderator

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


Inferi, а тебе зачем?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.11.2016, 08:21
#3122
trushev


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


Цитата:
Сообщение от Inferi Посмотреть сообщение
Есть список координат '((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4)).
Вероятная причина: координаты точек тоже списки, а этого не видно.
trushev вне форума  
 
Непрочитано 03.11.2016, 09:58
#3123
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Inferi Посмотреть сообщение
Как вернуть (x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4), то есть как бы раскрыть внешние скобки? Была идея:
Слово "вернуть" - неверное. Возвращает результат функция в виде какого-то единственного значения, а вернуть четыре значения не сможет. Это единственное значение и есть список списков координат.

А вот обращаться к подспискам этого общего списка надо уже каждый раз отдельно, например функцией nth (по номеру в списке, начинающемуся с нуля).
ShaggyDoc вне форума  
 
Непрочитано 03.11.2016, 11:55
#3124
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Inferi Посмотреть сообщение
Есть список координат '((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4)). Как вернуть (x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4), то есть как бы раскрыть внешние скобки?
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А вот обращаться к подспискам этого общего списка надо уже каждый раз отдельно, например функцией nth (по номеру в списке, начинающемуся с нуля).
Либо поэлементно с помощью foreach
Код:
[Выделить все]
(foreach pt  '((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4))
(princ "\nPoint ")(princ pt)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.11.2016, 12:10
#3125
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от VVA Посмотреть сообщение
Либо поэлементно с помощью foreach
Совершенно верно. А как именно - зависит от того, как организована вся программа. Надо ли отдельно по нескольку раз использовать подсписки, т.е. назначать им какие-то имена переменных (по-бейсиковски) или всё можно в одном foreach проделать (по-лисповски).
Потому Кулик Алексей aka kpblc первым делом и спросил "а тебе зачем"?
ShaggyDoc вне форума  
 
Непрочитано 03.11.2016, 22:50
#3126
Inferi


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


Спасибо всем за объяснение, было ошибочное мнение, что можно "скормить" всю конструкцию, раскрыв перед этим скобки, функции inters. Обошелся обычными car, cadr и прочее.
Inferi вне форума  
 
Непрочитано 11.11.2016, 12:53
#3127
Inferi


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


Доброго времени суток! Создаю полилинию через vla, с помощью метода vla-SetBulge преобразую линейные сегменты в дуговые, вопрос следующий: можно ли не командными методами заштриховать полилинию с дуговыми сегментами?
Inferi вне форума  
 
Непрочитано 11.11.2016, 13:32
#3128
Кулик Алексей aka kpblc
Moderator

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


Можно, почему нет? Создаешь объект штриховки, задаешь ему OuterLoop (если не ошибаюсь), потом выполняешь Evaluate.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.11.2016, 14:17
#3129
Inferi


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


Разобрался, спасибо!
Код:
[Выделить все]
 
(setq hatchObj (vla-AddHatch model_space acHatchPatternTypePreDefined "SOLID" :vlax-true acHatchObject))
(setq myPolyObj (vlax-ename->vla-object (car (entsel))))
(setq outerLoop (vlax-make-safearray vlax-vbObject '(0 . 0)))
(vlax-safearray-put-element outerLoop 0 myPolyObj)
(vla-AppendOuterLoop hatchObj outerLoop)
(vla-Evaluate hatchObj)
(vla-Update hatchObj)
Inferi вне форума  
 
Непрочитано 11.11.2016, 16:28
#3130
kurstep


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


Здравствуйте , подскажите как удалить все вхождения блока и сам блок определенного имени (допустим "nameblock") - причем блок находится и в модели и в листах
kurstep вне форума  
 
Непрочитано 11.11.2016, 16:44
#3131
Сергей812


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


в инете достаточно примеров удаления заданного по имени блока на лиспе) В чем вызвано затруднение то?
Сергей812 вне форума  
 
Непрочитано 11.11.2016, 16:48
#3132
kurstep


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


Если вы мне скинете ссылку я буду очень благодарен, я честно искал но не нашел(
kurstep вне форума  
 
Непрочитано 12.11.2016, 18:12
#3133
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от kurstep Посмотреть сообщение
искал но не нашел(
Delete Blocks
Lisp routine to delete blocks
Lisp for filtering certain blocks and delete them
Delete Block from multiple Layouts
Remove / Delete Block from multiple Layouts at the same time
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.11.2016, 15:04
#3134
Inferi


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


Доброго времени суток! Подскажите, возможно ли запустить функцию, имя которой которой хранится в переменной. Например я использую функцию суммирования воздуховодов (duct_sum), в первом случае нужно после ее вызова открыть диалог (duct), во-втором диалог (draw_duct_reducer). Хотел передать в качестве аргумента (duct_sum / "(duct)"), и (duct_sum / "(draw_duct_reducer)") соответственно, и в конце кода функции (duct_sum) открыть соответствующие диалоги. Возможна ли такая реализация или стоит избегать таких "костылей"?
Inferi вне форума  
 
Непрочитано 14.11.2016, 15:34
#3135
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Inferi Посмотреть сообщение
Подскажите, возможно ли запустить функцию, имя которой которой хранится в переменной
Можно:
Код:
[Выделить все]
 
(defun abc (x) (+ x x))

(apply (read "abc") '(5))
Цитата:
Сообщение от Inferi Посмотреть сообщение
или стоит избегать таких "костылей"?
Да
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 14.11.2016, 21:42
#3136
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Inferi Посмотреть сообщение
возможно ли запустить функцию, имя которой которой хранится в переменной.
как вариант
Код:
[Выделить все]
(defun draw_duct_reducer ()(alert "draw_duct_reducer")(princ))
(defun duct()(alert "duct")(princ))
(defun duct_sum (x / func)
  (if (= x 1)(setq func duct)(setq func draw_duct_reducer))
  (func)
  (princ)
  )
пример
Код:
[Выделить все]
(duct_sum 1)
(duct_sum 2)
----- добавлено через ~4 мин. -----
почитал еще раз, наверное так
Код:
[Выделить все]
(defun draw_duct_reducer ()(alert "draw_duct_reducer")(princ))
(defun duct()(alert "duct")(princ))
(defun duct_sum (x func)
  (func)
  (princ)
  )
Пример
Код:
[Выделить все]
(duct_sum 1 duct)
(duct_sum 2 draw_duct_reducer)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2016, 07:37
#3137
Vladimir_Sergeevich

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


Всем доброго времени суток!
Столкнулся с весьма любопытной ситуацией. Рисую полилинию с помощью vla-addLightWeightPolyline. Пока система координат лежит в одной плосткости (ось z смотрит вверх) все нормально, никаких проблем. НО! Тут столкнулся со случаем, когда пск перевернута вверх тормашками (ось z ушла вниз) и вдруг передавемый список вида
Код:
[Выделить все]
 ((-0.168002 259.556 0.0) (-1.96325 260.428 0.0) (-3.83184 261.135 0.0) (-5.75204 261.691 0.0) (-7.70688 262.111 0.0) (-9.68363 262.413 0.0) (-11.6731 
262.616 0.0) (-13.6692 262.739 0.0) (-15.6682 262.803 0.0) (-17.668 262.826 0.0) (-19.668 262.829 0.0))
воспринимается как
Код:
[Выделить все]
 ((0.168002 259.556 0.0) (1.96325 260.428 0.0) (3.83184 261.135 0.0) (5.75204 261.691 0.0) (7.70688 262.111 0.0) (9.68363 262.413 0.0) (11.6731 
262.616 0.0) (13.6692 262.739 0.0) (15.6682 262.803 0.0) (17.668 262.826 0.0) (19.668 262.829 0.0))
Почему vla-addLightWeightPolyline при перевернутой ПСК зеркалит координаты относительно начала координат по оси X??
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 15.11.2016, 08:41
#3138
Кулик Алексей aka kpblc
Moderator

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


При работе с ActiveX, насколько я помню, координаты передаются в МСК. Попробуй создавать через entmake, с одновременным заданием 210 группы. Ну или потом меняй свойство Normal.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2016, 08:54
#3139
Vladimir_Sergeevich

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


Алексей, список номер раз и так в мск. Но, при перевернутой СК, воспринимается как отзеркаленный.
Попробуй поставить (vl-cmdf "_.ucs" "_3" '(0 0) '(10 0) '(10 -10)) и отрисуй vla-addLightWeightPolyline.
Я почти списал у Полещука:
Код:
[Выделить все]
 (if (not owner) (setq owner (sad-get-CurrentSpace))) ;;если не указано другого - активное пространство активного документа	
(setq pt_lst ;;convert to 2d-point-list
	(apply 
		'append 
		(mapcar 
			'list 
			(mapcar 'car pt_lst)
			(mapcar 'cadr pt_lst)
		) 
	) 
	i 0
) 
(if (> (length pt_lst) 2)
  (setq obj 
	(vla-addLightWeightPolyline	
		owner 
		(vlax-make-variant
			(vlax-safearray-fill
				(vlax-make-safearray
					vlax-vbDouble
					(cons 0 (1- (length pt_lst)) )
				) 
				pt_lst
			)
		) 
	)
  ) 


з.ы. действительно "Normal = (0.0 0.0 -1.0)"
з.з.ы что то тут не чисто...
Код:
[Выделить все]
 Команда: (vla-put-normal (vlax-ename->vla-object (car (entsel))) (vlax-3d-point '(0.0 0.0 0.0)) )
Выберите объект: ; ошибка: Ошибка Automation. Неверный ввод

ага, сам дурак... (0.0 0.0 1.0)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 15.11.2016 в 09:14. Причина: с одним вопросом разобрался разобрался
Vladimir_Sergeevich вне форума  
 
Непрочитано 15.11.2016, 09:18
#3140
Кулик Алексей aka kpblc
Moderator

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


Я ж говорю - потом поменяй свойство Normal
__________________
Моя библиотека 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