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

Вернуться   Форум 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.
Просмотров: 1973150
 
Непрочитано 26.01.2011, 17:39
#1301
Woron


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


Попробовал вставить кусок из примера.
Отработатл вроде нормально (линию построил), но со смещением.
Вот если я использую
Цитата:
_line "0,0" "20,20"
отрезок строится с точки (0,0,0) до точки (20,20,0).

А если из VB вызываю

Цитата:
ptStart(0) = 0: ptStart(1) = 0: ptStart(2) = 0
ptEnd(0) = 20: ptEnd(1) = 20: ptEnd(2) = 0
.AddLine ptStart, ptEnd
то отрезок строится с точки (-2089.8883,-3269.5897,0) до точки (-2069.8883,-3249.5897,0).
Woron вне форума  
 
Непрочитано 26.01.2011, 19:31
#1302
ashas-


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


Что за размерный стиль?

(getvar "osmode") и (getvar "orthomode"), сделал просто потому что видел что их пишут, решил тоже написать... ).
Если после "Введите № позиции <1> " ввести ESC то программа закончит свою работы, да еще и не в лучшем виде.
(command "_.clayer") использовал потому что делал программу только под себя, и не планировалось что бы она у кого то еще работала, и если она не вернется в прежнее значение, это не на что не повлияет.
"Укажите точку № позиции " - некорректно я здесь поставил подсказку. Имелось введу где должен находиться кружок с позицией.
Поменял osmode что бы ничего лишнего не цеплялось, дальше рисуеться сплайн и маленький кружок. Если стоит привязка "конточка" (если не ошибаюсь) то центр маленького круга и сплайн почему то не совпадают... Что делает "_none"??
Все опции на русском, потому что у меня русифицированная версия, и я не долга мучаясь написал по русски что б можно было хотя бы проверить работоспособность.
Орто возвращается обратно в "1", потому что у меня всегда орто включено...
(command "_.hpname" <>) изменение этой переменной и не возвращение ее обратно тоже не несет для меня никакой проблемы, я бы сказал, наоборот, если ее восстановить то понесет...
ToolPalettes - как ее применить? Что именно ты подразумеваешь? Стандартная выноска меня не устраивает.

Вопрос кстати, так и остался открытым, можно как нибудь ескейп обойти?

И еще: как после команды entget вытащить определенную точечную пару, или изменить ее?
ashas- вне форума  
 
Непрочитано 26.01.2011, 23:30
#1303
Лиспер


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


Цитата:
Сообщение от ashas- Посмотреть сообщение
Что за размерный стиль?
ashas-, по полной аналогии с тем, что я показывал чуть ранее.
Цитата:
Сообщение от ashas- Посмотреть сообщение
сделал просто потому что видел что их пишут, решил тоже написать... )
Не стоит так делать. Надо обрабатывать только те системные переменные, которые необходимы программе - не больше и не меньше.
Цитата:
Сообщение от ashas- Посмотреть сообщение
(command "_.clayer") использовал потому что делал программу только под себя, и не планировалось что бы она у кого то еще работала, и если она не вернется в прежнее значение, это не на что не повлияет.
Программы имеют не очень приятную особенность разрастаться и начинают жить своею жизнью, уже мало связанной с судьбой их автора
Цитата:
Сообщение от ashas- Посмотреть сообщение
Что делает "_none"
Временно отключает привязку при указании точки. Можно попробовать, это не страшно
Цитата:
Сообщение от ashas- Посмотреть сообщение
ToolPalettes - как ее применить? Что именно ты подразумеваешь? Стандартная выноска меня не устраивает.
Почему не устраивает? По-моему, настроить выноску не сложно.
Цитата:
Сообщение от ashas- Посмотреть сообщение
можно как нибудь ескейп обойти?
Можно. Например, так:
Код:
[Выделить все]
(if (= (type (setq pt (vl-catch-all-apply (function (lamdba() (getpoint "\nУкажите точку <Отмена> : ")))))) 'list)
(princ "\nТочка указана")
(princ "\nЛибо нажат Enter, либо Esc"))
(princ)
Цитата:
Сообщение от ashas- Посмотреть сообщение
как после команды entget вытащить определенную точечную пару
См.функцию assoc
Цитата:
Сообщение от ashas- Посмотреть сообщение
изменить ее
См. subst
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 27.01.2011, 21:40
#1304
ashas-


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


Спасибо, за подробные разъяснения! Буду разбираться.

В стандартной мультивыноске мне не нравится что она постоянно сплайн с боку цепляет ...
Кулик Алексей aka kpblc, скинул мне два файла, я че то там сделал и он (сплайн) стал цепляться как надо (хаотично, в зависимости с какой стороны ведешь). Но потом че то снова сделал и теперь не могу понять как это сделать снова! Как то так... : )))
И еще мне не нравится что нельзя цвет текста поменять (можно только вместе с кружком).

Да и вообще сейчас написание мультивыноски стало как способ изучения автолиспа )

С функцией "subst" и "assoc" вроде разобрался... внес изменения в весть список примитива, до этого названный с помощью setq (в моем случае это круг)), но эти изменения не применились к примитиву. Почему? Как правильно это делается ?

Вот что я делал:
Код:
[Выделить все]
 (setq cir (entlast))
(setq q (entget cir))
(setq para (assoc 8 q))
(setq nov (subst '(8 . "os") '(8 . "h") q))

