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

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

Как с помощью LISP нарисовать окно линиями?

Ответ
Поиск в этой теме
Непрочитано 14.01.2010, 12:18 #1
Как с помощью LISP нарисовать окно линиями?
Aндрeй
 
Москва
Регистрация: 23.08.2007
Сообщений: 529

Хочется разобраться с LISP программированием, как раз предоставилась возможность изучить на конкретном примере.

Как можно описать следующие действия:
1. Вводятся две точки на экране (левый верхний угол окна, затем правый нижний угол)
2. по образованному контуру рисуется прямоугольник четырьмя линиями
3. в зависимости от максимально возможной ширины стеклопакета (например 1м), рисуются вертикальные линии символизирующие импосты. вертикальные линии должны делить окно по горизонтали на равное количество отрезков.

Пример:
Графическим способом считаны точки с координатами 0,0 и 1800,1000
программа должна нарисовать 4 линии по контуру, чтобы получилось окно 1800х1000, затем рисуется еще одна вертикальная линия по середине.

Если считаны точки с координатами 0,0 и 2400,1000
программа должна нарисовать 4 линии по контуру, чтобы получилось окно 2400х1000, затем рисуется еще две вертикальных линий, которые делят окно на три части.

Посоветуйте с чего начать...
Просмотров: 6360
 
Непрочитано 14.01.2010, 12:29
#2
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,508


_Pline
Рyslan вне форума  
 
Непрочитано 14.01.2010, 12:30
#3
Do$

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


Взять справочник по функциям AutoLISP и VilualLISP, в нем посмотреть функции "getpoint" и "command".
Do$ вне форума  
 
Автор темы   Непрочитано 14.01.2010, 12:34
#4
Aндрeй


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Взять справочник по функциям AutoLISP и VilualLISP, в нем посмотреть функции "getpoint" и "command".
Так, getpoint ясно, считываются координаты, затем можно использовать расстоянии по x в качестве длинны, которую необходимо поделить на равные части.
С рисованием тоже более менее понятно.
А как выполнить выполнение деления полученной длинны с условием?
Aндрeй вне форума  
 
Непрочитано 14.01.2010, 12:37
#5
Елпанов Евгений

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


Цитата:
Сообщение от Aндрeй Посмотреть сообщение
А как выполнить выполнение деления полученной длинны с условием?
смотри функции с условным выполнением: if, cond, while
и разбор самих условий: and, or, >, <, >=, <=
для начала более, чем достаточно.
удачи!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 14.01.2010, 12:54
#6
Do$

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


... и математические функции +, -, /, *
А так как координаты точки выдаются в виде списка, то понадобятся еще функции car, cadr, caddr...
Во вложении уроки по AutoLISP где пошагово объясняется, как писать такие простенькие программки...
Вложения
Тип файла: rar Обучение AutoLISP в восьми уроках.rar (26.0 Кб, 240 просмотров)
Do$ вне форума  
 
Непрочитано 14.01.2010, 13:40
#7
VVA

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


Aндрeй, В твоем случае лучше, наверное, будет использовать связку GETPOINT+ GETCORNER
Код:
[Выделить все]
(initget 1)
(setq pt1 (getpoint "\nПервая точка:"))
(initget 1)
(setq pt2 (GETCORNER pt1 "\nВторая точка:"))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.01.2010, 15:06
#8
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,508


можно и координату середины окна высчитать и той же полилинией нарисовать
Рyslan вне форума  
 
Непрочитано 20.01.2010, 08:05
#9
detrah


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


Я таку прогу писал несколько лет назад. Там много типов переплётов (около 10). Есть возможность указания ширины перплётов.
Потом сделал "автоокно", где можно было указывать количество одинаковых ячеек переплётов по ширине/высоте.

Соотношение размеров переплётов задавалось в lisp-коде.
Миниатюры
Нажмите на изображение для увеличения
Название: 0кна.JPG
Просмотров: 213
Размер:	16.9 Кб
ID:	32117  
detrah вне форума  
 
Автор темы   Непрочитано 23.01.2010, 21:29
#10
Aндрeй


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


detrah А как прикрутить диалоговые окна?

Рyslan Так там не только пополам... Делить надо... И округлять! С FIX вроде все получается!

VVA GETCORNER - то что нужно!
А зачем используется (initget 1)?

Do$ Спасибо за мурзилку! Все коротко, понятно да еще с элементами повторения!

В общем, всем спасибо за поддержку!

Последний раз редактировалось Aндрeй, 23.01.2010 в 21:38.
Aндрeй вне форума  
 
Непрочитано 26.01.2010, 10:17
#11
detrah


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


