Skip to content

Commit d068a5e

Browse files
ShapeDrawBitmapCommand Polygon rendering (1-pixel image)
1 parent dd7fae7 commit d068a5e

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# IDE project files
22
/.idea/
3-
/*.iml
3+
/venv/
44

55
# Script folders
66
/updates/

system/lib/objects/shape.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ def __init__(self):
9191
self.is_mirrored = 0
9292

9393
self._points_count = 0
94-
self._xy_points = []
95-
self._uv_points = []
94+
self._xy_points: List[Point] = []
95+
self._uv_points: List[Point] = []
9696
self._transformed_points: List[Point] or None = None
9797

9898
self.texture = None
@@ -128,19 +128,32 @@ def load(self, swf, tag: int):
128128
def render(self):
129129
self._transformed_points = self._xy_points
130130

131-
width, height = get_size(*self.get_sides())
131+
left, top, right, bottom = self.get_sides()
132+
width, height = get_size(left, top, right, bottom)
132133
width, height = max(width, 1), max(height, 1)
133134

134135
self.rotation, self.is_mirrored = self.calculate_rotation(True)
135136

136137
rendered_region = self.get_image()
138+
if sum(rendered_region.size) == 2:
139+
fill_color = rendered_region.getpixel((0, 0))
140+
141+
# noinspection PyTypeChecker
142+
rendered_polygon = Image.new(rendered_region.mode, (width, height))
143+
drawable_image = ImageDraw.Draw(rendered_polygon)
144+
drawable_image.polygon(
145+
[(point.x - left, point.y - top) for point in self._transformed_points],
146+
fill=fill_color
147+
)
148+
return rendered_polygon
149+
137150
rendered_region = rendered_region.rotate(-self.rotation, expand=True)
138151
if self.is_mirrored:
139152
rendered_region = rendered_region.transpose(Image.FLIP_LEFT_RIGHT)
140153
rendered_region = rendered_region.resize((width, height), Image.ANTIALIAS)
141154
return rendered_region
142155

143-
def get_image(self):
156+
def get_image(self) -> Image:
144157
img_mask = Image.new('L', (self.texture.width, self.texture.height), 0)
145158

146159
color = 255

0 commit comments

Comments
 (0)