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

Вернуться   Форум 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.
Просмотров: 2054546
 
Старый 04.03.2015, 08:10
#2481
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от gomer Посмотреть сообщение
это ж надо было столько нагородить...
Поясни, пожалуйста, принцип "игры" с "cmdecho" и "x"
RNB вне форума  
 
Старый 04.03.2015, 08:25
#2482
gomer

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


Цитата:
Сообщение от RNB Посмотреть сообщение
Поясни, пожалуйста, принцип "игры" с "cmdecho" и "x"
все просто: запомнили, выключили, включили. главная фишка в другом. автокад никогда не заморозит текущий слой, так что можно смело морозить все...
обнуление cmdecho просто скрывает предупреждение автокада, что он не может заморозить текущий слой, а заодно и все остальные действия command
gomer вне форума  
 
Старый 04.03.2015, 10:45
#2483
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от gomer Посмотреть сообщение
все просто: запомнили, выключили, включили
"(lambda (x))" сохраняет в "x" значения всех переменных? Или всё-таки еще нужна строчка
Код:
[Выделить все]
 (setq x (getvar 'cmdecho))
или я что-то не догоняю в принципе работы функций?
RNB вне форума  
 
Старый 04.03.2015, 22:32
#2484
gomer

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


Цитата:
Сообщение от RNB Посмотреть сообщение
Или всё-таки еще нужна строчка
нет не нужна, x уже равен (getvar 'cmdecho) на входе в лямбду
gomer вне форума  
 
Старый 11.03.2015, 16:29 91 группа примитива "LWPOLYLINE"
#2485
trushev


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


Что обозначает 91 группа примитива "LWPOLYLINE"?
trushev вне форума  
 
Старый 11.03.2015, 18:53
#2486
Alexll


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


Здравствуйте уважаемые. Осваиваю autolisp.
Есть задача, периодически менять текст в документе.
Выделяю текст, нахожу имя примитива и сохраняю его в файл. Потом считываю строку из файла и пытаюсь изменить текст, но ничего не выходит. Как я понял проблема в типе переменной.
До сохранения в файл переменная была типа ENAME. После чтения STR.
Подскажите можно ли преобразовать тип переменной, что бы можно было модифицировать текст?
Если нет, то как еще можно решить данную задачу?
Alexll вне форума  
 
Старый 11.03.2015, 19:10
#2487
gomer

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


Цитата:
Сообщение от Alexll Посмотреть сообщение
ничего не выходит
сохраняй в файл метку примитива, по ней сможешь восстановить свой текст
(cdr (assoc 5 (entget textent)))
(handent strhandle)
gomer вне форума  
 
Старый 11.03.2015, 20:32
1 | #2488
Кулик Алексей aka kpblc
Moderator

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


trushev, dxf reference утверждает, что это идентификатор вершины. Правда, почему у LWPOLYLINE он всегда равен 0 (проверял в ACAD2014) - пока непонятно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 11.03.2015, 21:09
1 | #2489
Сергей812


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


Цитата:
Сообщение от trushev Посмотреть сообщение
Что обозначает 91 группа примитива "LWPOLYLINE"?
http://forum.dwg.ru/showthread.php?t=53504
Сергей812 вне форума  
 
Старый 12.03.2015, 07:47
#2490
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Я правильно понимаю, команда, созданная в лисп, не запустится из другого лиспа?
RNB вне форума  
 
Старый 12.03.2015, 07:58
#2491
gomer

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


Цитата:
Сообщение от RNB Посмотреть сообщение
Я правильно понимаю, команда, созданная в лисп, не запустится из другого лиспа?
не правильно, из одного лиспа можно запускать команды из другого лиспа, предварительно загрузив оба лиспа
gomer вне форума  
 
Старый 12.03.2015, 08:15
#2492
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от gomer Посмотреть сообщение
не правильно, из одного лиспа можно запускать команды из другого лиспа, предварительно загрузив оба лиспа
Автокад выдал мне "неизвестная команда"...

----- добавлено через ~4 мин. -----
А если в коде взять название команды в скобки () - (ххх) Команда LISP недоступна
RNB вне форума  
 
Старый 12.03.2015, 09:03
#2493
Кулик Алексей aka kpblc
Moderator

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


RNB, прочитай публикацию "Как использовать лисп, опубликованный на форуме" - там все написано.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 12.03.2015, 09:17
#2494
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
прочитай публикацию "Как использовать лисп, опубликованный на форуме" - там все написано.
Прочитал. Почерпнул кое-что. Спасибо.
Но! Как запустить команду, созданную в лиспе, из другого лиспа - так и не въехал. В общем, стою на асфальте я в лыжи обутый...
RNB вне форума  
 
Старый 12.03.2015, 09:25
#2495
Кулик Алексей aka kpblc
Moderator

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


(defun <ИмяФункции> (Параметры) <...>) : вызывается как (<ИмяФунции> Параметры)
(defun c:<ИмяКоманды>() <...>) : вызывается как (c:<ИмяКоманды>)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 12.03.2015, 09:40
#2496
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
вызывается как (c:<ИмяКоманды>)
Вот! Спасибо!
Я пытался вызвать как (command "<Имя команды>")
RNB вне форума  
 
Старый 17.03.2015, 04:44
#2497
Alexll


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


Здравствуйте.
Хочу сделать такую функцию: пользователь указывает примитив, нажимает кнопку с функцией, функция должна узнать слой в котором находится примитив, и дать пользователю возможность выбрать объекты. Проблема в том что не работает такая вот конструкция:
Код:
[Выделить все]
 (setq qq (ssget "_I"))
(setq qq1 (ssget))
Если два раза использовать ssget без "_I", то все нормально. А вот если с "_I" то lisp не предоставляет возможности для выбора примитивов для второго ssget. Думаю что нужна какая то пауза или еще что то.
Если кто знает как это победить, помогите пожалуйста.
Alexll вне форума  
 
Старый 17.03.2015, 08:12
#2498
Vladimir_Sergeevich

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


Alexll, три раза прочитал - ничего не понял...
(ssget "_I") - соберет то что было выделено до начала выполнения кода.
Если надо собрать примитивы по слою как у выделенного объекта, то что то типа такого:
Код:
[Выделить все]
 (setq ent (car (entsel))) ;;только тут запрашивается образец в ходе выполнения команды
(sssetfirst nil (ssget "_C" (getpoint "\nСекущий прямоугольник") (getpoint "\nвторая точка") (list (assoc 8 (entget ent))))) ;;тут можно играться опциями и фильтрами
И вообще есть готовый selsim с богатым функционалом.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Старый 17.03.2015, 10:41
#2499
Alexll


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


Недавно начал осваивать LISP поэтому тут даже вопрос не в наличии готовых программ, а в обучении. А заодно и что то полезное для себя сделать.
(ssget "_I") действительно собирает то что было выделено. Но после этого не поступает второго запроса на выбор (вторая строка).
LISP как будто объединяет эти два запроса. Если перед выполнение программы ничего не выделено, то он запрашивает выделение. Если если было что то выделено, то второго запроса на выделение не следует. Но при том оба набора qq и qq1 существуют, но они одинаковые.

А вот допустим если написать код
setq qq (ssget))
setq qq1 (ssget))
то после первого запроса на выделение, происходит второй. И я получаю два разных набора.
Alexll вне форума  
 
Старый 17.03.2015, 11:23
#2500
Vladimir_Sergeevich

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


(ssget) без опций при активном выборе срабатывает как (ssget "_I") и сбрасывает выбор (судя по экспериментам). В итоге у тебя получается два одинаковых набора.
попробуй между строками прописать (sssetfirst nil nil)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
Ответ
Вернуться   Форум 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