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

Вернуться   Форум 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.
Просмотров: 1966003
 
Непрочитано 02.09.2021, 00:48
#4041
Сергей812


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


command-s вместо command?
Сергей812 вне форума  
 
Непрочитано 02.09.2021, 05:27
#4042
40in


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


Простите не понял вопроса...

----- добавлено через ~37 мин. -----
Ура! Заработало!
Все дело оказалось в системной переменной ATTREQ. Сегодня перевел ее в "1" и все получилось. Только не понятно почему у меня вчера не получалось, я ведь ее менял. Вчера при ATTREQ="1" выскакивало окошко заполнения динамического блока вручную.... Видимо вчера я в процессе экспериментов изменил еще какую-то системную переменную... Вот бы узнать какую)))....
40in вне форума  
 
Непрочитано 02.09.2021, 12:36
#4043
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


>выскакивало окошко заполнения динамического блока вручную
Чтобы не выскакивали окошко, установи системную переменную
ATTDIA <0>
AlexSheep вне форума  
 
Непрочитано 02.09.2021, 17:42
#4044
megabeton


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


Доброго дня!
Хочу создать набор примитивов (текстов), в который входили бы только тексты-числа (REAL и INT).
Что то голову сломал, с какой стороны подойти. Подскажите.

Через (vl-string->list (cdr (assoc 1 (entget (car (entsel)))))) получаю список кодов символов текста
Знаю, что точка и цифры 0-9 имеют коды (46 48 49 50 51 52 53 54 55 56 57)
Теперь вроде надо сравнить список кодов выбранного текста на наличие в нем кодов, не являющихся кодами точки и цифр, и вот тут что то у меня затык с исполнением.
Какую функцию применить и что сделать со списком, чтобы отсеять все примитивы (тексты), в которых присутствуют любые символы, кроме точки и цифр.

Может есть какой то более элегантный способ выбрать тексты-числа?
megabeton вне форума  
 
Непрочитано 02.09.2021, 17:59
1 | #4045
koMon


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


не элегантно
Код:
[Выделить все]
 (vl-some '(lambda (digit) (not (member digit '(46 48 49 50 51 52 53 54 55 56 57)))) (vl-string->list (cdr (assoc 1 (entget (car (entsel)))))))

Последний раз редактировалось koMon, 03.09.2021 в 08:59.
koMon на форуме  
 
Непрочитано 02.09.2021, 20:08
#4046
Кулик Алексей aka kpblc
Moderator

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


Если однострочные тексты не содержат букв и начинаются с чисел (возможно, пробелов) - то как вариант:
Код:
[Выделить все]
(atof (cdr (assoc 1 (entget (car (entsel))))))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.09.2021, 15:02
#4047
40in


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


Цитата:
Сообщение от AlexSheep Посмотреть сообщение
>выскакивало окошко заполнения динамического блока вручную
Чтобы не выскакивали окошко, установи системную переменную
ATTDIA <0>
Вот именно это я наверное и сделал в процессе поиска решения проблемы. Спасибо! ..
40in вне форума  
 
Непрочитано 11.10.2021, 14:42
#4048
megabeton


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


Добрый день!
Хочу построить перпендикулярный отрезок относительно точки на кривой.
Используя vlax-curve-getFirstDeriv получаю координаты вектора направленности в системе координат объекта (полилинии в моем случае).
В случае для полилинии-прямоугольника размерами 1000*1000 с параметром 0.5 (начальная точка полилинии отстоит от начала координат МСК) выдает (1000.0 0.0 0.0)
Пытаюсь преобразовать эти координаты в МСК, и не получается, функция на запрос
(trans (vlax-curve-getFirstDeriv (car (entsel)) 0.5) (car (entsel)) 0)
выдает тоже, что и
(vlax-curve-getFirstDeriv (car (entsel)) 0.5)
Что я делаю не так?
megabeton вне форума  
 
Непрочитано 11.10.2021, 15:53
#4049
Кулик Алексей aka kpblc
Moderator

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


