| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980
|
||
Просмотров: 1950209
|
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
![]() |
Цитата:
![]() Вообще-то с точки зрения портного самая лучшая фигура - это половая щетка. Именно на ней он может показать всё своё искусство. ![]() >Red Nova Все простые примеры ты уже прошел? Из того же Хювенена, книги "САПР на базе..." и всё понимаешь? М.б. у автора этого текста (почерк в принципе заметен ![]() IMHO Но тут не комментарии нужны, это просто стиль программирования.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... Последний раз редактировалось Alan, 20.07.2008 в 21:30. |
|||
![]() |
|
||||
Alan,
Цитата:
Прочитал пока 1/3 книги, но и элементарного кода написать не смогу. Цитата:
Тогда давай так. Если есть время и желание поучить, то выложи пожалуйста простой лисп на твой взгляд, но так, чтобы в нем был выбор объекта (объектов), и работа со свойствами. И напиши к нему пошаговое пояснение (рассчитанное на полного чайника).
__________________
Блог |
||||
![]() |
|
||||
проектировщик газопроводов Регистрация: 04.08.2005
Петербург
Сообщений: 324
|
Может быть, попробовать другой учебник. Мне, например, понравился вот этот http://www.williamspublishing.com/Bo...59-0931-7.html
Несмотря на то, что там много ошибок в листингах. Но первые шаги очень даже помогает сделать. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Я не силен в объяснениях...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Red Nova, #3: лично я начинал с командных методов. Потом - ent*- и vl*-операции. Сейчас смотрю по ситуации. Иногда ent* выгоднее (entmake, entmakex, entmod, entupd), иногда - activex.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
vic153,
Она платная, а я в другой стране жтиву. Может есть в общем доступе где? Кулик Алексей aka kpblc, Спасибо, попытаюсь из этого слепить что-то свое. Цитата:
__________________
Блог |
||||
![]() |
|
||||
Donhuan,
Я просто так ничего не понимаю, там ведь нет примеров для самого автокада. Думаю что мне нужны уроки на самом автокаде.
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Командные методы: это когда рисование (да и не только оно) выполняется через (command <...>) - то есть прямая передача команд в ком.строку.
Настоятельно рекомендую В.Свет "AutoCAD - язык макрокоманд и создание кнопок" и С.А.Зуев, Н.Н.Полещук (при участии П.В.Лоскутова) "САПР на базе AutoCAD - как это делается). Последнюю книжку надо читать вместе с любым руководством по адаптации AutoCAD'a (например, того же Н.Н.Полещука)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
![]() |
Цитата:
В которой любезный kpblc много чего написал для начала работы с ЛИСП
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Кулик Алексей aka kpblc,
Цитата:
Цитата:
Alan, Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Да, в книге В.Света "не совсем" про Lisp. Но снять панику перед программированием поможет.
"САПР на базе AutoCAD" на ozon'e
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 21.07.2008 в 15:54. |
|||
![]() |
|
||||
Цитата:
![]() Цитата:
__________________
Блог |
||||
![]() |
|
||||
проектирование, обследование Регистрация: 22.10.2006
Днепропетровск
Сообщений: 115
![]() |
"САПР на базе Autocad" с инета вытягивал (только ж там не Полещук-Лоскутов, а ShaddyDoc в соавторстве с Полещуком).
Если вдруг не найдешь - пиши в ЛС сброшу
__________________
Мосты важнее, чем дома, они более святы, чем церкви, ибо сильнее объединяют.. ..они возводятся именно в тех местах, где сходится множество человеческих потребностей, они долговечнее других строений и никогда не служат какой-то скрытой или злой цели.. Последний раз редактировалось GlebbI4, 21.07.2008 в 15:11. Причина: уточнение авторов |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Общая справка: http://www.ozon.ru/context/help/#1687140
http://www.ozon.ru/context/detail/id/1687460/ - о почтовой доставке. http://www.ozon.ru/context/detail/id/1540982/ - о курьерской доставке. Способы оплаты: http://www.ozon.ru/context/detail/id/200890/ Честно скажу, цена на озоне не самая низкая, но как-то попривык я к нему... GlebbI4, ShaggyDoc и Сергей Александрович Зуев - один и тот же человек. И обрати внимание - я ж написал Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
проектирование, обследование Регистрация: 22.10.2006
Днепропетровск
Сообщений: 115
![]() |
Цитата:
Цитата:
__________________
Мосты важнее, чем дома, они более святы, чем церкви, ибо сильнее объединяют.. ..они возводятся именно в тех местах, где сходится множество человеческих потребностей, они долговечнее других строений и никогда не служат какой-то скрытой или злой цели.. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Судя по ссылке на книгу, она у них (на озоне то бишь) есть...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, Спасибо за ссылку.
GlebbI4, Пишу в личку.
__________________
Блог |
||||
![]() |
|
||||
Кулик Алексей aka kpblc,
А может на реальном примере поучишь? Вот к примеру задумка лиспа с выносками спдс. Для начало нужно выделить все выноски. Если следовать аналогии с твоим лиспом, то предполагаю что выноски можно выделить так. (Только не смейся) Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Так не покатит (на форуме уже пробовали, простых путей там нет). Получение через ActiveX будет иметь смысл только при работе с файлом, содержащим внешние ссылки (из которых тоже надо будет получать выноски).
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Нам Xref не надо, так что через ent*.
Но давай не торопиться. Попытаюсь переварить. Цитата:
value - Входящие параметры tab item - локальные переменные Потом что-то не понятное... Потом опять что-то понял Цитата:
(vla-startundomark - Начальная метка для Undo (setq adoc (vla-get-activedocument (vlax-get-acad-object))) - Назначить переменной adoc чего-то там Ну и дальше много разных непонятных букв ![]() Можно разжувать?
__________________
Блог Последний раз редактировалось Red Nova, 22.07.2008 в 10:45. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
_dwgru-conv-pickset-to-list - функция, преобразовывающая набор примитивов в список, который уже можно обрабатывать через foreach или mapcar. Там все достаточно просто: определяется длина набора (n), и это количество раз повторяется: добавить в список n-ный элемент набора; n уменьшить на 1.
Строки Код:
переменной lst присвоить список, полученный из набора. Предварительно из списка исключить все элементы, у которых тип (хранится в DXF-коде 0) не равен "spdsNotePosition".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
А можно медленнее?
Я пытался написать свои предположения, но наверное не стоит, там все равно больше вопросов чем понятного. Когда будет свободное время напиши пожалуйста пояснение как в посте #5.
__________________
Блог |
||||
![]() |
|
||||
Red Nova, Не с того конца подходишь. Для тебя пока vl-* и vla-* функции табу. Задание попроще:
1. Название команды - Колонна 2. Запрашивается у пользователя длина A и ширина B 3. Запрашивается точка вставки Pt 4. Точка вставки Pt считается центром прямоугольника AxB Пиши команду, рисующую колонну. Как минимум на одни грабли наступишь.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
VVA прав на 100% - нельзя начинать учиться игре в шахматы по партиям профессионалов (а приведённый Алексеем код - как раз этого уровня). Начинать надо с простейших примеров для начинающих, тем более, что почти все приёмы в них можно отработать не хуже, чем в самых замысловатых экзерсисах, но гораздо нагляднее. Предложенное задание с "колонной" - само то. Причём писать надо так, чтобы потом программу легко было дополнить например запросом и обработкой угла поворота "колонны". Для этого надо чётко разделять блок ввода с контролем корректности ввода, блок вычислений и блок рисования. Все блоки можно (и нужно) оформить в отдельные функции. Причём каждый блок может так же быть разделён на ещё более простые отдельные функции... Кажущаяся простота задачи обманчива.
![]() |
|||
![]() |
|
||||
Про поворот колонны как раз было у меня в планах дальше
![]()
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
![]() Знаешь ведь, что по любому не сумею. Ну хоть предположу, что на счет запроса ширины надо начать так, а что дальше, это пока для меня не реально. Код:
Похоже я пока еще ниже уровнем чем даже ты предположил.
__________________
Блог |
||||
![]() |
|
||||
Red Nova, я такой же "позорник" который до сих пор лиспом не владеет
![]() Мне вот тоже не помешало бы научиться...но то времени нет то желание пропадает то опять появляется... Книги у меня есть и не одна а толку мало... Может нам профессионалы тут будут давать практические задания, а мы попробуем учитьсяна них. Просто по голой книге учиться тяжело... А вот с "репетиторами"... ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Например давайте попробуем написать программу складывающие 2 числа хранящиеся в однострочном тексте а результат поместить в 3й текст.
Какие функции необходимо использовать для такой программы? ЗЫ. программу нужно не оптимизированную, а максимально простую для понимания. без vl- vla- vlr и пр. ЗЗЫ. Также мне кажется не нужно писать нам готовую программу а потом ее разбирать. Нужно только показать куда копать и чем, естественно помагая в ошибках.
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Shoorup,
У меня в последнее время есть и желание и время, только способностей маловато. По книге и я ничего не понимаю, вот и создал тему, с просьбой мастерам показать примеры на практике. Давай пока разберем пример от VVA (#25), потом приступим к твоему.
__________________
Блог |
||||
![]() |
|
||||
Начало правильное.
Ширина колонны - число (будем считать всегда целое). Поэтому надо запросить не строку (getstring), а число. Найди нужное из ряда get* функций. Давай переменным будем давать осознанные имена. Newstring как-то не вяжится с шириной и числом вообще
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
подскажите мне по задаче из 31го поста.
Необходимые мне функции: + складывать чтобы atof - для преобразования строки в вещественное число numberp - для проверки. число выбрано или чтото другое ssget - для того чтобы получить список. Что еще забыл? и вообще правильно ли выбрал?
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
VVA,
Цитата:
__________________
Блог |
||||
![]() |
|
||||
VVA, наверно это getint?или getreal...
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
А также getsrting, getpoint
![]() В дополнение к #33: http://dwg.ru/f/showthread.php?t=5650 и http://dwg.ru/f/showthread.php?t=5887
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,091
![]() |
В dnl есть книга Финкельштейн "Autocad библия пользователя", так на диске к этой книге есть дополнительные главы про лисп как раз с такого типа примерами как колонна. Я по ней смог что-то для кружочков с цифрами буквами написать (маркеры осей) и еще такого типа. Дальше, к сожалению, не продвинулся. Там доступно и на примерах объясняют основы... Если в dnl нет диска к книге напишите - я выложу.
__________________
С уважением!!! |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Влезу, пожалуй, немного в обучение.
По задаче из #31. 1. Как будут выбираться тексты: по одному или оптом? Для этого можно использовать разные функции: ssget, entget. 2. Это уже как более опытные порекомендуют, но начинать следовало бы с функций, оперирующих dxf-кодами объектов (примитивов), пока не лезть во всякие vla- . 3. Попробуйте пока сделать программу без проверок на ошибки, используйте тестовый файл с точно известными и правильными объектами. Потом переходите на работу с другими файлами - по мере наступания на грабли будете узнавать как эти грабли отсекать. Итак получается: ssget, ssname, entget, assoc, atof, +, rtos, cons, subst, entmod ( или entmake). Кажется даже в порядке следования не ошибся. setq добавлять по вкусу. Насчет numberp: посмотрите внимательнее на работу функции atof. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Цитата:
Код:
![]() Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Дохлый номер - пытаться научиться на форуме, да еще в одной ветке. Научиться-то на форуме можно, но путем самостоятельного изучения литературы, справки и анализа публикуемых на форуме программ. Только хороших (например, от VVA). К тому же набегут другие со своими задачками. Кому сумму сделать, а кому и профиль одной кнопкой построить. Кто выяснять "кто здесь главный" и т.п. Будет "пожар в публичном доме во время наводнения".
Азбуку "побуквенно" разъяснять некому и некогда. Надо учиться работать. Поместил LISP в редактор VLIDE, выделил имя функции, нажал Ctrl-F1 и видишь справку по этой функции. Смотри, изучай аргументы, результаты, и как это использовано в разбираемой программе. Очень хорошее учебное пособие поставляется прямо с AutoCAD - в папке Tutorial\Visual LISP. Семь уроков - от самого простого до самого сложного. И всё разжевано в справке - раздел AutoLISP Tutorial. Эта справка есть и в русском варианте, kpblc её выкладывал где-то здесь. И делать свою программу, поначалу не разбрасываясь на другие. Колонна - очень хороший пример. Для развития. Сначала просто спросить размеры, направление и нарисовать прямоугольник. Потом догадаться, что размеры не обязательно каждый раз вводить, а можно по умолчанию предлагать. Потом выбор из типовых сочетаний. Потом не просто прямоугольник, а с решеткой, из уголков, из двутавров. Потом в 3D. И так до упора. А по ходу совершенствования этой программы можно научиться делать и сотни других. Разбить на логические блоки - начало, ввод, контроль данных, черчение, завершение. Не умеешь делать "хитрые" функции и не можешь пока понять, как они работают? Не страшно. Научись просто использовать готовые, например из библиотеки DwgRuLispLib И всё получится! |
|||
![]() |
|
||||
Люди добрые, подскажите где взять перечень функций лисп, весь Хювенен прошелся (Т1) там только Get, никаких подвариантов.
(Но только так чтобы было в свободном скачивании.)
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Red Nova, vlide -> F1. Там все (ну или почти все
![]() Shoorup, веришь - элементарно некогда ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ShaggyDoc,
Цитата:
__________________
Блог |
||||
![]() |
|
||||
ну хоть подскажи может я сам смогу ее сделать... не думаю что она ну очень сложная.
Например мне нужно при выборе текста однострочного получить ее коэффициент сжатия. Как это сделать?
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
А что такое Vlide?
__________________
Блог |
||||
![]() |
|
||||
ShaggyDoc,
Нашел. Это теперь тут AutoCAD 2009\Help файлы acad_alg.chm, acad_alr.chm, acad_alt.chm Почитаю
__________________
Блог |
||||
![]() |
|
||||
http://lisp.narod.ru/l1.html
http://aco.ifmo.ru/~nadinet/html/alisp.phtml в частности http://aco.ifmo.ru/~nadinet/html/lectures/lect_lsp.html и Глава4 http://www.ssga.ru/metodich/autocad/contents.html - ГЛАВА 12 FAQ по LISP писалось для версий Автокада 12-13, но на 95% справедливо и по сей день
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
(cdr (assoc 41 (entget <имя примитива>))) Если в комстроке набрать vlide, то откроется встроенный в Автокад редактор, в котором и надо работать с исходиками АвтоЛИСП. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Это не форум, это филиал чата местного значения
![]() Цитата:
Код:
Цитата:
Visual Lisp Integrated Developmet Environment (вроде так расшифровывается): интегрированная среда разработки Visual Lisp. Также команда в AutoCAD. --- Мать моя... Сколько написали, пока я о телефону общался...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA, Продолжим пример с колонной. Я нашел в хелпе весь список функций. От туда
Цитата:
Итак. Код:
К стати, а зачем после getreal ставить “T”?
__________________
Блог |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Не надо при вызове getreal ставить T - работать не будет, это для getstring, чтоб пробелы можно было разрешить или запретить. Для задания размеров колонны в мм (которые не должны быть дробными) можно использовать и другую функцию. Дальше надо запросить следующие значения, которые идут по логике программы.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
А еще лучше, наверное - в данном конкретном случае - сразу запрашивать прямоугольник )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Далее надо задать вторую переменную, полагаю что так.
Код:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
А если захочется вводить не с клавиатуры, а с экрана?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, Ну ты хотя бы намеки давай какого типа функцию искать. Это же для меня планета Марс.
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Red Nova, см. (getcorner)
Shoorup, еще раз внимательно посмотри, что возвращает (entsel).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Red Nova,
Хорошо. Пока будем считать, что пользователь вводит нужные нам данные с клавиатуры. В ответ на запрос (setq width (getreal "Введите ширину колонны <Выход>: ")) пользователь может ввести: 1. Пустой ввод (клавиша Enter) 2. 0 3. Положительное число 4. Отрицательное число Мы должны запретить вводить ему п. №№ 1;2;4. Т.е. только полижительные числа. Подсказка: см. ф-цию initget
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Кулик Алексей aka kpblc, entsel выдает имя выбранного объекта и координаты точки которые я указал на этом объекте. Получается мне мешают эти координаты?
т.е мне нужно сделать так Код:
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Получилось!!!
надо так: Код:
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 22.07.2008 в 17:16. |
||||
![]() |
|
||||
VVA, Из справки
Цитата:
То есть где-то мы должны написать Код:
__________________
Блог |
||||
![]() |
|
||||
Red Nova, #67
1. Initget действует на 1 запрос get* (getint, getreal и т.п. в helpe есть табличка) 2. Вытекает из п.1 перед каждым getreal. Запусти эти 2 строчки в VLIDE на выполнение и попробуй ввести что-нибудь недопустимое (кроме ESC)
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Тогда наверное лисп должен выглядеть так Код:
Цитата:
Цитата:
__________________
Блог |
||||
![]() |
|
||||
Так
Код:
Дальше нужно запросить точку отрисовки и отрисовать колонну
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Молодец, Red Nova. Вопросы всё более разумные.
Совет: Сделай VLIDE своим постоянным инструментом. Может быть даже кнопочкой. Создай в редакторе пустой файл и вставляй в него фрагменты кода. Сохрани файл в папочку, созданную в "подходящем месте" под именем, например, "эксперименты.lsp". В дальнейшем все свои Лиспы сохраняй во всякие подпапки этой папки. Выделенные фрагменты кода из "экспериментов" отправляй на выполнение в AutoCAD кнопочкой "загрузить выделенный фрагмент". В окно "Консоль" будут возвращаться результаты. Их можно выделить и скопировать в окно программы и спрятать за комментариями. Чтоб наглядно видеть результат. Для начала можно и код более наглядно писать. Например, вводить переменные: Так пишет профи: Код:
Код:
Успехов! |
|||
![]() |
|
||||
VVA,
Думаю как-то так Код:
ShaggyDoc, Постараюсь работать с VLIDE, хотя пока совсем не понял что там к чему. Цитата:
__________________
Блог Последний раз редактировалось Red Nova, 22.07.2008 в 20:26. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
А вообще-то надо начинать не с кодирования, а с постановки задачи. То есть с составления "плана". Его можно сразу писать в иде комментариев, а потом постепенно реализовывать. Грамотная постановка - половина дела.
Например, для колонны сразу надо решать: 1. Одна ли это колонна, или целый ряд (одна как частный случай)? Как потом одну размножать, если ряд под каким-то углом? 2. Что это за точка вставки по отношению к самой колонне? Центр? Но центр не всегда известен, может быть и колонна с нулевой привязкой к оси. Тогда центр придется как-то еще вычислять. 3. Что это за "ширина" и "толщина"? У колонны есть два размера, но их надо как-то правильно назвать. Например "размер вдоль ряда", "размер поперек ряда". и т.д. Пиши сначала постановку, пусть примитивно. Например: Код:
|
|||
![]() |
|
||||
ShaggyDoc,
Ну этому тоже надо еще поучиться. Получается три из пяти пунктов уже реализованы.
__________________
Блог |
||||
![]() |
|
||||
Цитата:
Цитата:
Ну попробую обьяснить что называется "от чайника чайнику" ![]() 1. Нужна книга Полещука которая упоминалась выше. Там по каждой функции мало того что можно почитать но и увидеть вполне толковый пример. 2. Лично я разбираю с внутренних функций, т.е. то что будет выполняться первым. А первым будет выполняться (entsel). Как я писал выше этим мы получим уникальное имя и координаты туда где ткнули при выборе текста. Для профилактики вводи в комстроке по функционально и смотри что возвращает функция. (entget(car(entsel))) тут entget выведет нам все "свойства" выбранного объекта, но в качестве аргумента ему нужно имя выбранного объекта. А так как у нас (entsel) дает по мимо имени еще и координаты (которые мешают - слишком много аргументов)то их можно "отсечь" вот так: (car(entsel)) - тоже попробуй ввести с carи без и посмотри что возвращается. assoc 41эта функция вытянет нам необходимое свойство в виде точечной пары - в данном случае коэффициент сжатия. (assoc 41(entget(car(entsel)))) - вводишь это и тебе вернется (41 . 0.8) например - это точечная пара, про точечные пары читай Полещука там все очень понятно. Ну а так как нам нужно лишь получить коэфициент сжатия то нужно "отсечь" то что впереди. Делаем это с помощью cdr в итоге получим 0.8 Вот и всё! проще некуда ![]() ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
В дополнение к #74: раскрою "секрет", как я пишу свои лиспы. Сначала defun и придуманное имя функции. Потом в комментарии прописываю, что функция делает, какие параметры принимает, что возвращает. А там уже и код можно делать. В любой момент возвращаюсь в начало файла и смотрю - а то ли я делаю?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Я - не пользуюсь.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Зачем блок-схемы? Это для первоклассников - чтоб на доске рисовать. Места много, толку мало. И не все выразишь. Алексей правильно делает - заготовка пустой функции, план в комментариях, потом реализация.
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Позволю себе высказаться о последовательности разработки "сложения значений из 2 или более однострочных текстов или атрибутов":
1. Разработать или спереть функцию отлова ошибок (_ru-error-catch, _dwgru-error-catch) 2. Разработать или спереть функцию безошибочного указания примитива, возможно, с контролем возвращаемого типа. Сделать универсальной (т.е. дать возможность использовать и nentsel, при необходимости). 3. Решить раз и навсегда - функция будет обрабатывать 2 примитива? Или их надо указывать набором? В зависимости от этого будет немного меняться решение. 4. После п.3 написать часть получения текстовой строки (однострочного текста / атрибута) и перевода его в числовое значение. Ну и сложить. Сделать результат вычисления возвращаемым значением. 5. Написать общую функцию, которая загрузит все служебные функции и покажет результат. 5.1. Если результат надо выводить в однострочный текст, то потребуется функция создания однострочного текста. Подробности - самостоятельно (слишком много нюансов). 5.2. Если результат выводить в ком.строку или в alert - то все просто, но и это надо учитывать ![]() --- 6. Решить вопрос с предоставлением функции сторонним пользователям. Да и про себя, любимого, тоже забывать не след ![]() === "Зачем так сложно!?" Затем, что функция безошибочного указания примитива, скорее всего, понадобится еще не одну сотню раз. И функция отлова ошибок. Короче, "САПР на базе" в руки и вперед ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ShaggyDoc,
Цитата:
![]() Пока мне хотелось бы понять как задачку от VVA дописать в самом простом виде. Полистал я хелп и лиспики разные тоже, но пока не понял какие функции надо использовать, чтобы построить полилинию по координатам относительно центра вставки. Shoorup, Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Red Nova, а ты как собираешься эту полилинию строить? Командой? entmake? vla?
Сильно подозреваю, что командой ![]() Переменные перевести в локальные обязательно! Потом можешь посмотреть на *error* и почти универсальный обработчик ошибок. --- Не, это точно чат! ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Олег К.,
Мне VVA пока запретил vla-функции ![]() Про команду _.PLINE не очень понял, разве в программу аутолисп можно вписать обычную команду? Остается функция entmake. Почитаю про нее.
__________________
Блог |
||||
![]() |
|
||||
Кулик Алексей aka kpblc,
Цитата:
![]()
__________________
Блог Последний раз редактировалось Red Nova, 23.07.2008 в 10:08. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
getpoint, getdist (для указания ширины и высоты), getvar, setvar, command
Для вычисления точек пока используй напрямую setq и результат подставляй в command. Как вариант, без учета поворота: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, Если честно, ты мне обломал урок,
![]() Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Код сделал прежде всего для анализа
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Red Nova, Продолжим. Сейчас мы имеем такой код
Код:
1. Мы не знаем vla-* функций (не можем обработать ESC) 2. Мы даже пока не знаем, что такое dxf коды ![]() Цитата:
Остается пока Цитата:
Пару критических замечаний по существующему коду: 1. Мы ф-цией (initget 7) запрещаем пустой ввод. Поэтому здесь "Введите ширину колонны <Выход>: " - <выход> не уместен. А вот в getpointe мы пустой ввод не запрещаем, запрещать не будем, а выход заменим на 0,0. Т.е. задача такая: В случае нажатия ENTER на запрос getpoint присвоить переменной base точку с координатами 0,0
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 31.07.2008 в 10:41. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Анализ показал, что колонна всегда будет смотреть в одну сторону.
![]() Цитата:
Попробуйте-ка что-нибудь нарисовать на другом языке высокого уровня, и даже на LISP, но вне Автокада. |
|||
![]() |
|
||||
VVA,
Ты хороший педагог. Цитата:
Цитата:
Из справки Цитата:
Думаю надо так Код:
Код:
__________________
Блог |
||||
![]() |
|
||||
А в чем смысл сдвоенной скобки?
И зачем тут Цитата:
__________________
Блог Последний раз редактировалось Red Nova, 23.07.2008 в 14:38. |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Функция cond обрабатывает аргументы, как списки. Если список, возвращает nil, переходит к следующему спску, если возвращено не nil, то полученное значение возвращается без обработки следующий списков. Список обрабатывается следующим образом - вычисляется первый элемент списка, если он не nil, то вычисляются все последующие элементы списка, последний вычисленный элемент возвращается. В случае:
Код:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Все-таки советую больше внимания уделить продумыванию алгоритма. Например, само рисование колонны. Вроде бы прямоугольник. Но из чего? Можно из отрезков, а можно полилинией. Можно и залитый, а можно и прозрачный. У колонны могут еще и свои "осики" быть. Двухветвевой она может быть или сплошной.
Приведу пример, как колонны в ruCAD рисуются в 2D. Сначала выбор из иллюстрированного меню (прилагаю скриншот). Там сразу выбирается типоразмер и вид колонны. Не обязательно самому именно такое меню делать, можно и просто в AutoCAD-овское встроить. А вот протокол работы после выбора типа: AutoCAD спрашивает: Пролет=6000, Количество=1. Точка начала ряда [Пролет/Количество]<Выход>:К То есть можем нарисовать и одну, и целый ряд с заданным пролетом. Можем сразу указать точку, а можем выбрать опции Пролет или Количество или просто нажать Enter и закончить работу. Допустим, ввели опцию К (можно из автоматически сформированного контекстного меню, можно с клавиатуры). Тогда спросит: Количество [Указать]<1>:5 После ввода количества возобновляется допрос: Пролет=6000, Количество=5. Точка начала ряда [Пролет/Количество]<Выход>: Укажем точку. Тогда вопрос: Направление ряда: Здесь надо указать точку. После того рисуется целый ряд колонн (см. рис), и снова вопросы: Пролет=6000, Количество=5. Точка начала ряда [Пролет/Количество]<Выход>: То есть можно и еще несколько рядов указать. Или сделать пустой ввод и закончить программу. Вот это как бы постановка задачи - что надо получить и как должно работать. Разумеется, могут быть и другие варианты. А вот и программирование: Всего одна строчка, вписываемая в меню. Код:
Такой вызов легко модернизирует любая "тетка". Меняй 500 и 1000 на другие значения и будешь иметь кучу "команд". Если же надо сплошную колонну 600х600, вызов немного другой: Код:
И вообще это совсем не обязательно для колонн, а для чего угодно подходит, где надо любое изображение с заданными габаритными размерами нарисовать сколько-то раз с заданным шагом. Картошку, например, рассадить. Само же кодирование дело более техническое. Конечно, там нужны и знания и мастерство, но это всё-таки труд для "Microservs". Хорошую постановку задачи потом легче и реализовать в коде. Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
|||
![]() |
|
||||
ShaggyDoc,
Цитата:
__________________
Блог |
||||
![]() |
|
||||
VVA
Почитал немного про command Из хелпа Цитата:
Х pt1 =Х base – (dimensionX/2) Y pt1 =Y base – (dimensionY/2) И так далее для всех точек. Теперь попробую это представить как лисп выражение Код:
Затем Код:
__________________
Блог |
||||
![]() |
|
||||
Ты с cond разобрался? Еще можно было использовать оператор if
По поводу точек. В общем все правильно, за исключением ошибок, на которые указал Олег К., Мой вопрос красным Код:
Здесь нужно учитывать особенности лисп при приведении типов Выполни у себя в редакторе и сделай выводы Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Про вопрос красным. Я ошибочно полагал, что содержимое List должно находится в скобках. Цитата:
__________________
Блог |
||||
![]() |
|
||||
Здесь я дал задание. Оно относится и к тебе. Внимательно почитай про функции.
"Красный" вопрос пока остается. Почитай (с разбором каждой главы в vlide) и попробуй еще раз ответить. По поводу (/ 1 2) и (/ 1 2.0) - здесь вопрос приведения типов. 1. Если ЦЕЛОЕ делится (умножается) на ЦЕЛОЕ, то получается ЦЕЛОЕ (целое от 0.5 - 0) 2. Если ЦЕЛОЕ делится (умножается) на ВЕЩЕСТВЕННОЕ, то получается ВЕЩЕСТВЕННОЕ (это то, которое real) Это я к тому, что в этом месте Код:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
И вообще для колонн размер надо задавать сразу REAL. Мало ли что чаще всего они выражаются в целом количестве миллиметров. А если понадобится работать в единицах "метры"? Если на плане сетей надо будет колонну поставить? Да и вводить данные удобнее - можно getdist использовать.
|
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
>> Shoorup
Выполни в редакторе вот такие выражения: (list ((* 5 2) (/ 8 4))) (list (* 5 2) (/ 8 4)) (list '(* 5 2) '(/ 8 4)) и посмотри чем отличаются результаты. При вычислениях лучше перебдеть (ведь пока нет отлова ошибок?) и делать явно задаваемые числа вещественными. Не помню, говорили ли здесь, в vlisp'e есть хорошие возможности проверки кода на ошибки. Самые простые на панельке "Tools" (в стандартном виде - третья слева во второй строке). На код из #100 точно бы 2 раза ругнулся. |
|||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
Добрый день, полезная тема, тоже как раз начал изучать лисп.
Прделагаю начать с самого простого а потом усложнять. А то для начинающих сложно освоить все сразу. Давайте вернемся к простой задаче Цитата:
![]() Код:
Теперь можна усложнять. Постепенно. |
|||
![]() |
|
||||
Нужно подождать пока Red Nova и Co подтянуться. А тебе пока нужно
1. На запрос ширины и длинны запретить пустой ввод,ввод отрицательных чисел и 0 2. На запрос точки на ввод по умолчанию принять координату 0,0,0.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
Цитата:
+заментил getreal на getdist, чтоб ширину и высоту можна было на экране указать, нормально будет? Код:
|
|||
![]() |
|
||||
andery, Нормально.
Для проверки на пусто (nil) есть функция null т.е. (if (= p nil) ... можно еще записать как (if (null p) ... Ну и еще наиболее частые связки car и cdr уже есть ввиде отдельных функций (car (cdr p)) = (cadr p) Читать нужно с конца: к списку p применить cdr потом car (cADDARr p ) = (cAr (cDr (cDr (cAr p)))) Код:
Теперь давай запросим угол поворота и повернем колонну относительно точки P на этот угол. PS P не объявлена в локальных переменных
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Выполняется указание точек в чертеже. Наверное, в функции initget стоит использовать и bit 8.
VVA, вопрос. Если использовать (if (null (setq p (getpoint "\nУкажите центр колоны:<по умолчанию (0,0)>"))) (setq p '(0 0 0))) всегда ли в условии при пустом вводе будет nil? Что-то сомнения иногда бывают. Последний раз редактировалось Олег К., 24.07.2008 в 17:11. |
|||
![]() |
|
||||
VVA И так на данный момент код у меня такой
Код:
Про вопрос красным я понял. Про реальные и вещественные вроде тоже. P.S. А учеников у тебя все больше. ![]() ------------------------ Опоздал, уже дал задание про поворот. Про P не понял. Цитата:
__________________
Блог Последний раз редактировалось Red Nova, 24.07.2008 в 17:57. |
||||
![]() |
|
||||
Ну повернуть можно командой rotate, а как выбрать то что мы будем крутить не знаю. Поищу в книгах.
__________________
Блог |
||||
![]() |
|
||||
Олег К., Не вижу причин чтобы не работала. Хотя я предпочитаю такие конструкции (для меня нагляднее)
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 17.12.2016 в 19:52. |
||||
![]() |
|
||||
Red Nova, У тебя код не рабочий. Читай замечания Олег К. #101,
Локальные переменные описываются после слэша при определении функции. Выделил корасным Код:
Кстати проверить значение переменной можно, набрав в командной строке Автокада ! (восклицательный знак) и имя. Если загрузить команду Колонна, то Цитата:
В команде TEST2 переменная rez не объявлена локальной Код:
2. Выполняем TEST1 3. Набираем в командной строке !rez 4. Выполняем TEST2 5. Набираем в командной строке !rez 6. Смотрим на разницу и делаем выводы Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
Цитата:
---------------------- Пробую в автокаде, рисую что-то, потом команда rotate, затем ввожу p, результата нет. ![]()
__________________
Блог |
||||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
Да я тож застрял на Ротате.
![]() Мне не понятен синтаксис вызова команды Например (command "_rotate _L или (command "_rotate "_L" где об этом почитать можна прочитал что _L последний нарисованный обьект.... Подскажите в каом русле двигаться.... |
|||
![]() |
|
||||
Мы ее (колонны) только что отрисовали и ни одна команда редактирования с ней не работала. Предыдущего (текущего, последнего) набора нет. Так что P (Previous), он же текущий-предыдущий-последний не пойдет. Штудируйте командную строку.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
ПРАВИЛО
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 31.07.2008 в 10:53. Причина: Список |
||||
![]() |
|
||||
andery,
При передаче параметров ф-ции command нужно соблюдать последовательность запросов вызванной команды, причем
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 25.07.2008 в 10:50. Причина: Список |
||||
![]() |
|
||||
Ручками что ты дальше делаешь? Нажимаешь или ENTER или ПКМ. Так и скажи об этом command'у чтобы он нажал тоже
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
andery,
1. getpoint у тебя что запрашивает? - ТОЧКУ 2. В какую переменную ты ее запоминаешь? - в P Если у тебя в переменной P находится ТОЧКА и _rotate запрашивает "Базовая ТОЧКУ" какого ляда вы занимаетесь мазохизмом? Код:
(setq p (list 1 2 3)) - точка с X=1 Y=2 Z=3 (setq p '(5 3 0)) - точка с координатами X=5 Y=3 Z=0 (command "_Rotate" "_L" "" '(2 3)) - начнет поворачивать последний отрисованный объект относительно точки X=2 Y=3 ТО же самое (setq p (list 2 3)) (command "_Rotate" "_L" "" p)
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Ты совсем не мешаешь. Не могу же я один всех учить. Тем более скоро возьму оставшуюся часть отпуска
![]()
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
конструктор Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,091
![]() |
Red Nova
Вот те примеры и текст, что обещал
__________________
С уважением!!! Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
|||
![]() |
|
||||
конструктор Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,091
![]() |
И последняя, саму книгу можно взять в DOWNLOAD
__________________
С уважением!!! Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
|||
![]() |
|
||||
andery, Молодца. Quote и ' равнозначны (а набирать быстрее)
(setq p (quote (0 0 0)) = (setq p '(0 0 0)) Усложним задачу. 1. Рисуем колонну 2. В центре колонны рисеум круг радиусом=ширине колонны 3. Поворачиваем колонну PS По прежнему переменная P у тебя глобальная
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA, Извиняюсь за отсутствие, дома телефон зарубили, а инет на нем.
Наверстываем упущенное. Итак командой _L можно выбрать только что созданный объект (к стати а что означает L?) Попытаюсь без подглядывания. Пока не учитывая #134 Код:
__________________
Блог Последний раз редактировалось Red Nova, 25.07.2008 в 10:08. |
||||
![]() |
|
||||
VVA,
Цитата:
Но могу так. (сперва добавив локальную переменную R) Код:
__________________
Блог |
||||
![]() |
|
||||
Red Nova,
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
Подсказка: entlast
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Почитал хелп, не скажу что понял, но вроде как можно присвоить переменной обозначение только что введенного объекта.
Может так? (предварительно объявив локальную переменную object) Код:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Н.Н.Полещук - любая книга по AutoLISP и VisualLISP.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
VVA
Проверку не прошел. Загрузил такой лисп Код:
Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
Кулик Алексей aka kpblc,
Ты про Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Нет, я про Visual LISP и секреты адаптации AutoCAD и AutoLISP и Visual LISP в среде AutoCAD (+ CD-ROM)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
2-я ссылка сверху. Скачать все. Оттуда можно попасть сюда: entlast в главе 5
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
>> Red Nova
А скобки кто проверять будет? У тебя же в COND два условия используются, так почему второе в скобках, а первое без? Код:
>> VVA Все ждал когда ученики сообразят с выделением колонны, наверное уже можно отвечать? Пока нашел только три способа: командой создать именованный набор, использовать ssget с несколькими фильтрами, запомнить имя функцией entlast. Entlast'ом проще и надежнее, но с ssget'ом тоже интересно повозиться. Получилось такое: (ssget "W" (list (- x1 1) (- y1 1)) (list (+ x3 1) (+ y3 1)) '((0 . "lwpolyline"))) но это только для данного случая и предварительно отключив привязки. PS: самому иногда интересно решить поставленные задачи, можно узнать что-нибудь новое. Последний раз редактировалось Олег К., 25.07.2008 в 12:01. |
|||
![]() |
|
||||
VVA,
Проглядел. От туда Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
Цитата:
Делаем следующее
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 26.07.2008 в 22:17. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
В процесс обучения не вмешиваюсь, но
Цитата:
При неконтролируемом рисовании можно до него запомнить последний примитив в переменной через (entlast) а потом использовать функцию наподобие Код:
Код:
|
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
ShaggyDoc, не скромничайте, Ваши замечания всегда полезны начинающим (и не только).
Кажется, я малость ошибся, в первом случае имелись в виду группы (command "group"), постоянно путаю их с наборами (ssget). Нечто вот такое: Код:
Про выбор рамкой я не зря сказал "только для данного случая", когда на чертеже только квадрат полилинией и круг. Сам всегда долго думаю как составить фильтр, чтобы отсеять все ненужное. |
|||
![]() |
|
||||
Олег К.,
Внес твою поправку. Ты и раньше говорил, а я забыл... VVA, По поводу отслеживания ошибок, спасибо за пояснения. Принцип ясен. Но понять почему радиус не принимается равным переменной R это не помогло. Я исправил cond, но как уже сказал с радиусом неполадка. А квадрат рисуется нормально. Код:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
А osmode кто отслеживать будет?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc,
Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc,
Может там и описывается нужная операция, но слова osmode там нету, я пока в ауте. Что вообще означает отследить osmode? Олег К., Неа, не понимаю.
__________________
Блог |
||||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Ну ладно, тогда по буквам:
(command "_circle" base "" R "") 1. сначала говорим какую команду используем ["_circle"], это равнозначно Command: ci CIRCLE 2. далее нужно указать точку центра или выбрать опцию [base] = Specify center point for circle or [3P/2P/Ttr (tan tan radius)]: 0,0,0 3. потом следует ввести радиус [Specify radius of circle or [Diameter] <96.20>: 20], а у нас в программе зачем-то пустой ввод [""] 4-5. все, запросы команды закончились, а мы задаем еще R и "". Энтер или пробел нужно нажимать только если вводишь данные с клавиатуры. При программном вводе подтверждение ввода совсем не нужно. В рабочем варианте: (command "_circle" base R). Еще есть такая функция vl-cmdf, почитай о ней, посмотри чем отличается от command. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
По-моему, при такой интенсивности обучения у RED Nova не остается времени на домашнюю аналитическую работу. Он бы и сам допер до некоторых вещей, что было-бы более ценно. Предложение такое: класс по программированию работает, например, по пятницам. Или дважды в неделю. И все-учителя и ученики - ждали бы с нетерпением
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Red Nova, а я зря дал ссылку в #155, что ли? Пост Alan'a прочти.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Олег К.,
Теперь понял. А я все пытался enter всунуть. Наконец заработало. Код:
Цитата:
Vova, Цитата:
![]() Кулик Алексей aka kpblc, Вот сообщение от Alan Цитата:
__________________
Блог |
||||
![]() |
|
||||
Пора усложнить лисп. Научится вводить размеры колонны с экрана, Запоминать значение введенное последним. Дайте список функций, которые нужно для этого изучить. Постараюсь сам навоять.
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
> #161 : лично я стараюсь не давать русских наименований ни переменным, ни функциям. Возможно, это тянется еще с VB3.0 и его ограничений.
Вся разница между (command) и (vl-cmdf) в том, что (command) всегда возвращает nil (независимо ни от чего), а vl-cmdf при успешном (или корректном) завершении команды вернет T. Это утверждение гарантированно работает только для полного AutoCAD, для LT и IntelliCAD'a это уже не факт. Цитата:
Код:
> #162 : Я б на твоем месте сначала с *error* разобрался. А экранный ввод уже потом. Хотя как знаешь. Для ввода с экрана см. getdist и (или) getcorner. Для всего остального функции lisp'a уже не требуются.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
А что на счет error? Что означает "Разобраться с ним", в каких целях это вообще делать?
__________________
Блог |
||||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
![]() |
Цитата:
Лучше всего посмотреть уже упоминавшуюся книгу "САПР на базе..." стр.286
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
В дополнение: http://www.arcada.com.ua/forum/viewtopic.php?t=445
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ну что ж. Начнем наступать на ГРАБЛИ №1 (OSMODE)
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
||||
![]() |
|
||||
VVA,
Подозреваю, что ты имел в виду необходимость отключить привязки на момент действия лиспа, так как при запросе угла поворота они могут помешать.
__________________
Блог |
||||
![]() |
|
||||
Цитата:
Код:
Отсюда еще пару мельких наводящих заданий:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Цитата:
Цитата:
Цитата:
http://dwg.ru/f/showthread.php?p=271243
__________________
Блог |
||||
![]() |
|
||||
Red Nova, Ты хочешь сказать, что из поста #167 открыв файл "Грабли N1", установив OSMODE=33, задав ширину и высоту колонны = 400 и точку вставки- пересение красных отрезков получил колонну прямоугольную ?
Еще остался вопрос N3 из #169
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
Цитата:
__________________
Блог Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
||||
![]() |
|
||||
andery,
Скорее всего "osmode" 0 Код:
Цитата:
__________________
Блог |
||||
![]() |
|
||||
Red Nova,
Цитата:
andery, Это все надо делать руками. См. #167. Это просто пимер того, что может произойти, если не обрабатывать OSMODE Red Nova, Цитата:
И это один вариант. Я хочу услышать ответ как без ЛИСПА, F3 и проч. при черчении отменить действие установленных объектных привязок. (Подсказка: временная объектная привязка или SHIFT + Правая кнопка мыши)
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 28.07.2008 в 15:18. |
||||
![]() |
|
||||
andery, Ты не правильно понял задачу. Это не задача вовсе, а попытка показать пример, что может быть, если не обрабатывать OSMODE
Отредактировал условия в #167. Это все нужно просто выполнить на своем компьютере и посмотреть на результат.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Цитата:
Цитата:
__________________
Блог |
||||
![]() |
|
||||
andery, Да, это правильный результат. Вот эти грабли мы и будеи преодолевать. (Только пересохрани в формате 2004 Автокада, а то не все смогут открыть)
Цитата:
Цитата:
Т.е. получается, что в ответ на запрос командой точки (будь то _line, _circle или _pline) можно вводить выделенные жирным опции, как то _endp, _non и т.д. Раз мы можем вводить это руками, значит мы можем это передать и в command. Т.е. вырисовывается 2 способа борьбы с "OSMODE" 1. Сохранить в переменную, обнулить (или отключить), а потом восстановить 2. Перед вводом каждой точки в command временно отключать привязку с помощью опции "_non" Хочу увидеть оба варианта в лиспе
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 28.07.2008 в 17:22. |
||||
![]() |
|
||||
VVA,
Первый вариант ты уже видел Код:
Код:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
И не совсем верный второй вариант. Надо:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc,
![]() ![]()
__________________
Блог |
||||
![]() |
|
||||
Red Nova, Алексей уже подсказал. Я нужное слово выделил в #181 поярче.
Давай остановимся на 1-м варианте. Покажи код целиком, чтобы идти дальше. *** Добавлено andery, В принципе не обязательно, если в переменной R - число. Но в Автокаде радиус можно "показать" 2-мя точками. Просто нужно отдавать себе отчет, что у тебя в переменной R.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA, Учитывая отслежку Osmode
Код:
__________________
Блог |
||||
![]() |
|
||||
andery,
Подозреваю что далее у нас урок обработки ошибок методом переопределения функции error
__________________
Блог Последний раз редактировалось Red Nova, 28.07.2008 в 22:35. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Ссылка на пример переопределенного обработчика уже была
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Цитата:
Есть 2 варианта: 1-й как показал Алексей здесь можно ГЛОБАЛЬНО переназначить обработчик ошибок: создать свою функцию с 1-м аргументом (см. (defun kpblc-error (message) ... по ссылке присвоить стандартному обработчику указатель на свой обработчик ошибок. Пример ф-ции приведу здесь ;| Код:
Суть его в том, что мы не сохраняем и восстанавливаем глобально ф-цию *error*, а объявляем ее ЛОКАЛЬНОЙ переменной и в теле самой ф-ции объявляем ф-цию *error*. Т.е конструкция принимает вид Код:
Здесь есть еще один нюанс: Всем КРАСНЫМ ф-циям, объявленным внутри СИНИХ функций доступны ЛОКАЛЬНЫЕ переменные СИНИХ функций как ГЛОБАЛЬНЫЕ. Я могу спокойно проверять значение переменной, объявленной как локальная в ф-ции верхнего уровня (СИНЕЙ) Код:
Ну вот попытался в картинках объяснить как это работает. Хотелось бы увидеть команду КОЛОННА с *error* по 2-му варианту
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 29.07.2008 в 00:14. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
Следующим шагом рекомендовал бы заняться метками отмены
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Понять бы еще что значит (msg)
Код:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
поставь точку останова и выполняй пошагово
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Мы добились главного. Если пользователь прервет ф-цию, то восстановятся объектные привязки до вызова команды Колонна. Для иллюстрации примера делаем следующее:
Задание для самостоятельной работы: Написать функции disable_osmode - Функция отключения режима(ов) объектной привязки enable_osmode - Функция включения режима(ов) объектной привязки В справке про OSMODE об этом написано.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 27.12.2007
Сообщений: 132
![]() |
У меня такие вопросы по поводу Граблей№1,
1.Зачем делать osnapcoord=0 ? Ведь "наступаем" на грабли тока при этом значении. 2.Не лучше ли делать osnapcoord=1 (1 - Ввод с клавиатуры пере регулирует установки объектной привязки., ведь при этом у нас никогда "не убежит" точка, т.к. мы ее вводим "вручную")? А потом возращать прошлое значение. 3. Если делаем колонну, зачем osmode делать 0 ? А если пользователь при вставке колонны хочет пользоваться привязками? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,497
|
"А если пользователь хочет пользоваться привязками" - то надо либо отключать их только на момент рисования, либо вообще использовать некомандные методы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
1,2. Это дело вкуса. Можно делать и так. Это просто пример. Можно вообще использовать некомандные методы и забыть про привязку. Плюс еще OSNAPCOORD появилась в 13-й версии Автокада, а я эти проблемы решал в 10-й версии. Привычка.
![]() 3. А никто не застявляет обнулять OSMODE сразу как запомнили значение. Можно обнулить перед вызовом _PLINE. Это так Red Nova захотел, а пользователь andery указал ему на этот СУЩЕСТВЕННЫЙ недостаток. Неудобно пользоваться командой Колонна, так как невозможно привязаться к существующему пересечению осей. Ну и наконец привязку можно ОТКЛЮЧАТЬ
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Скорее всего, ни в каком (не проверял), но... есть ещё момент - при написании любых программ, одним из важнейших правил является минимизация вемешательства в среду исполнения, т.е. по окончании работы нашей программы, то место, где она работала (в случае АвтоЛИСПов, это Автокад) должно функционировать ровно так же, как и до запуска. В принципе, манипуляция с переменными osmode и osnapcoord вполне сопоставима - в любом случае менять их надо только на момент программного рисования и сразу по его окончании восстанавливать в первоначальное состояние, но опять же есть нюанс - традиционно для таких манипуляций используется именно osmode, в том числе потому, что управлять привязками умеет любой пользователь, а вот о osnapcoord и её действии большинство пользователей даже и не подозревает. Соответственно, если чтото пойдёт наперекосяк, а рано или поздно таки случится чтото такое, от чего не спасут самые изощрённые меры предосторожности, то пользователю гораздо проще восстановить привязки, чем управление приоритетом ввода.
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Цитата:
А до некомандных методов обучение еще дойдет. Там и с *error* решать иначе нужно. |
|||
![]() |
|
||||
andery, #201 Незачтено. Причина: читай #203
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Цитата:
Код:
Код:
Нужно функцией IF создать две ветки программы. Проверяется значение osmode, если оно меньше 16384, то выполняется первая функция, иначе вторая. Но вот как проверить это условие? Цитата:
andery, Главный смысл научится это все делать, лично мне тоже здесь не нужно возится с Osmode, но знать надо. Кто знает какая переменная в будущем может помешать.
__________________
Блог Последний раз редактировалось Red Nova, 29.07.2008 в 12:30. |
||||
![]() |
|
||||
Red Nova, #206 Незачет
1. Я просил фукции, а не команды 2. Уж если и команда, то enable_osmode определена неправильно. 3. Цитата:
Цитата:
Так вот жетон - это АРГУМЕНТ функции ТУРНИКЕТ. Т.е. АРГУМЕНТ - ОБЯЗАТЕЛЬНО ПЕРЕДАВАЕМЫЙ ПАРАМЕТР функции. (турникет жетон) - вошли в метро (турникет) - ошибка, мало передано параметров (турникет жетон сумка) -ошибка, много передано параметров. Нужен только жетон
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA,
Цитата:
![]() Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
andery,
Цитата:
__________________
Блог |
||||
![]() |
|
||||
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
andery, Это условие (= (getvar "osmode") (- (getvar "osmode") 16384)) ВСЕГДА будет ложь (nil). Поэтому рисать if не имеет смысла.
Этот вариант будет всегда делать то же, что и твой Код:
1. Если хочешь напечатать в командную строчку - используй ф-цию princ 2. Господа, я просил ФУНКЦИЮ, а не КОМАНДУ PPS Напишите мне словами алгоритм работы функции disable_osmode.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |