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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Перемещение отрезка в LISP

Перемещение отрезка в LISP

Ответ
Поиск в этой теме
Непрочитано 26.11.2007, 13:51
Перемещение отрезка в LISP
AlexeySh
 
Регистрация: 26.11.2007
Сообщений: 60

Извините, если это банально просто, но я изучаю LISP второй день, а результат нужен уже...
Вообщем, нужно передвинуть выбранный отрезок на какое-то указанное расстояние (кол-во единиц) в сторону от точки (можно тоже указанной на экране или с указанными координатами) параллельно самому себе.
Заранее спасибо.
Просмотров: 9094
 
Непрочитано 27.11.2007, 10:44
#21
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Наверное, имеет смысл договориться о применении терминов...

Аргумент функции
Цитата:
Аргумент функции — независимая переменная, от значений которой зависят значения функции.
лисп
Функциональное программирование
Елпанов Евгений вне форума  
 
Непрочитано 27.11.2007, 11:20
#22
ShaggyDoc

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 (ей нельзя передать аргументы) в "настоящую" функцию, то можно сделать величину смещения аргументом.

Код:
[Выделить все]
 
(defun L_MOVE (dist / echo line)
....
)
Это, конечно, не для Евгения и не для VVA
ShaggyDoc вне форума  
 
Непрочитано 27.11.2007, 11:22
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Я так понял, что пока непонятно как повторить команду Автокада с помощью command
передаваемые в функцию значения пока непонятней еще больше и это следующий шаг.
Давай считать параметром команды все то, что мы ей отвечаем, когда работаем ручками. Это могут быть опции, указание точки, расстояния, угла и т.п.
- Опция в команде передается ввиде строки, желательно английская с _
- точка ввиде списка lisp'a (10 20 30)
- для ожидания ввода пользователя служит символ pause
- нажатие клавиши Enter задается ""
Пример 1
Создадим слой с помощью _-layer
Листинг командной строки (цветной - коментарии)

Цитата:
Команда: _-layer (line 1)
Текущий слой: "0"
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _M (опция Создать line 2)
Введите имя нового слоя (этот слой станет текущим) <0>: Новый слой (line 3)
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _C (опция Цвет line 4)
Новый цвет [изПалитры/Альбом] <7 (белый)>: 5 (line 5)
Список имен слоев для присвоения цвета 5 (синий) <Новый слой>: (нажали Enter 1 line 6)
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: (нажали Enter 2 line 7)
Теперь все этио на лиспе
Код:
[Выделить все]
(command "_-Layer"        ;_ (line 1)
         "_M"             ;_ (опция Создать line 2)
         "Новый слой"     ;_ (line 3)
         "_C"             ;_ (опция Цвет line 4)
          5               ;_ (line 5)
         ""               ;_ (нажали Enter 1 line 6)
         ""               ;_ (нажали Enter 2 line 7)
         )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.11.2007, 11:31
#24
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да наверняка AlexeySh под параметрами имеет в виду опции команд.
Цитата:
но я изучаю LISP второй день
Цитата:
где можно взять список команд автокада с параметрами
Profan вне форума  
 
Автор темы   Непрочитано 27.11.2007, 12:39
#25
AlexeySh


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


Под параметрами я имел ввиду передаваемые в функцию значения, как во многих (если не во всех) языках программирования.
И в автокаде , я как понял, это "все то, что мы ей отвечаем, когда работаем ручками". Правильно?

Для чего все это мне было нужно.
Была задача: "Существует фигура на плоскости, состоящая из отрезков. Известна ее необходимая площадь, и известна грань (отрезок), которую можно двигать для получения необходимой площади."
Я вычислял площадь указываемой фигуры и сдвигал отрезок в ту или в другую сторону. И так, пока нужная площадь не получится.
..........
Остался у меня вопрос, я указываю область, указываю отрезок. А получить как направление сдвига? Может по перпендикуляру от точки к отрезку?

Если есть желание, выложу, что получилось чуть попозже.
AlexeySh вне форума  
 
Непрочитано 27.11.2007, 12:47
#26
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Ну, тогда можно использовать команду "_OFFSET" ("ПОДОБИЕ").
Profan вне форума  
 
Непрочитано 27.11.2007, 13:47
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от AlexeySh Посмотреть сообщение
Под параметрами я имел ввиду передаваемые в функцию значения, как во многих (если не во всех) языках программирования.
И в автокаде , я как понял, это "все то, что мы ей отвечаем, когда работаем ручками". Правильно?
Нет, неправильно.

"все то, что мы ей отвечаем, когда работаем ручками" - это относится к функции AutoLISP command или vl-cmdf, которой передается имя команды AutoCAD, а затем, в качестве аргументов, всё, что эта команда ожидает.

То есть, если с помощью функции command вызвать команду Автокада MOVE то она будет запрашивать выбор объектов (до пустого ввода), базовую точку и точку, куда надо переместить.

