import cairosvg
def generate_chart(members):
# Размеры прямоугольника узла
node_width = 150
node_height = 50
# Размеры холста
canvas_width = 800
canvas_height = 600
# Радиус узла (для закругленных прямоугольников)
node_radius = 10
# Цвета
background_color = "#F2F2F2"
node_color = "#EFEFEF"
node_stroke_color = "#999"
node_text_color = "#333"
line_color = "#CCC"
# Список строк SVG-кода
svg_lines = []
# Рассчитываем координаты для каждого узла
coordinates = {}
for member in members:
x = member['x']
y = member['y']
coordinates[member['id']] = {'x': x, 'y': y}
# Рисуем линии-связи между узлами
for member in members:
member_id = member['id']
x1 = coordinates[member_id]['x'] * node_width + node_width / 2
y1 = coordinates[member_id]['y'] * node_height + node_height / 2
for parent_id in member['parents']:
x2 = coordinates[parent_id]['x'] * node_width + node_width / 2
y2 = coordinates[parent_id]['y'] * node_height + node_height / 2
svg_lines.append(f'')
# Рисуем узлы
for member in members:
member_id = member['id']
x = coordinates[member_id]['x'] * node_width
y = coordinates[member_id]['y'] * node_height
# Рисуем фоновый прямоугольник
svg_lines.append(f'')
# Добавляем текст в центр узла
member_name = member['name'][:16]
text_x = x + node_width / 2
text_y = y + node_height / 2
svg_lines.append(f'{member_name}')
# Создаем SVG-код
svg = f''
# конвертировать SVG в PNG
png_data = cairosvg.svg2png(bytestring=svg_data)
return png_data