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


import math


class PureDXFWriter:

    def __init__(self, filename):
        self.filename = filename
        self.entities = []

    def add_line(self, x1, y1, x2, y2, layer="0"):
        self.entities.append(
            f"0\nLINE\n8\n{layer}\n10\n{x1:.3f}\n20\n{y1:.3f}\n30\n0.0\n11\n{x2:.3f}\n21\n{y2:.3f}\n31\n0.0\n"
        )

    def add_circle(self, cx, cy, r, layer="0"):
        self.entities.append(
            f"0\nCIRCLE\n8\n{layer}\n10\n{cx:.3f}\n20\n{cy:.3f}\n30\n0.0\n40\n{r:.3f}\n"
        )

    def add_arc(self, cx, cy, r, start_deg, end_deg, layer="0"):
        self.entities.append(
            f"0\nARC\n8\n{layer}\n10\n{cx:.3f}\n20\n{cy:.3f}\n30\n0.0\n40\n{r:.3f}\n50\n{start_deg:.3f}\n51\n{end_deg:.3f}\n"
        )

    def save(self):
        with open(self.filename, "w", encoding="utf-8") as f:
            f.write("0\nSECTION\n2\nENTITIES\n")
            for e in self.entities:
                f.write(e)
            f.write("0\nENDSEC\n0\nEOF\n")


# ГЕНЕРАЦИЯ ЧЕРТЕЖА
dxf = PureDXFWriter("чертеж_детали.dxf")

# ==========================================
# 1. ДЕТАЛЬ "РЕУЛЯТОР" (Центр в [0, 0])
# ==========================================
c1_x, c1_y = 0, 0

# Основная окружность Ф80 (R40) и осевая Ф60 (R30)
dxf.add_circle(c1_x, c1_y, 40)
dxf.add_circle(c1_x, c1_y, 30)

# 5 отверстий Ф10 (R5) по окружности
for i in range(5):
    angle_rad = math.radians(180 + i * 72)
    hx = c1_x + 30 * math.cos(angle_rad)
    hy = c1_y + 30 * math.sin(angle_rad)
    dxf.add_circle(hx, hy, 5)

# Дуги пазов
dxf.add_arc(c1_x, c1_y, 75, 45, 135)  # Верхний R75
dxf.add_arc(c1_x, c1_y, 77, 225, 315)  # Нижний R77


# ==========================================
# 2. ДЕТАЛЬ "РЫЧАГ" (Смещение x = 250)
# ==========================================
ox, oy = 250, 0

# Отверстия в пазу 2x Ф26 (R13)
dxf.add_circle(ox + 0, oy + 0, 13)
dxf.add_circle(ox + 46, oy + 0, 13)

# Внешний контур паза R24
dxf.add_arc(ox + 0, oy + 0, 24, 90, 270)
dxf.add_arc(ox + 46, oy + 0, 24, 270, 90)
dxf.add_line(ox + 0, oy + 24, ox + 46, oy + 24)
dxf.add_line(ox + 0, oy - 24, ox + 46, oy - 24)

# Центральный корпус Ф80 (R40)
dxf.add_circle(ox + 0, oy + 0, 40)

# Верхняя головка: (55, 56) -> Ф18 (R9) и Ф36 (R18)
dxf.add_circle(ox + 55, oy + 56, 9)
dxf.add_circle(ox + 55, oy + 56, 18)

# Нижняя головка: (0, -75) -> Ф14 (R7) и Ф30 (R15)
dxf.add_circle(ox + 0, oy - 75, 7)
dxf.add_circle(ox + 0, oy - 75, 15)

# Сохраняем результат
dxf.save()
print("Готово! Файл 'чертеж_детали.dxf' успешно сгенерирован.")