Если же написать на LISP функцию, например, перемещения, то ей в аргументах можно передать то, что надо программисту. Можно и набор примитивов, и базовую точку, и смещение. А конечную точку - высчитать.
ShaggyDoc вне форума  
 
Непрочитано 27.11.2007, 14:04
#28
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


2 All
Заглянул я по ссылке http://ru.wikipedia.org/wiki/Lisp Елпанова Евгения, а там написано: Лисп считается вторым после Фортрана старейшим высокоуровневым языком программирования. .
А разве Алгол не старше Фортрана?
Pilot вне форума  
 
Автор темы   Непрочитано 27.11.2007, 14:11
#29
AlexeySh


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


ShaggyDoc
Согласен.
AlexeySh вне форума  
 
Непрочитано 27.11.2007, 14:16
#30
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,327


Off Top

Фортран созан в период 54-57 годы http://ru.wikipedia.org/wiki/Фортран
Алгол разработан в 58-60 годы http://ru.wikipedia.org/wiki/Алгол
Хмурый вне форума  
 
Непрочитано 27.11.2007, 14:35
#31
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


А почему-же, когда говорят об алгоритмических языках, в первую очередь называют Алгол? Вспоминается даже фраза: "Алгол - прадедушка всех алгоритмических языков".
Тогда: или Фортран - не алгоритмический язык, или он появился после Алгола.
Или: вышеуказанное изречение - штамп не слишком сведущих в истории программирования людей.
Pilot вне форума  
 
Непрочитано 27.11.2007, 14:48
#32
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,327


Это можно посмотреть в ссылке по Алголу, которуяю я привел. Кажется, в ней есть ответ. Вот он
Цитата:
Алгол был популярен в Европе, в том числе в СССР, в то время как сравнимый с ним язык Фортран был распространен в США и Канаде
У нас был самый могучий язык- АлМИР и ещё машинные коды для "Наири"

ЯАП- язык авто-программирования.

"Послать число 12 в ячейку 1420
Послать число 16 в ячейку 1421
Сложить (СП- сложение плавающее) содержимое ячейки 1420 с содержимым ячейки 1421
Результат записать в ячейку 1422"

Последний раз редактировалось Хмурый, 27.11.2007 в 14:54.
Хмурый вне форума  
 
Непрочитано 27.11.2007, 15:01
#33
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


С рельсов сошли...
Profan вне форума  
 
Непрочитано 27.11.2007, 15:02
#34
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


В институте еще изучали Алгол. А потом лабу надо было делать, и вдруг выясняется: ЭВМ для лабы Алгола не знает, а знает Алгамс. Почти то же самое с некоторыми изменениями синтаксиса. Но главное отличие - код должен быть прописными буквами. Так или иначе, но коды для лабы всем пришлось переписывать.
Pilot вне форума  
 
Непрочитано 27.11.2007, 15:07
#35
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,327


С катушек съехали...
Хмурый вне форума  
 
Непрочитано 27.11.2007, 15:08
#36
Кулик Алексей aka kpblc
Moderator

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


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


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


Остался у меня вопрос, я указываю область, указываю отрезок.
А получить как направление сдвига? Может по перпендикуляру от точки к отрезку?
AlexeySh вне форума  
 
Непрочитано 27.11.2007, 15:36
#38
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


См. сообщение 26. Но если вы сдвинете отрезок, область, для которой надо определить площадь, разорвется?
Profan вне форума  
 
Автор темы   Непрочитано 27.11.2007, 15:46
#39
AlexeySh


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


Profan, Извиняюсь, у меня сейчас автокада рядом нет..

Область не разрывается, в конце концов пользователь может удлинить концы отрезков ....
А эта задача уже сделана и работает... Вот только направление приходится руками задавать (параметр для команды MOVE - угол сдвига). Было бы красиво, чтобы само считалось...
AlexeySh вне форума  
 
Непрочитано 27.11.2007, 20:34
#40
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот еще простенький пример с командой "ПОДОБИЕ" ("_OFFSET"). Отрезок перемещается параллельно самому себе. Как у вас там область образуется, я не понял.
На русском языке:
Код:
[Выделить все]
 
(defun C:О_ПОДОБИЕ ( / echo ln dst)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq ln (entsel "\n Выберите отрезок: "))
(if ln
    (progn
    (setq dst (getreal "\n Величина смещения отрезка: "))
    (princ "\n Укажите точку, определяющую сторону смещения: ")
    (command "ПОДОБИЕ" "у" "да" dst (car ln) pause "")
    )
)
(setvar "CMDECHO" echo)
(princ)
)
На английском языке:
Код:
[Выделить все]
 
(defun C:L_offset ( / echo ln dst)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq ln (entsel "\n Выберите отрезок: "))
(if ln
    (progn
    (setq dst (getreal "\n Величина смещения отрезка: "))
    (princ "\n Укажите точку, определяющую сторону смещения: ")
    (command "_OFFSET" "_e" "_yes" dst (car ln) pause "")
    )
)
(setvar "CMDECHO" echo)
(princ)
)
Profan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Перемещение отрезка в LISP

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ламерские вопросы по 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