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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вопрос: Интерактивное построение полилинии внутри lisp-программы

Вопрос: Интерактивное построение полилинии внутри lisp-программы

Ответ
Поиск в этой теме
Непрочитано 26.04.2010, 10:24 #1
Вопрос: Интерактивное построение полилинии внутри lisp-программы
Tonic
 
Воронеж
Регистрация: 26.06.2007
Сообщений: 151

Всем привет!
Вот такая небольшая проблемка появилась: нужно организовать построение полилинии (заданной толщины) с возможностью построения дуговых сегментов по трём точкам (то есть, по двум - первая известна), с отключенным "эхом".
Что-то вроде этого (в таком виде не работает):
Код:
[Выделить все]
(initget "Arc Дуга")
(setvar "CMDECHO" 0); всё равно потом включается
(while (setq stat (getpoint "\nНачало полилинии или [Arc/Дуга]: <Завершить>"))
(command "_pline" stat "_w" 3.0 3.0)
(while (/= (getvar "cmdactive") 0) (command pause))
);while
(initget 0)
;если указана точка - построение полилинии сегментами (как обычно)
;если выбрано ключ. слово - указание двух точек (вторая точка дуги и конечная) и построение дугового сегмента с переходом снова в режим линейного сегмента
;если нажата Enter ("Завершить"), то выход из цикла

Вроде, не сложно, но правильная идея реализации не приходит.
Просмотров: 6225
 
Непрочитано 26.04.2010, 12:49
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
;если выбрано ключ. слово - указание двух точек (вторая точка дуги и конечная)
А откуда первую брать?
Do$ вне форума  
 
Автор темы   Непрочитано 26.04.2010, 13:01
#3
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Цитата:
Сообщение от Do$ Посмотреть сообщение
А откуда первую брать?
Если дуга не является первым сегментом полилинии, то первая точка будет последней точкой предыдущего сегмента.
Тут лучше вообще запретить дугу в качестве первого сегмента, чтобы такой проблемы не возникало. Что-то вроде
Код:
[Выделить все]
(setq reply1 "\nНачало полилинии: <Завершить>")
(setq reply2 "\nНачало полилинии или [Arc/Дуга]: <Завершить>")
(setq reply reply1)
(while (setq stat (getpoint reply))
...
...
(setq reply reply2)
);while
Tonic вне форума  
 
Непрочитано 26.04.2010, 13:08
#4
VVA

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


Цитата:
Сообщение от Tonic Посмотреть сообщение
"\nНачало полилинии или [Arc/Дуга]: <Завершить>"
Вроде как Arc и Дуга одно и то же
Код:
[Выделить все]
(setvar "CMDECHO" 0); всё равно потом включается
(while (/= (getvar "cmdactive") 0) (command))
(initget "Line Arc Линия Дуга _Line Arc Line Arc")
(setq stat (getpoint "\nНачало полилинии или [Линия/Дуга]: <Завершить>"))
(command "_pline" stat "_w" 3.0 3.0)
(initget "Line Arc Линия Дуга _Line Arc Line Arc")
(while (setq stat (getpoint stat "\nВторая точка полилинии или [Линия/Дуга]: <Завершить>"))
  (cond ((= stat "Arc")(command "_Arc" "_S" pause pause))
        (t (command "_Line" stat))
        )
(setq stat (getvar "Lastpoint"))  
(initget "Line Arc Линия Дуга _Line Arc Line Arc")
);while
(while (/= (getvar "cmdactive") 0) (command ""))
(initget 0)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.04.2010, 14:14
#5
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Цитата:
Сообщение от VVA Посмотреть сообщение
Вроде как Arc и Дуга одно и то же
Это подсказка, чтобы можно было ввести то, что удобнее.

Код работает, спасибо. Только непонятен смысл строки initget:
(initget "Line Arc Линия Дуга _Line Arc Line Arc")
Зачем трижды повторять Arc? И почему в запросе (и в initget) указывается также Line/Линия, если построение переключается в режим линии само собой (после построения дуги)?
Tonic вне форума  
 
Непрочитано 26.04.2010, 15:50
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Смысл в том, что можно ввести и "Arc" и "Дуга", а возвратится все равно значение "Arc". А с линией Владимир перемудрил
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вопрос: Интерактивное построение полилинии внутри lisp-программы

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Справка по форуму Admin FAQ: Часто задаваемые вопросы 13 04.03.2014 11:12
проблема с написанием программы на Lisp Voyager LISP 9 07.04.2010 10:12
Обрезка объектов по принципу программы КРЕДО, Выделение объектов находящихся внутри заданного контура (автоматическая обрезка чертежа по кнтуру) МишаИнженер AutoCAD 6 25.08.2009 16:17
Построение полилинии по таблице координат Борода Программирование 11 21.01.2005 18:44
Вопрос по LISP - "Тихий выход" Torino LISP 2 31.07.2004 19:44