Загрузка данных
(defun c:CYLINDER ( / norm-ang make-arc make-line make-circle make-axis make-axis-circle
pi osmode_old hole_dist hole_x pitch_r hole_y top_f_x top_f_y
K_val M_val c_k c_m A_q B_q C_q D_disc bot_f_y bot_f_x cut_r cut_c_y
a_top_neck_f_R_start a_top_neck_f_R_end a_top_neck_f_L_start a_top_neck_f_L_end
a_main_R_start a_main_R_end a_main_L_start a_main_L_end
a_bot_f_R_start a_bot_f_R_end a_bot_f_L_start a_bot_f_L_end
a_bot_leg_R_start a_bot_leg_R_end a_bot_leg_L_start a_bot_leg_L_end
a_bot_cut_start a_bot_cut_end )
; STREAMING_CHUNK: Подготовка настроек и среды...
(setq osmode_old (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setvar "LWDISPLAY" 1) ; Включаем видимость толщины линий
(setq pi 3.141592653589793)
;; Функция нормализации угла (от 0 до 2 PI)
(defun norm-ang (a)
(while (< a 0.0) (setq a (+ a (* 2.0 pi))))
(while (>= a (* 2.0 pi)) (setq a (- a (* 2.0 pi))))
a
)
; STREAMING_CHUNK: Базовые функции отрисовки...
(defun make-arc (cx cy r a1 a2 lw)
(entmakex (list '(0 . "ARC") (list 10 cx cy 0.0) (cons 40 r)
(cons 50 a1) (cons 51 a2) (cons 370 lw)))
)
(defun make-line (x1 y1 x2 y2 lw)
(entmakex (list '(0 . "LINE") (list 10 x1 y1 0.0) (list 11 x2 y2 0.0) (cons 370 lw)))
)
(defun make-circle (cx cy r lw)
(entmakex (list '(0 . "CIRCLE") (list 10 cx cy 0.0) (cons 40 r) (cons 370 lw)))
)
(defun make-axis (x1 y1 x2 y2)
(entmakex (list '(0 . "LINE") (list 10 x1 y1 0.0) (list 11 x2 y2 0.0) '(62 . 1) '(370 . 0)))
)
(defun make-axis-circle (cx cy r)
(entmakex (list '(0 . "CIRCLE") (list 10 cx cy 0.0) (cons 40 r) '(62 . 1) '(370 . 0)))
)
; STREAMING_CHUNK: Сложные алгебраические расчеты геометрии...
;; Координаты нижних отверстий (лежат на делительной окружности Ф60)
(setq hole_dist 44.0)
(setq hole_x (/ hole_dist 2.0)) ; 22.0
(setq pitch_r 30.0)
(setq hole_y (- (sqrt (- (* pitch_r pitch_r) (* hole_x hole_x))))) ; ~ -20.396
;; Верхние галтели (R10) сопрягающие шейку и круг Ф100
(setq top_f_x 30.0)
(setq top_f_y (sqrt (- 3600.0 900.0))) ; ~ 51.961
;; Расчет центров нижних галтелей R6 (решение системы квадратных уравнений для касательных)
(setq K_val 2307.0)
(setq M_val (* -2.0 hole_y))
(setq c_k (/ K_val 44.0))
(setq c_m (/ M_val 44.0))
(setq A_q (+ 1.0 (* c_m c_m)))
(setq B_q (* 2.0 c_k c_m))
(setq C_q (- (* c_k c_k) 1936.0))
(setq D_disc (- (* B_q B_q) (* 4.0 A_q C_q)))
(setq bot_f_y (/ (+ (- B_q) (sqrt D_disc)) (* 2.0 A_q))) ; ~ -10.453
(setq bot_f_x (+ c_k (* c_m bot_f_y))) ; ~ 42.747
;; Центр нижнего выреза R33
(setq cut_r 33.0)
(setq cut_c_y (+ hole_y (sqrt 2016.0))) ; 50^2 - 22^2 = 2016 -> ~ 24.503
; STREAMING_CHUNK: Расчет углов для всех дуг контура...
;; Углы верхних галтелей
(setq a_top_neck_f_R_start pi)
(setq a_top_neck_f_R_end (norm-ang (atan (- top_f_y) -30.0)))
(setq a_top_neck_f_L_start (norm-ang (atan (- top_f_y) 30.0)))
(setq a_top_neck_f_L_end 0.0)
;; Углы главного внешнего круга Ф100
(setq a_main_R_start (norm-ang (atan bot_f_y bot_f_x)))
(setq a_main_R_end (norm-ang (atan top_f_y 25.0)))
(setq a_main_L_start (norm-ang (atan top_f_y -25.0)))
(setq a_main_L_end (norm-ang (atan bot_f_y (- bot_f_x))))
;; Углы нижних галтелей R6
(setq a_bot_f_R_start (norm-ang (atan (- hole_y bot_f_y) (- hole_x bot_f_x))))
(setq a_bot_f_R_end a_main_R_start)
(setq a_bot_f_L_start a_main_L_end)
(setq a_bot_f_L_end (norm-ang (atan (- hole_y bot_f_y) (- (- hole_x) (- bot_f_x)))))
;; Углы нижних боковых дуг R17
(setq a_bot_leg_R_start (norm-ang (atan (- cut_c_y hole_y) (- hole_x))))
(setq a_bot_leg_R_end (norm-ang (atan (- bot_f_y hole_y) (- bot_f_x hole_x))))
(setq a_bot_leg_L_start (norm-ang (atan (- bot_f_y hole_y) (- (- bot_f_x) (- hole_x)))))
(setq a_bot_leg_L_end (norm-ang (atan (- cut_c_y hole_y) hole_x)))
;; Углы нижнего выреза R33
(setq a_bot_cut_start (norm-ang (atan (- hole_y cut_c_y) (- hole_x))))
(setq a_bot_cut_end (norm-ang (atan (- hole_y cut_c_y) hole_x)))
; STREAMING_CHUNK: Отрисовка наружного контура (вес 0.50)...
;; Верхняя часть (голова)
(make-arc 0.0 75.0 20.0 0.0 pi 50)
(make-line -20.0 75.0 -20.0 top_f_y 50)
(make-line 20.0 75.0 20.0 top_f_y 50)
;; Верхние галтели
(make-arc -30.0 top_f_y 10.0 a_top_neck_f_L_start a_top_neck_f_L_end 50)
(make-arc 30.0 top_f_y 10.0 a_top_neck_f_R_start a_top_neck_f_R_end 50)
;; Главное тело (Ф100)
(make-arc 0.0 0.0 50.0 a_main_R_start a_main_R_end 50)
(make-arc 0.0 0.0 50.0 a_main_L_start a_main_L_end 50)
;; Нижние галтели (R6)
(make-arc bot_f_x bot_f_y 6.0 a_bot_f_R_start a_bot_f_R_end 50)
(make-arc (- bot_f_x) bot_f_y 6.0 a_bot_f_L_start a_bot_f_L_end 50)
;; Нижние дуги вокруг отверстий (R17)
(make-arc hole_x hole_y 17.0 a_bot_leg_R_start a_bot_leg_R_end 50)
(make-arc (- hole_x) hole_y 17.0 a_bot_leg_L_start a_bot_leg_L_end 50)
;; Центральный нижний вырез (R33)
(make-arc 0.0 cut_c_y 33.0 a_bot_cut_start a_bot_cut_end 50)
; STREAMING_CHUNK: Отрисовка внутренних отверстий и пазов...
;; Верхний продольный паз
(make-line -10.0 75.0 -10.0 41.0 50)
(make-line 10.0 75.0 10.0 41.0 50)
(make-arc 0.0 75.0 10.0 0.0 pi 50)
(make-arc 0.0 41.0 10.0 pi (* 2.0 pi) 50)
;; Центральное отверстие (Ф29 -> R14.5)
(make-circle 0.0 0.0 14.5 50)
;; Два нижних отверстия (Ф18 -> R9)
(make-circle hole_x hole_y 9.0 50)
(make-circle (- hole_x) hole_y 9.0 50)
; STREAMING_CHUNK: Добавление чертежных осей (Тонкие красные)...
;; Главные кресты
(make-axis 0 105 0 -45)
(make-axis -65 0 65 0)
;; Оси верхнего паза
(make-axis -30 75 30 75)
(make-axis -15 41 15 41)
;; Оси нижних отверстий
(make-axis -35 hole_y -8 hole_y)
(make-axis 8 hole_y 35 hole_y)
(make-axis hole_x (+ hole_y 15) hole_x (- hole_y 15))
(make-axis (- hole_x) (+ hole_y 15) (- hole_x) (- hole_y 15))
;; Делительная окружность для нижних отверстий (Ф60 -> R30)
(make-axis-circle 0.0 0.0 30.0)
; STREAMING_CHUNK: Финализация...
(setvar "OSMODE" osmode_old)
;; Центрируем вид на новой детали
(command "_.zoom" "_E")
(princ "\n*** Идеально точный 'Цилиндр' по ГОСТ построен! ***")
(princ)
)