摘要
import svgwrite
import math
# Constants
CONFIG = {
'svg_file_path': '八數相對圖.svg',
'circle_text_data': [
{'angle': 0, 'main_text': "凶", 'sub_text': "火九"},
{'angle': 45, 'main_text': "咎", 'sub_text': "金二"},
{'angle': 90, 'main_text': "災", 'sub_text': "金七"},
{'angle': 135, 'main_text': "悔", 'sub_text': "水六"},
{'angle': 180, 'main_text': "吉", 'sub_text': "水一"},
{'angle': -135, 'main_text': "休", 'sub_text': "木三"},
{'angle': -90, 'main_text': "祥", 'sub_text': "木三"},
{'angle': -45, 'main_text': "吝", 'sub_text': "火四"}
],
'svg_side_length': 300,
'main_circle_radius': 130,
'text_circle_radius': 100,
'font_size_main': 20,
'font_size_sub': 10,
'text_offset': 20,
'stroke_color': "black",
'fill_color': "none",
'text_fill_color': "black",
'text_anchor': "middle"
}
def add_circle(drawing, center, radius, stroke_color, fill_color):
drawing.add(drawing.circle(center=(center, center), r=radius, stroke=stroke_color, fill=fill_color))
def add_text(drawing, center, text_data, text_circle_radius, font_size_main, font_size_sub, text_offset, text_fill_color, text_anchor):
for data in text_data:
angle = data['angle']
rad = math.radians(angle)
x = center + text_circle_radius * math.sin(rad)
y = center - text_circle_radius * math.cos(rad)
text_group = drawing.g(transform=f"rotate({angle}, {x}, {y})")
text_group.add(drawing.text(data['main_text'], insert=(x, y), fill=text_fill_color, font_size=f"{font_size_main}px", text_anchor=text_anchor))
text_group.add(drawing.text(data['sub_text'], insert=(x, y + text_offset), fill=text_fill_color, font_size=f"{font_size_sub}px", text_anchor=text_anchor))
drawing.add(text_group)
def generate_svg(config):
center = config['svg_side_length'] / 2
drawing = svgwrite.Drawing(config['svg_file_path'], profile='tiny', size=(f"{config['svg_side_length']}px", f"{config['svg_side_length']}px"))
add_circle(drawing, center, config['main_circle_radius'], config['stroke_color'], config['fill_color'])
add_text(drawing, center, config['circle_text_data'], config['text_circle_radius'], config['font_size_main'], config['font_size_sub'], config['text_offset'], config['text_fill_color'], config['text_anchor'])
drawing.save()
generate_svg(CONFIG)
授權條款
我,本作品的著作權持有者,決定用以下授權條款發佈本作品:
|
此檔案在創用CC CC0 1.0 通用公有領域貢獻宣告之下分發。
|
在此宣告之下分發本作品者,已依據各國著作權法,在全世界放棄其對本作品所擁有的著作權及所有相關相似的法律權利,從而將本作品貢獻至公有領域。您可以複製、修改、分發和演示該作品,用於任何商業用途,所有這些都不需要請求授權。
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse
|