Загрузка данных
(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)
(make-line 20.0 25.0 50.0 25.0 50 256)
;; Центральный цилиндр и отверстие в разрезе
(make-line -20.0 25.0 -20.0 80.0 50 256)
(make-line 20.0 25.0 20.0 80.0 50 256)
(make-line -20.0 80.0 20.0 80.0 50 256)
(make-line 10.0 10.0 10.0 80.0 50 256)
;; Ребра жесткости
(make-line -45.0 25.0 -20.0 65.0 50 256)
(make-line 45.0 25.0 20.0 65.0 50 256)
;; Осевая линия главного вида
(make-axis-v 0.0 -3.0 83.0)
;; Штриховка разреза на главном виде (шаг 3.5 мм)
(setq c -55.0)
(while (<= c 75.0)
(draw-hatch-strip 10.0 20.0 10.0 80.0 c)
(draw-hatch-strip 20.0 25.0 10.0 25.0 c)
(draw-hatch-strip 25.0 50.0 0.0 25.0 c)
(setq c (+ c 3.5))
)
; STREAMING_CHUNK:Rendering Top View geometry and hidden lines...
;; === 2. ВИД СВЕРХУ (СНИЗУ СЛЕВА, ЦЕНТР В 0,-70) ===
;; Прямоугольник основания 100х60
(make-line -50.0 -100.0 50.0 -100.0 50 256)
(make-line 50.0 -100.0 50.0 -40.0 50 256)
(make-line 50.0 -40.0 -50.0 -40.0 50 256)
(make-line -50.0 -40.0 -50.0 -100.0 50 256)
;; Окружности цилиндра и отверстия
(make-circle 0.0 -70.0 20.0 50)
(make-circle 0.0 -70.0 10.0 50)
;; Ребра жесткости (ширина 12, длина 90, стыковка с R20)
(setq dx_rib (sqrt (- 400.0 36.0))) ; 19.078784
(make-line -45.0 -76.0 -45.0 -64.0 50 256)
(make-line -45.0 -64.0 (- dx_rib) -64.0 50 256)
(make-line -45.0 -76.0 (- dx_rib) -76.0 50 256)
(make-line 45.0 -76.0 45.0 -64.0 50 256)
(make-line dx_rib -64.0 45.0 -64.0 50 256)
(make-line dx_rib -76.0 45.0 -76.0 50 256)
;; Штриховые линии нижнего паза
(make-dashed-v -25.0 -100.0 -40.0)
(make-dashed-v 25.0 -100.0 -40.0)
;; Осевые линии вида сверху
(make-axis-h -24.0 24.0 -70.0)
(make-axis-v 0.0 -94.0 -46.0)
; STREAMING_CHUNK:Rendering Side View contour and section...
;; === 3. ВИД СЛЕВА (СВЕРХУ СПРАВА, ОСТЬ X = 115) ===
;; Основание
(make-line 85.0 0.0 145.0 0.0 50 256)
(make-line 85.0 0.0 85.0 25.0 50 256)
(make-line 145.0 0.0 145.0 25.0 50 256)
(make-line 85.0 25.0 115.0 25.0 50 256)
(make-line 135.0 25.0 145.0 25.0 50 256)
(make-line 115.0 10.0 145.0 10.0 50 256)
;; Цилиндр, ребро и разрез
(make-line 95.0 25.0 95.0 80.0 50 256)
(make-line 135.0 25.0 135.0 80.0 50 256)
(make-line 95.0 80.0 135.0 80.0 50 256)
(make-line 109.0 25.0 109.0 65.0 50 256)
(make-line 109.0 65.0 115.0 65.0 50 256)
(make-line 121.0 10.0 121.0 80.0 50 256)
;; Осевая линия вида слева
(make-axis-v 115.0 -3.0 83.0)
;; Штриховка разреза на виде слева
(setq c -140.0)
(while (<= c -35.0)
(draw-hatch-strip 121.0 135.0 10.0 80.0 c)
(draw-hatch-strip 135.0 145.0 10.0 25.0 c)
(setq c (+ c 3.5))
)
; STREAMING_CHUNK:Placing all GOST dimensions across the 3 views...
;; === 4. НАНЕСЕНИЕ ВСЕХ РАЗМЕРОВ (1 В 1 КАК НА ФОТО) ===
;; Размеры Главного вида
(draw-dim-h -20.0 80.0 20.0 80.0 91.0 "%%c40")
(draw-dim-v -20.0 65.0 -50.0 25.0 -62.0 "40")
(draw-dim-v -50.0 25.0 -50.0 0.0 -62.0 "25")
(draw-dim-h -25.0 0.0 25.0 0.0 -8.0 "50")
;; Размеры Вида сверху
(draw-dim-v -50.0 -40.0 -50.0 -100.0 -65.0 "60")
;; Узкий размер 12 (ребро) с внешними стрелками
(make-line -45.0 -64.0 -58.0 -64.0 18 256)
(make-line -45.0 -76.0 -58.0 -76.0 18 256)
(make-line -56.0 -58.0 -56.0 -82.0 18 256)
(make-arrow -56.0 -64.0 (* 0.5 pi))
(make-arrow -56.0 -76.0 (* 1.5 pi))
(make-text -58.5 -70.0 "12" 3.5 (* 0.5 pi))
(draw-dim-h -45.0 -76.0 45.0 -76.0 -112.0 "90")
(draw-dim-h -50.0 -100.0 50.0 -100.0 -121.0 "100")
;; Размеры Вида слева
;; Верхний размер Ф12 с полкой и внешними стрелками
(make-line 115.0 80.0 115.0 88.0 18 256)
(make-line 121.0 80.0 121.0 88.0 18 256)
(make-line 106.0 86.0 128.0 86.0 18 256)
(make-arrow 115.0 86.0 0.0)
(make-arrow 121.0 86.0 pi)
(make-text 111.0 89.0 "%%c12" 3.5 0.0)
;; Высота 80 и паз 10 справа
(draw-dim-v 135.0 80.0 145.0 0.0 165.0 "80")
(make-line 145.0 10.0 157.0 10.0 18 256)
(make-line 145.0 0.0 157.0 0.0 18 256)
(make-line 155.0 16.0 155.0 -6.0 18 256)
(make-arrow 155.0 10.0 (* 0.5 pi))
(make-arrow 155.0 0.0 (* 1.5 pi))
(make-text 152.5 5.0 "10" 3.5 (* 0.5 pi))
; STREAMING_CHUNK:Finalizing viewport and restoring settings...
(setvar "OSMODE" osmode_old)
(command "_.zoom" "_E")
(princ "\n*** Все 3 вида со штриховкой и размерами построены 1 в 1! ***")
(princ)
)