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


(defun c:PRAC3_PRO ( / old_osnap old_dyn dx dy i cur_x cur_y x y t_val)
  ;; Отключаем привязки и динамический ввод для абсолютной защиты от сбоев
  (setq old_osnap (getvar "OSMODE"))
  (setq old_dyn (getvar "DYNMODE"))
  (setvar "OSMODE" 0)
  (setvar "DYNMODE" 0)

  ;; =========================================================
  ;; ЗАДАНИЕ 2: Лекальная кривая (Слева)
  ;; =========================================================
  (setq dx 0 dy 0)

  ;; Осевые линии и прямоугольники построения
  (command "_.LINE" (list dx (- dy 110)) (list dx (+ dy 110)) "")
  (command "_.LINE" (list (- dx 10) dy) (list (+ dx 60) dy) "")
  (command "_.LINE" (list dx dy) (list dx (+ dy 100)) (list (+ dx 50) (+ dy 100)) (list (+ dx 50) dy) "")
  (command "_.LINE" (list dx dy) (list dx (- dy 100)) (list (+ dx 50) (- dy 100)) (list (+ dx 50) dy) "")

  ;; Лучи касательных
  (setq i 1)
  (while (<= i 5)
    (setq cur_x (* i 10.0))
    (setq cur_y (* i 20.0))
    (command "_.LINE" (list dx dy) (list (+ dx cur_x) (+ dy 100)) "")
    (command "_.LINE" (list dx (+ dy cur_y)) (list (+ dx 50) (+ dy cur_y)) "")
    (command "_.LINE" (list dx dy) (list (+ dx cur_x) (- dy 100)) "")
    (command "_.LINE" (list dx (- dy cur_y)) (list (+ dx 50) (- dy cur_y)) "")
    (setq i (1+ i))
  )

  ;; Математическое построение верхней параболы (красная)
  (command "_.COLOR" "1")
  (command "_.PLINE")
  (setq x 0.0)
  (while (<= x 50.0)
    (setq y (* 100.0 (/ (* x x) 2500.0)))
    (command (list (+ dx x) (+ dy y)))
    (setq x (+ x 1.0)) ; Шаг 1 мм для идеальной гладкости
  )
  (command "")

  ;; Математическое построение нижней параболы (красная)
  (command "_.PLINE")
  (setq x 0.0)
  (while (<= x 50.0)
    (setq y (* -100.0 (/ (* x x) 2500.0)))
    (command (list (+ dx x) (+ dy y)))
    (setq x (+ x 1.0))
  )
  (command "")
  (command "_.COLOR" "_BYLAYER")

  ;; =========================================================
  ;; ЗАДАНИЕ 1: Кронштейн (Справа)
  ;; =========================================================
  (setq dx 120 dy -50) ; Смещаем второй чертеж правее

  ;; 1. Левая стойка и вырезы
  (command "_.LINE" (list dx dy) (list dx (+ dy 85)) (list (+ dx 12) (+ dy 85)) (list (+ dx 12) (+ dy 55)) (list (+ dx 9) (+ dy 55)) (list (+ dx 9) (+ dy 35)) (list (+ dx 12) (+ dy 35)) (list (+ dx 12) (+ dy 22)) "")

  ;; 2. Внутреннее скругление R10 (переход от стойки к площадке)
  (command "_.ARC" "_C" (list (+ dx 22) (+ dy 22)) (list (+ dx 12) (+ dy 22)) (list (+ dx 22) (+ dy 12)))

  ;; 3. Горизонтальная площадка
  (command "_.LINE" (list (+ dx 22) (+ dy 12)) (list (+ dx 118) (+ dy 12)) "")
  (command "_.LINE" (list dx dy) (list (+ dx 160) dy) "")

  ;; 4. Внешнее скругление R12 (правый нижний угол)
  (command "_.ARC" "_C" (list (+ dx 160) (+ dy 12)) (list (+ dx 160) dy) (list (+ dx 172) (+ dy 12)))

  ;; 5. Цилиндрическая бобышка Ø54
  (command "_.LINE" (list (+ dx 118) (+ dy 12)) (list (+ dx 118) (+ dy 44)) (list (+ dx 172) (+ dy 44)) (list (+ dx 172) (+ dy 12)) "")
  (command "_.LINE" (list (+ dx 145) (+ dy -5)) (list (+ dx 145) (+ dy 55)) "") ; Осевая линия

  ;; 6. Отверстие (Правая часть - Разрез)
  (command "_.LINE" (list (+ dx 145) (+ dy 44)) (list (+ dx 163) (+ dy 44)) (list (+ dx 163) (+ dy 22)) (list (+ dx 157) (+ dy 22)) (list (+ dx 157) (+ dy 12)) (list (+ dx 145) (+ dy 8)) "")
  (command "_.LINE" (list (+ dx 145) (+ dy 8)) (list (+ dx 145) (+ dy 44)) "") 

  ;; 7. Отверстие (Левая часть - Невидимый контур)
  (command "_.LINE" (list (+ dx 127) (+ dy 44)) (list (+ dx 127) (+ dy 22)) (list (+ dx 133) (+ dy 22)) (list (+ dx 133) (+ dy 12)) (list (+ dx 145) (+ dy 8)) "")

  ;; 8. Параболическое ребро жесткости (генерация точками)
  (command "_.PLINE")
  (setq x 12.0)
  (while (<= x 118.0)
    (setq t_val (/ (- 118.0 x) 106.0))
    (setq y (+ 12.0 (* 23.0 t_val t_val)))
    (command (list (+ dx x) (+ dy y)))
    (setq x (+ x 1.0))
  )
  (command (list (+ dx 118) (+ dy 12)))
  (command "")

  ;; Возвращаем настройки автокада
  (setvar "OSMODE" old_osnap)
  (setvar "DYNMODE" old_dyn)
  (command "_.ZOOM" "_E")
  
  (princ "\nЗадание построено безопасным методом! Вызови команду PRAC3_PRO.")
  (princ)
)
(c:PRAC3_PRO)