Загрузка данных


(defun c:DETAL3 ( / osmode_old make-line make-circle make-dashed-v make-axis-v make-axis-h
make-text make-arrow draw-dim-h draw-dim-v draw-hatch-strip
c x1 x2 y step dx_rib )
; STREAMING_CHUNK:Initializing environment variables and settings...
(setq osmode_old (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setvar "LWDISPLAY" 1) ; Включаем отображение толщины линий по ГОСТ
;; Создаем чертежный текстовый стиль GOST_ISOCPEUR с наклоном 15 градусов
(if (not (tblsearch "STYLE" "GOST_ISOCPEUR"))
(entmakex (list '(0 . "STYLE")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbTextStyleTableRecord")
'(2 . "GOST_ISOCPEUR")
'(70 . 0)
'(40 . 0.0)
'(41 . 1.0)
(cons 50 (* pi (/ 15.0 180.0)))
'(71 . 0)
'(3 . "isocpeur.ttf")
'(4 . "")))
)
; STREAMING_CHUNK:Defining primitive drawing functions...
;; Основная или тонкая сплошная линия (lw: 50 = 0.50 мм, 18 = 0.18 мм)
(defun make-line (x1 y1 x2 y2 lw col)
(entmakex (list '(0 . "LINE")
(list 10 x1 y1 0.0)
(list 11 x2 y2 0.0)
(cons 62 col)
(cons 370 lw)))
)
;; Окружность с заданным весом линии
(defun make-circle (cx cy r lw)
(entmakex (list '(0 . "CIRCLE")
(list 10 cx cy 0.0)
(cons 40 r)
'(62 . 256)
(cons 370 lw)))
)
; STREAMING_CHUNK:Defining dashed and centerline generators...
;; Вертикальная штриховая линия (невидимый контур)
(defun make-dashed-v (x y1 y2 / cur yn)
(setq cur y1)
(while (< cur y2)
(setq yn (min (+ cur 5.5) y2))
(make-line x cur x yn 18 256)
(setq cur (+ cur 8.0))
)
)
;; Вертикальная штрихпунктирная осевая линия
(defun make-axis-v (x y1 y2 / cur yn)
(setq cur y1)
(while (< cur y2)
(setq yn (min (+ cur 12.0) y2))
(make-line x cur x yn 18 30)
(if (< (+ cur 14.5) y2)
(make-line x (+ cur 14.0) x (min (+ cur 15.5) y2) 18 30)
)
(setq cur (+ cur 17.5))
)
)
;; Горизонтальная штрихпунктирная осевая линия
(defun make-axis-h (x1 x2 y / cur xn)
(setq cur x1)
(while (< cur x2)
(setq xn (min (+ cur 12.0) x2))
(make-line cur y xn y 18 30)
(if (< (+ cur 14.5) x2)
(make-line (+ cur 14.0) y (min (+ cur 15.5) x2) y 18 30)
)
(setq cur (+ cur 17.5))
)
)
; STREAMING_CHUNK:Defining dimensioning and hatching helpers...
;; Текст с наклоном по ГОСТ
(defun make-text (x y txt hgt rot)
(entmakex (list '(0 . "TEXT")
(list 10 x y 0.0)
(cons 40 hgt)
(cons 1 txt)
(cons 50 rot)
'(51 . 0.261799) ; Наклон 15 градусов
'(72 . 1)
'(73 . 2)
(list 11 x y 0.0)
'(7 . "GOST_ISOCPEUR")
'(62 . 256)
'(370 . 18)))
)
;; Стрелка размерной линии по ГОСТ
(defun make-arrow (x y ang / a1 a2 len)
(setq len 3.5)
(setq a1 (+ ang (* pi (/ 165.0 180.0))))
(setq a2 (- ang (* pi (/ 165.0 180.0))))
(make-line x y (+ x (* len (cos a1))) (+ y (* len (sin a1))) 18 256)
(make-line x y (+ x (* len (cos a2))) (+ y (* len (sin a2))) 18 256)
)
;; Горизонтальный размер
(defun draw-dim-h (x1 y1 x2 y2 ydim txt / xm)
(make-line x1 y1 x1 (+ ydim (if (> ydim y1) 2.0 -2.0)) 18 256)
(make-line x2 y2 x2 (+ ydim (if (> ydim y2) 2.0 -2.0)) 18 256)
(make-line x1 ydim x2 ydim 18 256)
(make-arrow x1 ydim pi)
(make-arrow x2 ydim 0.0)
(setq xm (* 0.5 (+ x1 x2)))
(make-text xm (+ ydim 2.5) txt 3.5 0.0)
)
;; Вертикальный размер
(defun draw-dim-v (x1 y1 x2 y2 xdim txt / ym)
(make-line x1 y1 (+ xdim (if (> xdim x1) 2.0 -2.0)) y1 18 256)
(make-line x2 y2 (+ xdim (if (> xdim x2) 2.0 -2.0)) y2 18 256)
(make-line xdim y1 xdim y2 18 256)
(make-arrow xdim y1 (* 1.5 pi))
(make-arrow xdim y2 (* 0.5 pi))
(setq ym (* 0.5 (+ y1 y2)))
(make-text (- xdim 2.5) ym txt 3.5 (* 0.5 pi))
)
;; Аналитическая штриховка прямоугольной полосы под углом 45 градусов
(defun draw-hatch-strip (xmin xmax ymin ymax c_val / xs xe)
(setq xs (max xmin (- ymin c_val)))
(setq xe (min xmax (- ymax c_val)))
(if (< xs xe)
(make-line xs (+ xs c_val) xe (+ xe c_val) 18 256)
)
)
; STREAMING_CHUNK:Rendering Front View contour and section...
;; === 1. ГЛАВНЫЙ ВИД (СВЕРХУ СЛЕВА, ЦЕНТР В 0,0) ===
;; Основание
(make-line -50.0 0.0 -25.0 0.0 50 256)
(make-line -25.0 0.0 -25.0 10.0 50 256)
(make-line -25.0 10.0 25.0 10.0 50 256)
(make-line 25.0 10.0 25.0 0.0 50 256)
(make-line 25.0 0.0 50.0 0.0 50 256)
(make-line -50.0 0.0 -50.0 25.0 50 256)
(make-line 50.0 0.0 50.0 25.0 50 256)
(make-line -50.0 25.0 0.0 25.0 50 256)