Почему так работает "_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) )
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д