Денис Флюстиков
размещено: 30 Июля 2006
Отрисовка линий разрыва (обрыва) трех видов (криволинейный, линейный, цилиндрический)
"Break_Den" от 30.07.06:
1.Отказался от автоматической обрезки по двум точкам внутри линий разрыва, т.к. с 2006 ACAD'а не требуется выбирать каждый обрезаемый объект (есть быстрый выбор рамкой), а часто приходится рисовать двухсторонний обрыв;
2.Переход в режим рисования обрыва по пробелу или правым кликом (ранее по "ESC");
3.Ввел зависимость величины линейного зигзага, по умолчанию от DIMSCALE;
4.Возможность задать величину выноса линий линейного разрыва за объект.
0.1 МБ
СКАЧАТЬ
Комментарии
Авторизоваться
Например, DIMSCALE:
;******************* СОХРАНЕНИЕ СИСТЕМНЫХ ПЕРЕМЕННЫХ *********************
; Store system variables
(defun MODES (a)
(setq MLST '())
(repeat (length a)
(setq MLST (append MLST (list (list (car a) (getvar (car a))))))
(setq a (cdr a)))
)
; Сброс значений системных переменных
(defun MODER ()
(repeat (length MLST)
(setvar (caar MLST) (cadar MLST))
(setq MLST (cdr MLST))
)
)
Отрисовка ФИГУРНЫХ СКОБОК
;********************** ОСНОВНАЯ ПРОГРАММА **************************
(defun C:RECT-FIG ()
(modes '("OSMODE" "ORTHOMODE"))
(setq p1 (GETPOINT "nУкажите первую точку: "))
(setq p2 (GETPOINT p1"nУкажите вторую точку: "))
(setvar "OSMODE" 0)
(setq dist (distance p1 p2))
(setq dist1 (/ dist 2))
(setq ang (angle p1 p2))
(setq ang1 (+ ang (* 0.5 pi)))
(setq ang2 (- ang (* 1 pi)))
(setq RASST (/ (getvar "DIMSCALE") 1 ))
(setq RASST1 (/ RASST 4))
(setq t1 (polar p1 ang1 (+ 0 RASST1)))
(setq p3 (polar t1 ang1 (+ 0 RASST)))
(setq p4 (polar p3 ang (+ 0 RASST)))
(setq p6 (polar p3 ang (+ 0 DIST1)))
(setq p5 (polar p6 ang2 (+ 0 RASST)))
(setq p7 (polar p6 ang1 (+ 0 RASST)))
(setq t2 (polar p7 ang1 (+ 0 RASST1)))
(setq p51 (polar p6 ang (+ 0 RASST)))
(setq p31 (polar P3 ang (+ 0 DIST)))
(setq p41 (polar P31 ang2 (+ 0 RASST)))
(setq t11 (polar p2 ang1 (+ 0 RASST1)))
(command "_PLINE" p1 t1 "Д" p4 "Л" p5 "Д" p7 "Л" T2 P7 "Д" P51 "Л" P41 "Д" T11 "Л" P2 "")
(moder)
)
Писал очень давно (под ACAD10) и "по типу", т.к. ЛИСП почти не знаю, но работает, и в разных масштабах
bb "К")
Строчку:
(if (eq 0 scale)(setq scale 1))
СПАСИБО!
но в таком варианте у меня работает стабильнее при выходе правым кликом без отрисови второй линии обрыва.
.....
(vl-cmdf "_.ucs" "move" aa5)
(setq nk_tmp_point (list 0 0 0))
(setq ang (vl-cmdf "_.copy" aa4 "" nk_tmp_point pause))
(princ "nВыберите обрезаемый объект <Выход>:")
(if (and ang (equal nk_tmp_point (getvar "lastpoint") 0.000001))(progn
(setq ang nil)
(command "_.undo" 1)))
(vl-cmdf "_.ucs" "prev")
......
Без переноса системы координат команда "COPY" добавдяла линию обрыва используюя в качестве вектора, на который происходит смещение расстояние между началом координат и указанной точеой (аа5). Наблюдалось наиболе часто на линейном и цилинддрическом обрывах. На криволинейном не заментил.
(setq ang (vl-cmdf "_.copy" aa4 "" nk_tmp_point pause)
nk_tmp_point nil)
Теперь пользуюсь только этим обрывом
(размер немножко уменьшил).