| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
26.11.2007, 13:51 | #1 | |
Перемещение отрезка в LISP
Регистрация: 26.11.2007
Сообщений: 60
|
||
Просмотров: 9125
|
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
Понятно...
Т.е. нужно вызвать команду автокада move с параметром расстояние перемещения? (Расстояние перемещения будет рассчитываться в другой функции.) А перед этим не нужно выбор объекта делать? Кстати, подскажите, пожалуйста, где можно взять список команд автокада с параметрами(!). Везде искал и везде списки без параметров, а у меня еще русский автокад, и хелп в нем соответствующий. |
|||
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
Очень тяжело дополнить его до расширенного варианта с переменной расстояния и выбором объекта отрезка?
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
А что должно быть параметрами? Там же можно в качестве параметров передавать указатель на перемещаемый примитив; указатель на сформированный набор примитивов; начальную точку; конечную точку - и все это в разных сочетаниях...
--- Опа, что значит не нажать сразу "Отправить"... Но вопрос в общем-то остается в силе.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Может так понятней будет
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Параметры при вызове команды из лиспа аналогичны параметрам при запуке из командной строки. А вот опции команды лучше указывать как в английской с подчеркиванием _.
Типа Код:
Сравни _Layer и _-Layer
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Что ты вкладываешь в термин параметры?
Я - тип ввода (опция, точка, угол) и их последовательность.
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Не удержусь: а я - передаваемые в функцию значения
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Наверное, имеет смысл договориться о применении терминов...
Аргумент функции Цитата:
Функциональное программирование |
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Тогда уж надо было цитировать
а не понятие аргумента в математике. Хотя что имел ввиду автор вопроса - непонятно. Возможно, что величина смещения должна быть не зашита в программу. Конечно, VVA сделал просто для примера с постоянной (setq dist 100). А вот если переделать "квази-команду" C:L_MOVE (ей нельзя передать аргументы) в "настоящую" функцию, то можно сделать величину смещения аргументом. Код:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Я так понял, что пока непонятно как повторить команду Автокада с помощью command
передаваемые в функцию значения пока непонятней еще больше и это следующий шаг. Давай считать параметром команды все то, что мы ей отвечаем, когда работаем ручками. Это могут быть опции, указание точки, расстояния, угла и т.п. - Опция в команде передается ввиде строки, желательно английская с _ - точка ввиде списка lisp'a (10 20 30) - для ожидания ввода пользователя служит символ pause - нажатие клавиши Enter задается "" Пример 1 Создадим слой с помощью _-layer Листинг командной строки (цветной - коментарии) Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Да наверняка AlexeySh под параметрами имеет в виду опции команд.
Цитата:
Цитата:
|
|||
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
Под параметрами я имел ввиду передаваемые в функцию значения, как во многих (если не во всех) языках программирования.
И в автокаде , я как понял, это "все то, что мы ей отвечаем, когда работаем ручками". Правильно? Для чего все это мне было нужно. Была задача: "Существует фигура на плоскости, состоящая из отрезков. Известна ее необходимая площадь, и известна грань (отрезок), которую можно двигать для получения необходимой площади." Я вычислял площадь указываемой фигуры и сдвигал отрезок в ту или в другую сторону. И так, пока нужная площадь не получится. .......... Остался у меня вопрос, я указываю область, указываю отрезок. А получить как направление сдвига? Может по перпендикуляру от точки к отрезку? Если есть желание, выложу, что получилось чуть попозже. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
"все то, что мы ей отвечаем, когда работаем ручками" - это относится к функции AutoLISP command или vl-cmdf, которой передается имя команды AutoCAD, а затем, в качестве аргументов, всё, что эта команда ожидает. То есть, если с помощью функции command вызвать команду Автокада MOVE то она будет запрашивать выбор объектов (до пустого ввода), базовую точку и точку, куда надо переместить. Если же написать на LISP функцию, например, перемещения, то ей в аргументах можно передать то, что надо программисту. Можно и набор примитивов, и базовую точку, и смещение. А конечную точку - высчитать. |
|||
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,268
|
2 All
Заглянул я по ссылке http://ru.wikipedia.org/wiki/Lisp Елпанова Евгения, а там написано: Лисп считается вторым после Фортрана старейшим высокоуровневым языком программирования. . А разве Алгол не старше Фортрана? |
|||
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,337
|
Off Top
Фортран созан в период 54-57 годы http://ru.wikipedia.org/wiki/Фортран Алгол разработан в 58-60 годы http://ru.wikipedia.org/wiki/Алгол |
|||
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,268
|
А почему-же, когда говорят об алгоритмических языках, в первую очередь называют Алгол? Вспоминается даже фраза: "Алгол - прадедушка всех алгоритмических языков".
Тогда: или Фортран - не алгоритмический язык, или он появился после Алгола. Или: вышеуказанное изречение - штамп не слишком сведущих в истории программирования людей. |
|||
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,337
|
Это можно посмотреть в ссылке по Алголу, которуяю я привел. Кажется, в ней есть ответ. Вот он
Цитата:
ЯАП- язык авто-программирования. "Послать число 12 в ячейку 1420 Послать число 16 в ячейку 1421 Сложить (СП- сложение плавающее) содержимое ячейки 1420 с содержимым ячейки 1421 Результат записать в ячейку 1422" Последний раз редактировалось Хмурый, 27.11.2007 в 14:54. |
|||
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,268
|
В институте еще изучали Алгол. А потом лабу надо было делать, и вдруг выясняется: ЭВМ для лабы Алгола не знает, а знает Алгамс. Почти то же самое с некоторыми изменениями синтаксиса. Но главное отличие - код должен быть прописными буквами. Так или иначе, но коды для лабы всем пришлось переписывать.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Ау, народ, вы куда??
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
Profan, Извиняюсь, у меня сейчас автокада рядом нет..
Область не разрывается, в конце концов пользователь может удлинить концы отрезков .... А эта задача уже сделана и работает... Вот только направление приходится руками задавать (параметр для команды MOVE - угол сдвига). Было бы красиво, чтобы само считалось... |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
>AlexeySh
Только если начинаете изучать LISP, то учитесь делать сразу правильно и надежно - переучиться будет трудно. Приводимые примеры расценивайте как прототипы "промышленных". В них, для простоты понимания, Profan опустил ряд важных моментов: 1. Что будет, если будет выбран не отрезок? 2. Что будет, если будет нажата ESC? 3. А если "реал" неправильно введут? 4. А если пустой ввод сделают? 5. А если будет включена постоянная привязка? 6. А если точку смещения как-то не эдак зададут? Например, на продолжении отрезка. Незачем внутрь команды в данном случае вставлять pause (источник ошибок пользователя). Надо до функции command запросить точку, проверить правильность её ввода, и, возможно, совместить указание точки с запросом величины смещения. Да и вообще command надо заменить на vl-cmdf и обернуть ловушкой ошибок. Функция command устарела, она всегда возвращает NIL, то есть не дает возможность оценить выполнилась она или нет. Чтобы не придумывать ещё украинских и грузинских вариантов, имена команд и опций надо всегда писать в английском варианте независимо от локализации AutoCAD с префиксом _. А уж текстовые сообщения - на любой мове. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
ShaggyDoc, хочу дополнить: если лисп применять в AutoCAD LT + LT Extender или, например, в BricsCAD'e, то более чем возможен вариант возврата vl-cmdf значения nil независимо от результата выполнения. Учитывая возможный зоопарк софта, я б не стал завязываться на возвращаемое значение, а при первой возможности вообще отказывался бы от командных методов. Независимо от того, как они вызываются.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
ShaggyDoc, какого черта. Вы обрушиваете на человека массу информации о проблемах, до которых он еще не вырос. Вы предлагаете ему выполнить пятилетку в 2 дня? Шаг за шагом - и все образуется. Шишки тоже бывают полезны.
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
"Масса информации" - это только намёк на проблемы. Чтобы быть готовым к ним. Вот если бы я рабочий код привел, то в нем действительно разбираться было бы трудно начинающему. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Для ShaggyDoc.
Конечно, трудно было бы. И я сознательно все упростил. Почему? Да потому, что пока у AlexeySh частная задача: как переместить отрезок параллельно самому себе. Программа моя работает и "если" тут не причем. Esc ни на что в сущности не повлияет. Привязки при выполнении команды "_OFFSET" ("ПОДОБИЕ") не работают. Не попал на объект? Не страшно. Вот если бы я не ввел функцию (if), тогда другое дело. Хотя, конечно, надо было записать так: Код:
В отношении (pause). Наоборот, в данном случае, применение ее оправдано, потому что никаких ошибок в указании направления смещения быть не может, а привязки, как я уже написал, в этот момент не действуют. Да и вообще, дело здесь в другом. Цитата:
|
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Для AlexeySh.
Цитата:
Необязательно устанавливать английский AutoCAD, достаточно иметь файл acad_acr.chm из его Help. |
|||
|
||||
Регистрация: 26.11.2007
Сообщений: 60
|
Вот что у меня получилось.
Сделано для частной задачи. Область не разрывается при перемещении отрезка. Код:
1) Проверку на выбранный объект, ввод данных пользователя 2) Проверку на включенную привязку 3) Расчет угла направления перемещения (my_angle) Да,..., нужно книжицу по AUTOLISPу покупать. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Все равно программа вылетит, если "шагая" для подбора площади ты выйдешь за границы отрезка.
Предлагаю для такого случая воспользоваться XLINE (Прямая). Вижу 2 преимущества: 1. контур всегда будет пересекаться, как бы далеко ты не шагнул 2. в 10 поле xline хранится точка, а в 11 вектор направления (то есть угол). Добавив к нему 90 градусов, получишь перпендикуляр.
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ламерские вопросы по LISP и DCL | TheBuTeK | LISP | 7 | 03.07.2016 22:15 |
Подскажите, существуют ли практические руководства по Lisp? | vn | LISP | 261 | 26.11.2015 13:27 |
Библиотека доступа к содержимому растров из LISP - существуе | kp+ | LISP | 6 | 16.10.2007 21:45 |
Как вывести текст в model из приложения написанного на lisp? | paradoxvaha | AutoCAD | 3 | 16.04.2007 03:54 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |