Почему так работает "_line" ? - Lisp
Формулировка задачи:
Доброго всем времени суток!
Если я пишу
Задача нарисовать квадрат с сопряжением в углах =5
Листинг программы
- (defun c:my_point ()
- (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
- (setq p2 (polar p1 pi 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p2
- (setq p3 (polar p2 (/ (- pi) 2) 100)) ;
- (command "_line" p1 p2 "") ; ðèñóåì ëèíèþ 1
- (setq line1 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (command "_line" p2 p3 "") ; ðèñóåì ëèíèþ 2
- (setq line2 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (setvar "FILLETRAD" 10) ; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà
- ;(command "_Fillet" line1 line2) ; Ñîïðÿæåíèå
- )
(command "_line" p1 p2 p3 "")
то проблем нет, рисует горизонталь и далее перпендикулярно вниз. Все логично и как нужно, но если я рисую линии отдельно:(command "_line" p1 p2 "")
(command "_line" p2 p3 "")
то вторая (перпендикулярная) линия начинается из середины горизонтальной и идет под углом к точке p3. Что не так?
Решил эту проблему переставлением координат местами, в итоге с сопряжением снова не то что то..
Не могу понять почему?
Листинг программы
- (defun c:my_point ()
- (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
- (setq p2 (polar p1 pi 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p2
- (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p3
- (setq p4 (polar p3 0 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p3
- (command "_line" p1 p2 "") ; ðèñóåì ëèíèþ 1
- (setq line1 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (command "_line" p3 p2 "") ; ðèñóåì ëèíèþ 2
- (setq line2 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (command "_line" p4 p1 "") ; ðèñóåì ëèíèþ 1
- (setq line3 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (command "_line" p4 p3 "") ; ðèñóåì ëèíèþ 2
- (setq line4 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
- (setvar "FILLETRAD" 10) ; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà
- (command "_Fillet" line1 line2) ; Ñîïðÿæåíèå
- (command "_Fillet" line3 line4) ; Ñîïðÿæåíèå
- (command "_Fillet" line2 line3) ; Ñîïðÿæåíèå
- (command "_Fillet" line1 line4) ; Ñîïðÿæåíèå
- )
Решение задачи: «Почему так работает "_line" ?»
textual
Листинг программы
- (defun C:MYPOINT ( / *error* osm blm cme flt p1 p2 p3 p4 )
- (defun *error* (msg)
- ; Восстанавливаем системные переменные osmode , blipmode , cmdecho
- (setvar 'osmode osm)
- (setvar 'blipmode blm)
- (setvar 'cmdecho cme)
- (setvar 'filletrad flt)
- (princ)
- )
- ;; Запоминаем и обнуляем системные переменные osmode , blipmode , cmdecho
- (setq osm (getvar 'osmode))
- (setq blm (getvar 'blipmode))
- (setq cme (getvar 'cmdecho))
- (setq flt (getvar 'filletrad))
- ;; Задаем координаты точки p1
- (setq p1 (getpoint "\nВведите базовую точку:"))
- (setq p2 (polar p1 pi 100)) ; Задаем координаты точки p2
- (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Задаем координаты точки p3
- (setq p4 (polar p3 0 100)) ; Задаем координаты точки p3
- (setvar 'cmdecho 0)
- (setvar 'osmode 0)
- (setvar 'blipmode 0)
- (command "_line" p1 p2 "") ; рисуем линию 1
- (setq line1 (entlast)) ; Записываем имя объекта
- (command "_line" p2 p3 "") ; рисуем линию 2
- (setq line2 (entlast)) ; Записываем имя объекта
- (command "_line" p3 p4 "") ; рисуем линию 3
- (setq line3 (entlast)) ; Записываем имя объекта
- (command "_line" p4 p1 "") ; рисуем линию 4
- (setq line4 (entlast)) ; Записываем имя объекта
- (setvar 'filletrad 10) ; устанавливаем системную переменную радиуса
- (command "_Fillet" line1 line2) ; Сопряжение
- (command "_Fillet" line2 line3) ; Сопряжение
- (command "_Fillet" line3 line4) ; Сопряжение
- (command "_Fillet" line4 line1) ; Сопряжение
- (*error* nil)
- )
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д