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

Вернуться   Форум 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.
Просмотров: 1964619
 
Непрочитано 16.02.2021, 11:22
#4001
Vladimir_Sergeevich

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


Цитата:
Сообщение от koMon Посмотреть сообщение
эпичная/не эпичная, но решить её универсальным инструментом вряд ли получится. в общем виде алгоритм видится имхо таким.
1. ищем в тексте "м". если литера встречается однажды по условию, то оно и к лучшему)
2. идём "налево" от найденной литеры в поиске цифр до первой не цифры. найденные цифры читаем в число метров. запоминаем индекс начала метров.
3. теперь идём "направо" через "/", через цифры до "'". запоминаем индекс "'", если нашёлся или индекс "м", если не нашёлся.
4. режем строку по найденным индексам и вставляем новую подстроку метры/футы вместо вырезанной.
5. обновляем текст.
В моем предыдущем посте вариант попроще будет:
1.строка кромсается кодом Евгения на куски
2.каждый кусок проверяется через numberp. если число - запомнили и преобразовали обратно в строку. В этом конкретном примере запомнится только последнее число в списке
3. пересчитали число на новые единицы
4. склеиваем список обратно в строку и пришиваем новый кусок с хвоста, результат загоняем в примитив.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 16.02.2021, 11:44
#4002
koMon


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


1. работает ОДНОкратно на только текстах, нуно (0 . "*text"). при повторном использовании считает футы метрами и дописывает в конец новые футы
2. если метры в середине строки, то дописывает футы в конец строки
3. если в строке нет цифр - обрушение. если такая строка выбрана среди тех, что с цифрами, то результат над безцифровыми строками непредсказуем.

Последний раз редактировалось koMon, 16.02.2021 в 12:05.
koMon вне форума  
 
Непрочитано 16.02.2021, 12:10
#4003
Vladimir_Sergeevich

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


Цитата:
Сообщение от koMon Посмотреть сообщение
1. работает ОДНОкратно на только текстах, нуно (0 . "*text"). при повторном использовании считает футы метрами и дописывает в конец новые футы
2. если метры в середине строки, то дописывает футы в конец строки
Ну первая позиция лечится просто заменой (sad-get-ss '((0 "TEXT") ) на (sad-get-ss '((0 "*TEXT") ) и да, защиты от дурака не предусмотрено...
А по второму пункту это уже выходит за рамки конкретного образца строки, представленного в #3979 и мы вернемся к "эпичности задачи по обработке всех вариантов в одном коде". Никто не запрещает добавить к анализу полученного числа проверку измерителя который можно найти в следующем по счету элементе списка... только надо вводить счетчик элементов или менять принцип обработки полностью. Вместо foreach прогонять repeat с отгрызанием просмотренных элементов cdr'ом, например.

з.ы. защиту от повторной обработки то и организовать не сложно: достаточно весь код повесить на (if (wcmatch str "*'*") nil (progn...))
Цитата:
Сообщение от koMon Посмотреть сообщение
3. если в строке нет цифр - обрушение. если такая строка выбрана среди тех, что с цифрами, то результат над безцифровыми строками непредсказуем.
з.з.ы. Добавил в #3999 защиту от повторной обработки и игнорирование строк без чисел
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 16.02.2021 в 13:53.
Vladimir_Sergeevich вне форума  
 
Непрочитано 16.02.2021, 14:38
#4004
koMon


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


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
046 * Написал Елпанов Евгений****** (ElpanovEvgeniy)
047 *
048 * дата создания (13/10/2007 a 11:42)
049 * написано во время конкурса на форуме:
050 * http://www.cadxp.com/XForum+viewthre...43-page-2.html
неожиданный поворот и конкурсы ведь были!

----- добавлено через ~5 мин. -----
4. если поменять число метров в строке уже с футами, то футы при выборе этой строки не меняются.

----- добавлено через ~12 мин. -----
Vladimir_Sergeevich, сдаётся мне что на твоём месте должен был бы быть тс!?
koMon вне форума  
 
Непрочитано 16.02.2021, 15:05
#4005
Vladimir_Sergeevich

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


Цитата:
Сообщение от koMon Посмотреть сообщение
4. если поменять число метров в строке уже с футами, то футы при выборе этой строки не меняются.
Не совсем понял формулировки вопроса... вроде так и задумано
у меня там в 4 строке висит "(wcmatch (vla-get-TextString txt) "*'*") nil..." и если уже были ранее футы в строке, то nil и погнали на следующий.

Цитата:
Сообщение от koMon Посмотреть сообщение
Vladimir_Sergeevich, сдаётся мне что на твоём месте должен был бы быть тс!?
давно не кодил, работа утомила, надо было отвлечься...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 16.02.2021, 15:12
#4006
koMon


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


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
Не совсем понял формулировки вопроса... вроде так и задумано
ну вот представь, делал ты тексты с метрами, много, потом прогнал их через свою прогу и получил к метрам футы. потом, бац, нужно где-то метры просто изменить. вот ты их меняешь и надо бы футы подтереть, а забыл где-то. прогоняешь опять всё через свою прогу и там где футы остались и метры не изменятся. вот об чём я.
Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
давно не кодил, работа утомила, надо было отвлечься...
and i have a strong feeling that topic caster would've definitely been amused amighty
koMon вне форума  
 
Непрочитано 16.02.2021, 15:15
#4007
Vladimir_Sergeevich

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


Цитата:
Сообщение от koMon Посмотреть сообщение
и надо бы футы подтереть, а забыл где-то
на этот случай надо не забывать. такое уже не лечится программистами
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 16.02.2021, 15:29
#4008
koMon


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


koMon вне форума  
 
Непрочитано 26.02.2021, 18:52
#4009
rusv


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


Цитата:
Сообщение от koMon Посмотреть сообщение
эпичная/не эпичная, но решить её универсальным инструментом вряд ли получится. в общем виде алгоритм видится имхо таким.
1. ищем в тексте "м". если литера встречается однажды по условию, то оно и к лучшему)
2. идём "налево" от найденной литеры в поиске цифр до первой не цифры. найденные цифры читаем в число метров. запоминаем индекс начала метров.
3. теперь идём "направо" через "/", через цифры до "'". запоминаем индекс "'", если нашёлся или индекс "м", если не нашёлся.
4. режем строку по найденным индексам и вставляем новую подстроку метры/футы вместо вырезанной.
5. обновляем текст.
Да, в целом задачку так и решил. Возникли трудности только с определением сколько пойти "налево", но так как в основном это тысячи, то обошелся константой "5".
Всем спасибо!!
rusv вне форума  
 
