diff --git a/test/test_rect.py b/test/test_rect.py index 5d1b46f..b56da29 100644 --- a/test/test_rect.py +++ b/test/test_rect.py @@ -5,19 +5,32 @@ import os from lxml import etree from utils.font_size import * from utils.factory import * +from utils.components.text import * +from utils.components.rect import * +from utils.components.common_road import * # config width = 500 -height = 350 +height = 500 # rect dwg = svgwrite.Drawing('rect.svg', profile='tiny', width=width, height=height) -RectFactory.double_stroke_rect(container=dwg, width=width, height=height, main_color='#1f963b', stroke_color='#ffffff', stroke_width=4, r=16, x=0, y=0) -CommonRoadFactory.national(dwg, 50, 20, 'G503') -CommonRoadFactory.provincial(dwg, 50, 80, 'S210') -CommonRoadFactory.county(dwg, 50, 140, 'X021') -CommonRoadFactory.township(dwg, 50, 200, 'Y101') +rect = DoubleStrokeRectComponent(container=dwg, width=width, height=height, main_color='#1f963b', stroke_color='#ffffff', stroke_width=4, r=16) +rect.draw(0, 0) + +g_road = CommonRoadNationalComponent(dwg, 'G503') +g_road.draw(50, 20) + +p_road = CommonRoadProvincialComponent(dwg, 'S210') +p_road.draw(50, 80) + +c_road = CommonRoadTownshipComponent(dwg, 'X021') +c_road.draw(50, 140) + +t_road = CommonRoadTownshipComponent(dwg, 'Y101') +t_road.draw(50, 200) + SpecialAreaFactory.street(dwg, 200, 20, '北四环西路') SpecialAreaFactory.tourist(dwg, 200, 80, '湖滨旅游区') ExpressWayFactory.national(dwg, 200, 140, 'G25', '01') @@ -30,6 +43,12 @@ ExpressWayFactory.provincial(dwg, 50, 260, '京', 'S50', '') ExpressWayFactory.provincial(dwg, 150, 260, '京津冀', 'S3801', '') ExpressWayFactory.provincial(dwg, 300, 260, '粤', 'S99', '55') +text_a = TextAComponent(dwg, '北京', '#ffffff', 50) +text_a.draw(50, 320) + +text_b = TextBComponent(dwg, 'X201363', '#ffffff', 50) +text_b.draw(50, 380) + # export dwg.save() diff --git a/test/utils/components/common_road.py b/test/utils/components/common_road.py new file mode 100644 index 0000000..67a75f2 --- /dev/null +++ b/test/utils/components/common_road.py @@ -0,0 +1,47 @@ +from utils.font_size import FontSize +from utils.components.text import * +from utils.components.rect import * + +class CommonRoadBaseComponent: + + def __init__(self, container, name, main_color, stroke_color) -> None: + self.container = container + self.name = name + self.main_color = main_color + self.stroke_color = stroke_color + self.p_height = 50 + self.inset = 10 + self.stroke_width = 2 + self.r = 8 + + def width(self): + text_width = FontSize.get_font_width(self.name, 'resources/B.ttf', self.p_height) + return text_width + self.inset * 2 + + def height(self): + return self.p_height + + def draw(self, x, y): + print(self.name, self.width(), self.height()) + rect = SingleStrokeRectComponent(self.container, self.width(), self.p_height, self.main_color, self.stroke_color, self.stroke_width, self.r) + rect.draw(x, y) + text = TextBComponent(self.container, self.name, self.stroke_color, self.p_height) + text.draw(x + self.inset, y) + + +class CommonRoadNationalComponent(CommonRoadBaseComponent): + + def __init__(self, container, name) -> None: + super().__init__(container, name, '#e71420', '#ffffff') + + +class CommonRoadProvincialComponent(CommonRoadBaseComponent): + + def __init__(self, container, name) -> None: + super().__init__(container, name, '#f4ec17', '#000000') + + +class CommonRoadTownshipComponent(CommonRoadBaseComponent): + + def __init__(self, container, name) -> None: + super().__init__(container, name, '#ffffff', '#000000') \ No newline at end of file diff --git a/test/utils/components/rect.py b/test/utils/components/rect.py new file mode 100644 index 0000000..afd8c89 --- /dev/null +++ b/test/utils/components/rect.py @@ -0,0 +1,67 @@ +class SingleStrokeRectComponent: + + def __init__(self, container, width, height, main_color, stroke_color, stroke_width, r) -> None: + self.container = container + self.p_width = width + self.p_height = height + self.main_color = main_color + self.stroke_color = stroke_color + self.stroke_width = stroke_width + self.r = r + + def width(self): + return self.p_width + + def height(self): + return self.p_height + + def draw(self, x, y): + self.container.add( + self.container.rect( + insert=(x, y), + size=(self.p_width, self.p_height), + rx=self.r, + ry=self.r, + fill=self.stroke_color + ) + ) + self.container.add( + self.container.rect( + insert=(x + self.stroke_width, y + self.stroke_width), + size=(self.p_width - 2 * self.stroke_width, self.p_height - 2 * self.stroke_width), + rx=self.r - self.stroke_width, + ry=self.r - self.stroke_width, + fill=self.main_color + ) + ) + + +class DoubleStrokeRectComponent: + + def __init__(self, container, width, height, main_color, stroke_color, stroke_width, r) -> None: + self.container = container + self.p_width = width + self.p_height = height + self.main_color = main_color + self.stroke_color = stroke_color + self.stroke_width = stroke_width + self.r = r + + def width(self): + return self.p_width + + def height(self): + return self.p_height + + def draw(self, x, y): + outer = SingleStrokeRectComponent(self.container, self.p_width, self.p_height, self.stroke_color, self.main_color, self.stroke_width, self.r) + outer.draw(x, y) + self.container.add( + self.container.rect( + insert=(x + 2 * self.stroke_width, y + 2 * self.stroke_width), + size=(self.p_width - 4 * self.stroke_width, self.p_height - 4 * self.stroke_width), + rx=self.r - 2 * self.stroke_width, + ry=self.r - 2 * self.stroke_width, + fill=self.main_color + ) + ) \ No newline at end of file diff --git a/test/utils/components/text.py b/test/utils/components/text.py new file mode 100644 index 0000000..1bb638a --- /dev/null +++ b/test/utils/components/text.py @@ -0,0 +1,42 @@ +from utils.font_size import FontSize + +class TextBaseComponent: + + def __init__(self, container, text, color, size, font_path, font_name) -> None: + self.container = container + self.text = text + self.font_path = font_path + self.font_name = font_name + self.color = color + self.size = size + + def width(self): + return FontSize.get_font_width(self.text, self.font_path, self.size) + + def height(self): + return self.size + + def draw(self, x, y): + x_loc = x + y_loc = y + self.size * 0.8 + self.container.add( + self.container.text( + self.text, + insert=(x_loc, y_loc), + fill=self.color, + font_family=self.font_name, + font_size=self.size + ) + ) + + +class TextAComponent(TextBaseComponent): + + def __init__(self, container, text, color, size) -> None: + super().__init__(container, text, color, size, 'resources/A.ttf', 'A型交通标志专用字体') + + +class TextBComponent(TextBaseComponent): + + def __init__(self, container, text, color, size) -> None: + super().__init__(container, text, color, size, 'resources/B.ttf', 'B型交通标志专用字体')