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

Вернуться   Форум 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.
Просмотров: 1965735
 
Непрочитано 11.10.2021, 17:02
#4061
megabeton


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Получишь вторую производную - что будет?
получу координаты вектора второй производной

От первой производной получу координаты вектора первой производной.
Есть точка на кривой (в МСК), есть координаты вектора первой производной (в ОСК вопреки мануалу).
Имею 2 точки - могу построить нормаль, но надо перевести координаты вектора первой производной (вектора направленности) из ОСК в МСК.
КАК???
megabeton вне форума  
 
Непрочитано 11.10.2021, 17:03
#4062
Кулик Алексей aka kpblc
Moderator

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


Я не могу объяснить, что вектор не имеет координат. У него есть только направление, и все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 17:06
#4063
megabeton


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


Ладно, как нормаль то построить тогда?

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
вектор не имеет координат.
Призадумался я что то...

Физический смысл vlax-curve-getFirstDeriv я понимаю следующим образом.
Есть точка на кривой, она является НАЧАЛОМ ВЕКТОРА, результирующая точка функции vlax-curve-getFirstDeriv (первой производной) - КОНЕЦ ВЕКТОРА.
Конец вектора указывает его направление.

Прошу поправить, если неправ.
megabeton вне форума  
 
Непрочитано 11.10.2021, 17:15
#4064
koMon


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я не могу объяснить, что вектор не имеет координат. У него есть только направление, и все.
Алексей, а разве может быть направление без координат точек, задающих это направление?
koMon вне форума  
 
Непрочитано 11.10.2021, 17:36
#4065
megabeton


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


Кому не лень, попробуйте пожалуйста в командной строке вбить следующий код (для полилинии желательно кратных размеров):

(vlax-curve-getFirstDeriv (car (entsel)) 0.5)

Какой у вас будет результат?
megabeton вне форума  
 
Непрочитано 11.10.2021, 17:46
#4066
koMon


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


ятд, что поскольку первая производная это 3d вектор в мск, то его направление будет от нуля в мск до полученной 3d точки при выполнении функции получения первой производной.
koMon вне форума  
 
Непрочитано 11.10.2021, 18:00
#4067
megabeton


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


Функция vlax-curve-getFirstDeriv
Вычисляет первую производную (в МСК) к кривой в точке, заданной параметром.
(vlax-curve-getFirstDeriv <кривая> <параметр>)
Аргументы: <кривая> - примитив или VLA-объект, соответствующий кривой;
<параметр> - значение параметра, определяющее положение точки на кривой.
Возвращаемое значение - список из трех вещественных чисел (координаты вектора первой производной).


Т.е первая точка вектора определяется аргументом <параметр>
Вторая точка вектора - результат функции vlax-curve-getFirstDeriv

Направление будет от первой точки (заданной аргументом параметр) ко второй (полученной из результата функции vlax-curve-getFirstDeriv)

Вся беда в том, что координаты второй точки выдаются вопреки мануалу не в МСК, а в системе координат объекта.
А функция trans их не преобразовывает, потому что, видимо, не воспринимает результат функции vlax-curve-getFirstDeriv как точку, а как "вектор" (чтобы дьявол его побери это не значило), хотя и принимает координаты конца вектора в качестве аргумента.

КТО НИБУДЬ, ПОПРОБУЙТЕ ПОЖАЛУЙСТА, ИСПОЛНИТЬ КОД У СЕБЯ В АВТОКАДЕ
Код:
[Выделить все]
 (vlax-curve-getFirstDeriv (car (entsel)) 0.5)
megabeton вне форума  
 
Непрочитано 11.10.2021, 22:09
#4068
skkkk


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
ПОПРОБУЙТЕ ПОЖАЛУЙСТА, ИСПОЛНИТЬ КОД У СЕБЯ В АВТОКАДЕ
В произвольном месте начертил полилинию длиной 300.
Код:
[Выделить все]
Команда: (vlax-curve-getFirstDeriv (car (entsel)) 0.5)
Выберите объект: (300.0 0.0 0.0)
skkkk вне форума  
 
Непрочитано 11.10.2021, 23:02
#4069
megabeton


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


Т.е мануалы автокада врут.
vlax-curve-getFirstDeriv возвращает координаты вектора первой производной в СКО, а не МСК.
И как тогда преобразовать координаты вектора первой производной из СКО в МСК
Код ниже их не преобразовывает
(trans (vlax-curve-getFirstDeriv (car (entsel)) 0.5) (car (entsel)) 0)

С другой стороны координаты вектора первой производной не всегда лежат на кривой. Может в этом дело...
Как тогда строить нормаль к кривой?

Последний раз редактировалось megabeton, 11.10.2021 в 23:09.
megabeton вне форума  
 
Непрочитано 11.10.2021, 23:22
#4070
koMon


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