Непрочитано 26.02.2021, 20:17
#4010
skkkk


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


Цитата:
Сообщение от rusv Посмотреть сообщение
Возникли трудности только с определением сколько пойти "налево", но так как в основном это тысячи, то обошелся константой "5".
Вот тут как раз можно "пощупать" номер символа, о котором я говорил в #3984, и до тех пор, пока он попадает в интервал, идти левее. А то 5 - как-то не универсально
skkkk вне форума  
 
Непрочитано 19.03.2021, 11:09
#4011
Vladimir_Sergeevich

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


хм... что то лыжи не едут.
Вроде как с акад 2015 было новшество на тему командных методов command и vl-cmdf
Сейчас заметил, что в акад 2021 благополучно работают коды, которые работать и не должны бы... они что ли вернули поддержку command для обратной совместимости?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 19.03.2021, 11:40
#4012
Кулик Алексей aka kpblc
Moderator

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


Ты не забывай еще и про наличие command-s.

----- добавлено через ~1 ч. -----
Сейчас проверил: независимо от результатов vl-cmdf всегда возвращает t, а command и command-s - nil. Логика не поменялась с 2015 версии. Возможно, в кодах есть логические ошибки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2021, 13:53
#4013
Vladimir_Sergeevich

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ты не забывай еще и про наличие command-s.
В том то и дело, что помню. Только раньше сидел на акад 2013 и не грузился этим. Вроде речь шла о том, что с 2015 command не должна работать от слова совсем? А она все равно работает без переписывания...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 19.03.2021, 15:07
#4014
Кулик Алексей aka kpblc
Moderator

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


Кто это говорил и где? Она работает, только в другом режиме.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2021, 13:39
#4015
Vladimir_Sergeevich

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Кто это говорил и где? Она работает, только в другом режиме.
видимо я 5 лет назад понял неверно и не сильно парился пока не пошли акад обновлять в конторе.

----- добавлено через ~1 ч. -----
хм... вот жеж засада...
Почему значение (vla-get-TextRotation obj) для объекта мультивыноски ("AcDbMLeader") зависит от текущей пск?
Озадачился тут обработкой систем координат и споткнулся там где не ждал.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 06.08.2021, 09:18
#4016
Browning Zed


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


Уважаемые форумчане, помогите прояснить следующий момент. Пытаюсь добраться через реестр к параметрам текущего профиля юзера, чтобы изменить их конфигурацию. Например, меняю состояние статус-бара и добавляю туда циклический выбор:
(vl-registry-write (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (getvar "cprofile") "\\StatusBar\\Application" "SelectionCycling" "1"))
командная строка, при этом, возвращает T, но запись в реестре не изменяется, оставаясь со значением "0".
В чем может быть причина?

Последний раз редактировалось Browning Zed, 06.08.2021 в 09:24.
Browning Zed вне форума  
 
Непрочитано 06.08.2021, 09:24
#4017
Кулик Алексей aka kpblc
Moderator

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


А не проще ли системную переменную менять?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2021, 09:42
#4018
Browning Zed


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


Через переменную можно активировать/деактивировать функцию, но не вывести (либо убрать) ее в статус-бар.

Последний раз редактировалось Browning Zed, 06.08.2021 в 09:50.
Browning Zed вне форума  
 
Непрочитано 06.08.2021, 09:48
#4019
Кулик Алексей aka kpblc
Moderator

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


Ключи в реестре как правило все же меняются. Другой вопрос, что не стоит менять ключи, касающиеся самого ACAD'a. Так, например, можно поменять пути поддержки в реестре, и изменения даж сохранятся в реестре - но а) они не подхватятся и б) при закрытии ACAD'a все пути вернутся в начальное состояние. Поэтому и приходится работать через переменную окружения "ACAD".
По крайней мере такое было раньше, и я подозреваю, что вряд ли система изменилась.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2021, 09:55
#4020
Browning Zed


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Поэтому и приходится работать через переменную окружения "ACAD".
(setenv "SELECTIONCYCLING" "1") не дает должного эффекта, есть ли в данном случае выход из ситуации?
Browning Zed вне форума  
Ответ
Вернуться   Форум 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