Repo Health

← К списку

anisya-so8oleva/graphics-py

import matplotlib.pyplot as plt import matplotlib.patches as patches from matplotlib.path import Path import numpy as np # Настройка русского шрифта (если не отображается, замените на Arial) plt.rcParams['font.family'] = 'DejaVu Sans' plt.rcParams['font.sans-serif'] = ['DejaVu Sans', 'Arial', 'Liberation Sans', 'Microsoft Sans Serif'] plt.rcParams['axes.unicode_minus'] = False # ============================================= # ЛИСТ 1. Схема генплана Калининской АЭС # ============================================= def draw_site_plan(): fig, ax = plt.subplots(figsize=(10, 8)) ax.set_xlim(0, 100) ax.set_ylim(0, 80) ax.set_title("Рисунок 1 — Схема генерального плана промплощадки Калининской АЭС (М 1:5000)", fontsize=12, fontweight='bold') ax.axis('off') # Кольцевая дорога ring = patches.Rectangle((10, 10), 80, 60, linewidth=2, edgecolor='black', facecolor='none', linestyle='-') ax.add_patch(ring) # Главный корпус main_building = patches.Rectangle((30, 30), 40, 25, linewidth=1, edgecolor='black', facecolor='lightgray') ax.add_patch(main_building) ax.text(50, 42, 'ГЛАВНЫЙ КОРПУС', ha='center', fontsize=8, fontweight='bold') ax.text(50, 38, '(реакторное и турбинное отделения)', ha='center', fontsize=7) ax.text(50, 34, 'I степень огнестойкости', ha='center', fontsize=7) # ДГС dgs = patches.Rectangle((15, 55), 12, 10, linewidth=1, edgecolor='black', facecolor='yellow') ax.add_patch(dgs) ax.text(21, 60, 'ДГС', ha='center', fontsize=8, fontweight='bold') ax.text(21, 56, '(кат. В)', ha='center', fontsize=7) # АБК abk = patches.Rectangle((75, 55), 12, 10, linewidth=1, edgecolor='black', facecolor='lightgreen') ax.add_patch(abk) ax.text(81, 60, 'АБК', ha='center', fontsize=8, fontweight='bold') ax.text(81, 56, '(Ф4.3)', ha='center', fontsize=7) # Насосная станция pump = patches.Rectangle((75, 15), 10, 8, linewidth=1, edgecolor='black', facecolor='lightblue') ax.add_patch(pump) ax.text(80, 19, 'Насосная', ha='center', fontsize=7) ax.text(80, 16, 'станция', ha='center', fontsize=7) # Маслохозяйство oil = patches.Rectangle((15, 15), 10, 8, linewidth=1, edgecolor='black', facecolor='orange') ax.add_patch(oil) ax.text(20, 19, 'Масло-', ha='center', fontsize=7) ax.text(20, 16, 'хозяйство', ha='center', fontsize=7) # Водородная станция hydrogen = patches.Rectangle((55, 10), 10, 8, linewidth=1, edgecolor='black', facecolor='red', alpha=0.7) ax.add_patch(hydrogen) ax.text(60, 14, 'Водородная', ha='center', fontsize=7, color='white') ax.text(60, 11, '(кат. А)', ha='center', fontsize=7, color='white') # Пожарные гидранты (кружки) hydrant_positions = [(20, 25), (35, 25), (50, 25), (65, 25), (80, 25), (20, 65), (35, 65), (50, 65), (65, 65), (80, 65)] for x, y in hydrant_positions: circle = patches.Circle((x, y), 1.5, linewidth=1, edgecolor='red', facecolor='red') ax.add_patch(circle) ax.text(x, y-2, 'ПГ', ha='center', fontsize=6, color='red') # Въезды ax.annotate('ВЪЕЗД №1', xy=(50, 8), ha='center', fontsize=8, fontweight='bold', arrowprops=dict(arrowstyle='->', lw=1.5)) ax.annotate('ВЪЕЗД №2', xy=(50, 72), ha='center', fontsize=8, fontweight='bold', arrowprops=dict(arrowstyle='->', lw=1.5)) # Экспликация props = dict(boxstyle='round', facecolor='white', alpha=0.8) ax.text(5, 5, 'Условные обозначения:', fontsize=8, fontweight='bold') ax.text(5, 2, '□ Серый — главный корпус', fontsize=7) ax.text(5, -1, '□ Желтый — ДГС', fontsize=7) ax.text(5, -4, '● Красный — пожарный гидрант (ПГ)', fontsize=7) ax.text(5, -7, '═══ Кольцевой проезд (6 м)', fontsize=7) plt.tight_layout() plt.savefig('list1_site_plan.png', dpi=150, bbox_inches='tight') plt.close() print("✅ Лист 1 сохранён: list1_site_plan.png") # ============================================= # ЛИСТ 2. План ДГС с эвакуационными путями # ============================================= def draw_dgs_plan(): fig, ax = plt.subplots(figsize=(10, 8)) ax.set_xlim(0, 100) ax.set_ylim(0, 80) ax.set_title("Рисунок 2 — План 1-го этажа здания ДГС с нанесением эвакуационных путей (М 1:100)", fontsize=12, fontweight='bold') ax.axis('off') # Контур здания building = patches.Rectangle((5, 5), 90, 70, linewidth=2, edgecolor='black', facecolor='none') ax.add_patch(building) # Дизельный зал diesel = patches.Rectangle((10, 40), 35, 30, linewidth=1, edgecolor='black', facecolor='lightyellow') ax.add_patch(diesel) ax.text(27, 60, 'ДИЗЕЛЬНЫЙ ЗАЛ', ha='center', fontsize=9, fontweight='bold') ax.text(27, 55, '(категория В)', ha='center', fontsize=8) # Дизеля for i, x in enumerate([15, 22, 29, 36]): dg = patches.Rectangle((x, 45), 5, 5, linewidth=1, edgecolor='black', facecolor='gray') ax.add_patch(dg) ax.text(x+2.5, 47.5, f'ДГ{i+1}', ha='center', fontsize=6, color='white') # Масляный подвал oil_basement = patches.Rectangle((55, 40), 35, 30, linewidth=1, edgecolor='black', facecolor='orange', alpha=0.5) ax.add_patch(oil_basement) ax.text(72, 60, 'МАСЛЯНЫЙ ПОДВАЛ', ha='center', fontsize=9, fontweight='bold') ax.text(72, 55, '(категория В)', ha='center', fontsize=8) # Щитовая control = patches.Rectangle((10, 10), 25, 20, linewidth=1, edgecolor='black', facecolor='lightblue') ax.add_patch(control) ax.text(22, 22, 'ЩИТОВАЯ', ha='center', fontsize=8, fontweight='bold') ax.text(22, 18, 'управления', ha='center', fontsize=7) # Мастерская workshop = patches.Rectangle((55, 10), 35, 20, linewidth=1, edgecolor='black', facecolor='lightgreen') ax.add_patch(workshop) ax.text(72, 22, 'МАСТЕРСКАЯ', ha='center', fontsize=8, fontweight='bold') # Лестничная клетка stairs = patches.Rectangle((40, 5), 20, 25, linewidth=2, edgecolor='black', facecolor='lightgray', hatch='//') ax.add_patch(stairs) ax.text(50, 22, 'ЛЕСТНИЧНАЯ КЛЕТКА', ha='center', fontsize=7, fontweight='bold') ax.text(50, 18, '(тип Н2, подпор)', ha='center', fontsize=6) # Противопожарные перегородки (красные линии) ax.plot([45, 45], [40, 70], 'r-', linewidth=3) ax.plot([45, 45], [5, 30], 'r-', linewidth=3) ax.plot([10, 55], [40, 40], 'r-', linewidth=3) ax.plot([55, 90], [40, 40], 'r-', linewidth=3) # Противопожарные двери door_positions = [(45, 55), (45, 25), (35, 40), (55, 40)] for x, y in door_positions: door = patches.Rectangle((x-2, y-2), 4, 4, linewidth=1, edgecolor='red', facecolor='red', alpha=0.7) ax.add_patch(door) # Эвакуационные стрелки (зеленые) arrows = [ ((27, 40), (27, 35), '→'), ((72, 40), (72, 35), '→'), ((22, 10), (22, 5), '↓'), ((72, 10), (72, 5), '↓'), ((50, 5), (50, 2), '↓'), ] for start, end, direction in arrows: ax.annotate('', xy=end, xytext=start, arrowprops=dict(arrowstyle='->', lw=2, color='green')) # Эвакуационные выходы exit_sign = patches.Rectangle((45, 2), 10, 3, linewidth=1, edgecolor='green', facecolor='lightgreen') ax.add_patch(exit_sign) ax.text(50, 3.5, 'ВЫХОД', ha='center', fontsize=7, fontweight='bold') # Экспликация ax.text(5, 75, 'Условные обозначения:', fontsize=8, fontweight='bold') ax.text(5, 72, '█ Красная линия — противопожарная перегородка 1-го типа (EI 45)', fontsize=6, color='red') ax.text(5, 69, '■ Красный квадрат — противопожарная дверь (EI 30)', fontsize=6, color='red') ax.text(5, 66, '→ Зеленая стрелка — направление эвакуации', fontsize=6, color='green') ax.text(5, 63, '□ Зеленый прямоугольник — эвакуационный выход', fontsize=6, color='green') plt.tight_layout() plt.savefig('list2_dgs_plan.png', dpi=150, bbox_inches='tight') plt.close() print("✅ Лист 2 сохранён: list2_dgs_plan.png") # ============================================= # ЛИСТ 3. Кабельный туннель (разрез и план) # ============================================= def draw_cable_tunnel(): fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6)) # ---- ЛЕВАЯ ЧАСТЬ: поперечный разрез ---- ax1.set_xlim(0, 100) ax1.set_ylim(0, 80) ax1.set_title('а) Поперечный разрез кабельного туннеля (М 1:50)', fontsize=10, fontweight='bold') ax1.axis('off') # Стенки туннеля tunnel = patches.Rectangle((20, 20), 60, 50, linewidth=2, edgecolor='black', facecolor='none') ax1.add_patch(tunnel) # Стеллажи for x in [25, 75]: for y in [25, 35, 45, 55]: shelf = patches.Rectangle((x, y), 8, 3, linewidth=1, edgecolor='black', facecolor='brown') ax1.add_patch(shelf) # Кабели на стеллаже cables = patches.Rectangle((x+1, y+0.5), 6, 2, linewidth=0.5, edgecolor='black', facecolor='gray') ax1.add_patch(cables) # Противопожарная перегородка wall = patches.Rectangle((48, 20), 4, 50, linewidth=2, edgecolor='red', facecolor='red', alpha=0.5) ax1.add_patch(wall) ax1.text(50, 15, 'Противопожарная перегородка 1-го типа (EI 45)', ha='center', fontsize=7, color='red') # Дверь door = patches.Rectangle((48, 40), 4, 10, linewidth=1, edgecolor='darkred', facecolor='red', alpha=0.8) ax1.add_patch(door) ax1.text(50, 35, 'Дверь EI 30', ha='center', fontsize=6, color='darkred') # Размеры ax1.annotate('', xy=(20, 18), xytext=(80, 18), arrowprops=dict(arrowstyle='<->', lw=1)) ax1.text(50, 15, '1,8 м (ширина туннеля)', ha='center', fontsize=7) ax1.annotate('', xy=(18, 20), xytext=(18, 70), arrowprops=dict(arrowstyle='<->', lw=1)) ax1.text(15, 45, '2,2 м', ha='center', fontsize=7, rotation=90) # ---- ПРАВАЯ ЧАСТЬ: план туннеля ---- ax2.set_xlim(0, 100) ax2.set_ylim(0, 50) ax2.set_title('б) Фрагмент плана кабельного туннеля', fontsize=10, fontweight='bold') ax2.axis('off') # Туннель tunnel_plan = patches.Rectangle((5, 15), 90, 20, linewidth=2, edgecolor='black', facecolor='none') ax2.add_patch(tunnel_plan) # Перегородки через 60 м for x in [20, 45, 70]: wall_plan = patches.Rectangle((x, 15), 3, 20, linewidth=2, edgecolor='red', facecolor='red', alpha=0.5) ax2.add_patch(wall_plan) ax2.text(x+1.5, 12, f'Перегородка\n{x}м', ha='center', fontsize=6, color='red') # Двери for x in [20, 45, 70]: door_plan = patches.Rectangle((x, 22), 3, 6, linewidth=1, edgecolor='darkred', facecolor='red', alpha=0.8) ax2.add_patch(door_plan) # Подписи секций ax2.text(12, 10, 'Секция 1', ha='center', fontsize=7) ax2.text(32, 10, 'Секция 2', ha='center', fontsize=7) ax2.text(57, 10, 'Секция 3', ha='center', fontsize=7) ax2.text(82, 10, 'Секция 4', ha='center', fontsize=7) # Размер шага ax2.annotate('', xy=(20, 8), xytext=(45, 8), arrowprops=dict(arrowstyle='<->', lw=1)) ax2.text(32.5, 6, '60 м', ha='center', fontsize=7) plt.tight_layout() plt.savefig('list3_cable_tunnel.png', dpi=150, bbox_inches='tight') plt.close() print("✅ Лист 3 сохранён: list3_cable_tunnel.png") # ============================================= # ЛИСТ 4. Таблица мероприятий # ============================================= def draw_measures_table(): fig, ax = plt.subplots(figsize=(12, 8)) ax.axis('off') ax.set_title("Рисунок 4 — План-график мероприятий по устранению нарушений требований пожарной безопасности", fontsize=12, fontweight='bold') # Данные таблицы data = [ ["1", "Повреждение уплотнений на противопожарных дверях кабельных туннелей (секции 3,5,8)", "Нач. кабельного хозяйства Смирнов С.С.", "01.03.2021", ""], ["2", "Отсутствие актов скрытых работ на кабельные проходки", "Нач. ОКС Васильев В.В.", "01.03.2021", ""], ["3", "Неисправность доводчиков (2 шт.) и отсутствие уплотнения на двери ЛК реакторного отделения", "Нач. цеха эксплуатации Новиков Н.Н.", "01.02.2021", ""], ["4", "Не выполнена перекатка пожарных рукавов ВПВ машинного зала", "Нач. службы эксплуатации Михайлов М.М.", "15.12.2020", ""], ["5", "Отсутствуют копии сертификатов на противопожарные двери ДГС", "Гл. инженер Иванов И.И.", "01.02.2021", ""], ] columns = ["№ п/п", "Наименование нарушения", "Ответственный", "Срок", "Отметка о выполнении"] # Создание таблицы table = ax.table(cellText=data, colLabels=columns, loc='center', cellLoc='left') table.auto_set_font_size(False) table.set_fontsize(9) table.scale(1.2, 1.8) # Цвета for (i, j), cell in table.get_celld().items(): if i == 0: cell.set_facecolor('#40466e') cell.set_text_props(weight='bold', color='white') else: if i % 2 == 0: cell.set_facecolor('#f2f2f2') else: cell.set_facecolor('#ffffff') # Подписи ax.text(0.1, 0.15, 'Подготовил: Начальник отдела пожарной безопасности ________ Петров П.П.', fontsize=9, transform=fig.transFigure) ax.text(0.1, 0.08, 'Утверждаю: Главный инженер Калининской АЭС ________ Иванов И.И.', fontsize=9, transform=fig.transFigure) plt.tight_layout() plt.savefig('list4_measures_table.png', dpi=150, bbox_inches='tight') plt.close() print("✅ Лист 4 сохранён: list4_measures_table.png") # ============================================= # ЗАПУСК ВСЕХ ФУНКЦИЙ # ============================================= if __name__ == "__main__": print("=" * 50) print("Начинаю генерацию графической части курсовой работы...") print("=" * 50) draw_site_plan() draw_dgs_plan() draw_cable_tunnel() draw_measures_table() print("=" * 50) print("✅ Готово! Созданы файлы:") print(" - list1_site_plan.png") print(" - list2_dgs_plan.png") print(" - list3_cable_tunnel.png") print(" - list4_measures_table.png") print("=" * 50) print("Сохраните эти файлы и вставьте в курсовую работу.")

язык не указан · рейтинг 0 · 👍 0 · ❤️ 0 · 💎 0 · 0 форков · ссылка на SourceCraft

Дата анализа: 29.09.2026 22:55

27
Repo Health Score
Скачать Markdown

Почему такой балл

Категории без данных не обнуляют итог: их вес перераспределяется между категориями, где балл есть.

Сильные и слабые стороны

Слабые: Документация: 25, Активность: 0, Issues: нет данных, Проект давно не проявлял активность, Не найдено тестов, Мало merge requests за последние 30 дней, Мало релизов за последние 30 дней, Отсутствует лицензия

Сводка YandexGPT

Находки и рекомендации

История проверок

  1. 29.09.2026 22:55 — 27

Безопасность (AppSec) и CI/CD здесь не оцениваются: к ним есть доступ только по PAT владельца репозитория.