Последний раз редактировалось ashas-, 28.01.2011 в 19:13. Причина: Возник вопрос )
ashas- вне форума  
 
Непрочитано 31.01.2011, 22:34
#1305
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


Доброго времени суток!
Знающие люди, подскажите пожалуйста, как проверить в лиспе есть ли слой с данным именем в файле чертежа? И если он есть, его свойства на данный момент времени - скрыт-не скрыт, заморожен-разморожен, заблокирован-разблокирован.

спасибо!
Michael! вне форума  
 
Непрочитано 31.01.2011, 22:51
#1306
Кулик Алексей aka kpblc
Moderator

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


(tblobjname "layer" ИмяСлоя) вернет nil, если слоя не существует. Если есть - возвращает ename-указатель на него. А дальше - DXF Reference в руки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.01.2011, 22:58
#1307
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Michael! Посмотреть сообщение
роверить в лиспе есть ли слой с данным именем в файле чертежа? И если он есть, его свойства на данный момент времени - скрыт-не скрыт, заморожен-разморожен, заблокирован-разблокирован.
Как-то так, если не изменяет память:
Код:
[Выделить все]
 (setq lyr_nam "0")
(setq ent_lyr (tblsearch "LAYER" lyr_name))
(vla-get-Freeze (vlax-ename->vla-object ent_lyr))
(vla-get-Lock (vlax-ename->vla-object ent_lyr))
gomer вне форума  
 
Непрочитано 31.01.2011, 23:22
#1308
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


вот спасибо!!! выручили.
Michael! вне форума  
 
Непрочитано 05.02.2011, 20:21
#1309
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


Доброго времени суток!
Еще вопросик возник:
Есть 2D замкнутая полилиния, образованная отрезками и дугами. Как найти самые удаленные точки по оси Х и по Y (максимальный размер по Х и по Y)
Спасибо!
Michael! вне форума  
 
Непрочитано 05.02.2011, 22:22
#1310
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Michael! Посмотреть сообщение
самые удаленные точки
От чего самые удаленные? И в какую сторону? И в какой системе координат?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.02.2011, 23:17
#1311
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


самые удаленные друг от друга по оси Х и по оси Y в World системе координат. (как бы это сказать - самую минимальную координату Х, самую максимальную координату Х, самую минимальную координату Y, самую максимальную координату Y которые принадлежат этой фигуре (замкнутой полилинии)).
Michael! вне форума  
 
Непрочитано 05.02.2011, 23:49
#1312
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


vla-getboundingbox
gomer вне форума  
 
Непрочитано 06.02.2011, 22:02
#1313
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 62


спасибо!!! разобрался.
Michael! вне форума  
 
Непрочитано 07.02.2011, 06:40
#1314
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


ashas-,

угу, все верно

а теперь смотри функцию entmode
Frigate вне форума  
 
Непрочитано 07.02.2011, 08:59
#1315
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Frigate, entmode? или entmod
alex8888 вне форума  
 
Непрочитано 07.02.2011, 09:19
#1316
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


alex8888,

ну да, конечно entmod

в любом случае в справке найдется поиском нужная комнада )))
Frigate вне форума  
 
Непрочитано 07.02.2011, 23:41
#1317
ashas-


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


Frigate, спасибо!
ashas- вне форума  
 
Непрочитано 08.02.2011, 06:30
#1318
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Как программно узнать, что выделенный примитив (напр., по entsel) входит группу? И как определить, в какую группу он входит?


Всегда ли группа (GROUP) в entget-списке находится после пары 102 AcadReactors

(102 . "{ACAD_REACTORS") (330 . <Имя объекта: 7ef0cd10>) (102 . "}")

?

Если я прав, тогда эта функция поможет определить, входит ли указанный примитив в группу:
Код:
[Выделить все]
(defun adv-groups-get-group-of-entity (ent)
;функция возвращает vla-указатель на группу, к которой принадлежит примитив
(IF (equal (cdr (assoc 0 (entget (cdr (assoc 330 (entget ent)))))) "GROUP")
(PROGN
(PRINC "\nИмя группы: ")
(PRINC (vla-get-name (vlax-ename->vla-object (cdr (assoc 330 (entget ent))))))
(PRINC "\n")
(cdr (assoc 330 (entget ent)))
) ; _ end of PROGN
(PROGN
(PRINC "\nВыбранный примитив не входит ни в одну группу.")
nil
) ; _ end of PROGN
) ; _ end of IF
) ; _ end of defun

Последний раз редактировалось Frigate, 10.02.2011 в 15:26.
Frigate вне форума  
 
Непрочитано 17.02.2011, 10:48
#1319
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 256
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Добрый день.
Есть желание написать програмку для операции с буфером обмена.
На VBA все понятно ( получить буфер обмена в текстовую переменную, заменить "/P" на пробел, передать обратно в буфер)
Суть программы: сбросить форматирование текста, и убрать деление на строки (в мультитексте) если такое есть.
Вопрос как это на Lisp`e сделать?
gizmo_zx вне форума  
 
Непрочитано 17.02.2011, 11:33
#1320
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Суть программы: сбросить форматирование текста, и убрать деление на строки (в мультитексте) если такое есть.
Вопрос как это на Lisp`e сделать?
В поиск по форуму - по словам mtext и unformat.
Do$ вне форума  
Ответ
Вернуться   Форум 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