Возможно, ОСК и МСК совпадают.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 16:04
#4050
megabeton


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
(начальная точка полилинии отстоит от начала координат МСК)
Все функции vlax-curve-... в случае выдачи результата в виде точки выдают их в МСК.
Исключением является vlax-curve-getFirstDeriv. Координаты вектора направленности выдаются в СКО.
Как эти координаты преобразовать в МСК?
megabeton вне форума  
 
Непрочитано 11.10.2021, 16:19
#4051
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от megabeton Посмотреть сообщение
Все функции vlax-curve-... в случае выдачи результата в виде точки выдают их в МСК.
Исключением является vlax-curve-getFirstDeriv. Координаты вектора направленности выдаются в СКО.
В http://docs.autodesk.com/PLNT3D/2014...=ACDd30e619053 я такого навскидку не увидел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 16:31
#4052
megabeton


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


vlax-curve-getFirstDeriv
Returns the first derivative (in WCS) of a curve at the specified location
Возвращает первую производную (в WCS) кривой в указанном местоположении, т.е. в МСК

Чудеса.
Рисую прямоугольник 1000*1000 в произвольном месте - далеко от начала координат МСК
На всякий случай запрашиваю координаты начальной точки "кривой" в МСК
(vlax-curve-getStartPoint (car (entsel)))
Получаю нечто подобное (9685.63 6276.53 0.0)
Теперь запрашиваю
(vlax-curve-getFirstDeriv (car (entsel)) 0.5)
И получаю результат (1000.0 0.0 0.0), т.е. координаты явно не в МСК.
Это глюк автокада?
Кому не лень, попробуйте у себя пожалуйста проделать эти пару действий.
megabeton вне форума  
 
Непрочитано 11.10.2021, 16:36
#4053
Кулик Алексей aka kpblc
Moderator

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


first deriv = первая производная от кривой в указанной точке. Вектор.
(vlax-curve-getPointAtParam (car (entsel)) 0.5) что вернет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 16:38
#4054
koMon


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


Цитата:
Сообщение от megabeton Посмотреть сообщение
Исключением является vlax-curve-getFirstDeriv. Координаты вектора направленности выдаются в СКО.
из мануала
vlax-curve-getFirstDeriv (AutoLISP/ActiveX)
Returns the first derivative (in WCS) of a curve at the specified location
koMon на форуме  
 
Непрочитано 11.10.2021, 16:41
#4055
megabeton


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


Вычислит точку в МСК на кривой по заданному значению параметра. А какие могут быть варианты?
megabeton вне форума  
 
Непрочитано 11.10.2021, 16:43
#4056
Кулик Алексей aka kpblc
Moderator

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


Где эта точка будет лежать? Скорее всего, на нижней горзонтальной грани прямоугольника. Вот вектор касательной и показывает направление Х
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 16:43
#4057
megabeton


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Returns the first derivative (in WCS) of a curve at the specified location
in WCS это же в МСК. То то и оно, что вычисляет (у меня по крайней мере) в ОСК
megabeton вне форума  
 
Непрочитано 11.10.2021, 16:45
#4058
Кулик Алексей aka kpblc
Moderator

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


Какая система координат для значений векторов??
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.10.2021, 16:47
#4059
megabeton


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Где эта точка будет лежать?
Параметр 0.5 говорит о том, что лежать она будет ровно посередине между нулевой и первой точкой полилинии. Функция vlax-curve-getPointAtParam вернет координаты этой точки в МСК, вот и все. Вектор направленности можно я так понимаю получить лишь функцией vlax-curve-getFirstDeriv

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Какая система координат для значений векторов??
А как это определить? Есть какая то системная переменная?
megabeton вне форума  
 
Непрочитано 11.10.2021, 16:56
#4060
Кулик Алексей aka kpblc
Moderator

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


Еще раз. Первая производная - это первая производная. Вектор, а не точка. Трехмерный, поэтому там и три координаты. Получишь вторую производную - что будет?
__________________
Моя библиотека 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