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


(defun c:CYLINDER ( / norm-ang make-arc make-line make-circle make-axis make-axis-circle
pi osmode_old 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
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)
(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
)
(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: Строгий математический расчет координатных точек...
;; Нижние отверстия лежат на осевой окружности R50 (Ф100)
(setq pitch_r 50.0)
(setq hole_x 22.0)
(setq hole_y (- (sqrt (- (* pitch_r pitch_r) (* hole_x hole_x))))) ; -44.899888
;; Верхние галтели (R10)
(setq top_f_x 30.0)
(setq top_f_y (sqrt (- 3600.0 900.0))) ; 51.9615
;; Центры нижних галтелей R6 (решение уравнений касательности)
(setq K_val 5107.0)
(setq c_k (/ K_val 44.0))
(setq c_m (/ (* 2.0 hole_y) 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) 3136.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))) ; -35.7538
(setq bot_f_x (+ c_k (* c_m bot_f_y))) ; 43.0981
; 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 30.0)))
(setq a_main_L_start (norm-ang (atan top_f_y -30.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 bot_f_y bot_f_x)))
(setq a_bot_f_R_end (norm-ang (atan (- hole_y bot_f_y) (- hole_x bot_f_x))))
(setq a_bot_f_L_start (norm-ang (atan (- hole_y bot_f_y) (- (- hole_x) (- bot_f_x)))))
(setq a_bot_f_L_end (norm-ang (atan bot_f_y (- bot_f_x))))
;; Углы нижних "ушек" R17
(setq a_bot_leg_R_start (norm-ang (atan (- 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 (- hole_y) hole_x)))
;; Углы центрального нижнего выреза R33
(setq a_bot_cut_start (norm-ang (atan hole_y (- hole_x))))
(setq a_bot_cut_end (norm-ang (atan hole_y hole_x)))
; STREAMING_CHUNK: Отрисовка наружного контура детали...
;; Верхняя часть и шея
(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)
;; Главное тело
(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)
;; Галтели и нижняя часть ушек
(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)
(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)
;; Центральный вырез (идеально касается ушек)
(make-arc 0.0 0.0 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 и Ф60
(make-circle 0.0 0.0 14.5 50)
(make-circle 0.0 0.0 30.0 50)
;; Нижние отверстия Ф18
(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 -70)
(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))
;; Делительная окружность нижних отверстий (R50)
(make-axis-circle 0.0 0.0 50.0)
; STREAMING_CHUNK: Финализация...
(setvar "OSMODE" osmode_old)
(command "_.zoom" "_E")
(princ "\n*** Идеальный 'Цилиндр' готов! ***")
(princ)
)