Цитата:
Сообщение от Aндрeй Посмотреть сообщение
detrah А как прикрутить диалоговые окна?
У-у-у-ффф! Ну и вопросик! Читаем книгу Полещука "Визуал лисп и секреты адаптации автокад"...

Короче, в двух словах не рассказать
detrah вне форума  
 
Автор темы   Непрочитано 26.01.2010, 13:48
#12
Aндрeй


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


Цитата:
Сообщение от detrah Посмотреть сообщение
У-у-у-ффф! Ну и вопросик! Читаем книгу Полещука "Визуал лисп и секреты адаптации автокад"...

Короче, в двух словах не рассказать
Ну хотя бы намек.
dcl?
Aндрeй вне форума  
 
Непрочитано 26.01.2010, 14:03
#13
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Только что написал в соседней очень похожей теме, повторюсь.
Вспомнил знаменитую тему "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)"


>Андрей внимательно прочитайте, думаю многое проясниться
http://forum.dwg.ru/showthread.php?t=22894
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 24.06.2011, 14:37
#14
kontrR


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


Давно пользуюсь вот таким-
Код:
[Выделить все]
 ;Окно двустворчатое на фасаде. 

(defun C:FOK2 ()
(setvar "CMDECHO" 0)
(command "_layer" "s" "okn" "")
     
     (setq D ($getdist "\nТолщина переплета:" 60 P1))


         
(command "_osnap" "int")

           (setq P1 (getpoint "\nЛевая нижняя точка проема:"))
           (setq P3 (getpoint P1 "\nПравая верхняя точка проема:"))

 (setq P2 (list  (car P1) (cadr P3)))

(command "_osnap" "none")

           (setq A (angle P1 P2))
           (setq AA (angle P2 P3))

           (setq H (distance P1 P2))
           (setq L (distance P2 P3))
          
(setq P11 (polar P1 A D ))
(setq P21 (polar P11 AA D ))
(setq P12 (polar P1 A (- H D) ))
(setq P22 (polar P12 AA (- (/ L 2) (* 0.5 D))))
(setq P31 (polar P11 AA (+ (/ L 2) (* 0.5 D))))
(setq P32 (polar P12 AA (- L D) ))


(command "_rectang"  P1 P3 "")
(command "_rectang"  P21 P22 "")
(command "_rectang"  P31 P32 "")

(command "_OSNAP" "int")
(princ)
)


;+++++++++++++++++++++++++++++++++++++FOK3.lsp++++++++++++++++++++++++++++++++++++
                         ;Окно трехстворчатое на фасаде.

(defun C:FOK3 ()
(setvar "CMDECHO" 0)
(command "_layer" "s" "okn" "")
     
     (setq D ($getdist "\nТолщина переплета:" 60 P1))


         
(command "_osnap" "int")

           (setq P1 (getpoint "\nЛевая нижняя точка проема:"))
           (setq P3 (getpoint P1 "\nПравая верхняя точка проема:"))

 (setq P2 (list  (car P1) (cadr P3)))

(command "_osnap" "none")

           (setq A (angle P1 P2))
           (setq AA (angle P2 P3))

           (setq H (distance P1 P2))
           (setq L (distance P2 P3))
          
(setq P11 (polar P1 A D ))
(setq P21 (polar P11 AA D ))
(setq P12 (polar P1 A (- H D) ))
(setq P22 (polar P12 AA (- (/ L 3) (* 0.5 D))))


(setq P31 (polar P11 AA (+ (* (/ L 3) 2) (* 0.5 D))))
(setq P32 (polar P12 AA (- L D) ))

(setq P41 (polar P11 AA (+ (/ L 3) (* 0.5 D))))
(setq P42 (polar P12 AA (- (* (/ L 3) 2) (* 0.5 D))))


(command "_rectang"  P1 P3 "")
(command "_rectang"  P21 P22 "")
(command "_rectang"  P31 P32 "")
(command "_rectang"  P41 P42 "")

(command "_OSNAP" "int")
(princ)
)
kontrR вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как с помощью LISP нарисовать окно линиями?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 ввода + ДГК + ИБП, как всё увязатьс помощью АВР Mr.Andersen Инженерные сети 32 13.10.2009 17:51
Как нарисовать с помощью SW кнопки, индикацию (светодиоды), экранчик? Оленька SolidWorks 6 04.10.2009 10:00
Как можно из LISP запросить у юзера выделить произвольные элементы и затем вызвать аналог WMFOUT для сохранения их в изображении? lexluther LISP 4 12.08.2009 11:44
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
Как вызвать окно AutoStack Properties в Mtext Sel AutoCAD 3 22.11.2005 17:26