Да нет никакой координаты ско, первая производная это направление касательной в искомой точке. Вектору направления касательной не нужна связь с искомой точкой. Как я написал ранее, направление касательно определяется от нуля мск до результата первой производной. Перпендикуляр считать тупым прибавление к углу касательно половины пи. Skkk нарисовал произвольную полилиния, касательная в искомой точке ноль градусов, перпендикуляр плюс минус половина пи.
Вряд ли мануалы автокада могут так долго и продолжительно врать)))
koMon вне форума  
 
Непрочитано 11.10.2021, 23:42
#4071
megabeton


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Да нет никакой координаты ско
(300.0 0.0 0.0) тогда что это, если не внутренняя координата второй (первой после нулевой) точки полилинии?

Цитата:
Сообщение от koMon Посмотреть сообщение
Вектору направления касательной не нужна связь с искомой точкой
Вот это ничего себе

Цитата:
Сообщение от koMon Посмотреть сообщение
направление касательно определяется от нуля мск до результата первой производной
не согласен

Цитата:
Сообщение от koMon Посмотреть сообщение
Перпендикуляр считать тупым прибавление к углу касательно половины пи
угол относительно каких точек берем?

----- добавлено через ~8 ч. -----
Все, понял. Неправ. Вечером уже тупил, с утра дошло.
Слишком буквально воспринимал значение вектора, как направленного отрезка. Начальная точка вектора жестко ассоциировалась с точкой на кривой.
Думаю слово АЗИМУТ быстрее вернуло бы меня в нужное русло))
Спасибо koMon skkkk kpblc

Последний раз редактировалось megabeton, 11.10.2021 в 23:48.
megabeton вне форума  
 
Непрочитано 12.10.2021, 07:53
#4072
1958


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


Начертил полилинию длиной 300, получил следующее:
Команда: (vlax-curve-getFirstDeriv (car (entsel)) 0.5)
Выберите объект: (258.32 152.548 0.0)

AC2007
Вложения
Тип файла: dwg
DWG 2007
getFirstDeriv.dwg (42.8 Кб, 4 просмотров)
1958 вне форума  
 
Непрочитано 12.10.2021, 08:11
#4073
megabeton


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


1958 спасибо.
Разобрался что к чему (пост 4071). Направление задается от начала МСК, далее параллельным переносом уже определяем направление в искомой точке.
megabeton вне форума  
 
Непрочитано 12.10.2021, 09:20
#4074
koMon


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


кстати очень похоже, что вектор второй производной будет не что иное как вектор нормали в искомой точке. и не надо делать лишних телодвижений)))
koMon вне форума  
 
Непрочитано 12.10.2021, 10:23
#4075
megabeton


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


Вторая производная по идее несет смысл степени изогнутости кривой в точке.
Для точки, лежащей посередине между двух точек прямой полилинии дает (0.0 0.0 0.0), т.е. изогнутость нулевая.
Для аналогичных условий с полилинией-дугой выдает нечто (4.51197e-014 736.86 0.0), только не понятно, как правильно это интерпретировать в данном случае. Это координаты (и координаты ли) чего интересно?
megabeton вне форума  
 
Непрочитано 12.10.2021, 10:33
#4076
koMon


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


по идее да, но видимо не здесь. я попробовал для дуги и получил ровно вектор перпендикуляра)
koMon вне форума  
 
Непрочитано 12.10.2021, 10:41
#4077
megabeton


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


Попробовал, да, для дуги отбивает вектор нормали относительно начала МСК.
Для прямого участка видимо сообщает (0.0 0.0 0.0) - участок прямой (не изгибается), строй нормаль по двум соседним точкам.
megabeton вне форума  
 
Непрочитано 13.10.2021, 15:14
#4078
megabeton


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


Вопрос по функции if

Есть код примерно такого содержания
(if
(выполни команду подобие со смещением 100)
(что то сделай)
(сделай что другое)
)

Функция if реагирует на nil и T.
А что, если в ответ на какое то действие программа не возвращает ни nil ни T.
В конкретном примере при слишком большом смещении внутрь создается ситуация невозможности создания объекта, программа возвращает
"; ошибка: Ошибка Automation. Отсутствует описание."
То есть для IF это ни nil ни T.
Как правильно надо обходить это препятствие, чтобы выполнились дальнейшие действия, чтобы "Ошибка Automation" воспринималась как nil.
megabeton вне форума  
 
Непрочитано 13.10.2021, 15:18
#4079
Кулик Алексей aka kpblc
Moderator

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


vl-catch-функции в руки Хотя я наверняка делал бы по-другому. Логику переписывал как минимум )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.10.2021, 15:19
#4080
megabeton


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Логику переписывал как минимум )
Если можно по подробнее. Мне тоже кажется это корявой конструкцией.
megabeton вне форума  
Ответ
Вернуться   Форум 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