Skip to content

Commit 2d510c2

Browse files
committed
.
1 parent 2bf3b24 commit 2d510c2

File tree

1 file changed

+30
-51
lines changed

1 file changed

+30
-51
lines changed

agrf/graphics/cv/foundation.py

Lines changed: 30 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,34 @@
33
from .. import LayeredImage
44

55

6+
def get_left_part(left_parts, r, c, solid, scale):
7+
left = np.ones_like(r, dtype=np.uint8) * ((c >= -32 * scale) * (c <= 0 * scale))
8+
9+
# Top limit - not applicable to solid parts
10+
if not solid:
11+
if left_parts // 2 == 0:
12+
left *= r * 2 + c >= 0 * scale
13+
elif left_parts // 2 == 1:
14+
left *= r * 4 + c >= 0 * scale
15+
elif left_parts // 2 == 2:
16+
left *= r * 4 + c * 3 >= -32 * scale
17+
else:
18+
assert left_parts // 2 == 3
19+
left *= r * 2 + c >= -16 * scale
20+
21+
if left_parts % 4 == 0:
22+
left *= r * 2 - c <= 64 * scale
23+
elif left_parts % 4 == 1:
24+
left *= r * 4 - c <= 96 * scale
25+
elif left_parts % 4 == 2:
26+
left *= r * 4 - c * 3 <= 128 * scale
27+
else:
28+
assert left_parts % 4 == 3
29+
left *= r * 2 - c <= 48 * scale
30+
31+
return left
32+
33+
634
def make_foundation_subimage(
735
img: LayeredImage, scale, left_parts, right_parts, cut_inside, zshift, solid
836
) -> LayeredImage:
@@ -11,60 +39,11 @@ def make_foundation_subimage(
1139
c = np.arange(img.w)[np.newaxis] + img.xofs - scale + 0.5
1240

1341
alphamask = np.zeros((img.h, img.w), dtype=np.uint8)
14-
ones = np.ones((img.h, img.w), dtype=np.uint8)
1542
if left_parts is not None:
16-
left = ones * (c >= -32 * scale) * (c <= 0 * scale)
17-
18-
# Top limit - not applicable to solid parts
19-
if not solid:
20-
if left_parts // 2 == 0:
21-
left *= r * 2 + c >= 0 * scale
22-
elif left_parts // 2 == 1:
23-
left *= r * 4 + c >= 0 * scale
24-
elif left_parts // 2 == 2:
25-
left *= r * 4 + c * 3 >= -32 * scale
26-
else:
27-
assert left_parts // 2 == 3
28-
left *= r * 2 + c >= -16 * scale
29-
30-
if left_parts % 4 == 0:
31-
left *= r * 2 - c <= 64 * scale
32-
elif left_parts % 4 == 1:
33-
left *= r * 4 - c <= 96 * scale
34-
elif left_parts % 4 == 2:
35-
left *= r * 4 - c * 3 <= 128 * scale
36-
else:
37-
assert left_parts % 4 == 3
38-
left *= r * 2 - c <= 48 * scale
39-
40-
alphamask = np.maximum(alphamask, left)
43+
alphamask = np.maximum(alphamask, get_left_part(left_parts, r, c, solid, scale))
4144

4245
if right_parts is not None:
43-
right = ones * (c >= 0 * scale) * (c <= 32 * scale)
44-
45-
# Top limit - not applicable to solid parts
46-
if not solid:
47-
if right_parts // 2 == 0:
48-
right *= r * 2 - c >= 0 * scale
49-
elif right_parts // 2 == 1:
50-
right *= r * 4 - c >= 0 * scale
51-
elif right_parts // 2 == 2:
52-
right *= r * 4 - c * 3 >= -32 * scale
53-
else:
54-
assert right_parts // 2 == 3
55-
right *= r * 2 - c >= -16 * scale
56-
57-
if right_parts % 4 == 0:
58-
right *= r * 2 + c <= 64 * scale
59-
elif right_parts % 4 == 1:
60-
right *= r * 4 + c <= 96 * scale
61-
elif right_parts % 4 == 2:
62-
right *= r * 4 + c * 3 <= 128 * scale
63-
else:
64-
assert right_parts % 4 == 3
65-
right *= r * 2 + c <= 48 * scale
66-
67-
alphamask = np.maximum(alphamask, right)
46+
alphamask = np.maximum(alphamask, get_left_part(right_parts, r, -c, solid, scale))
6847

6948
if cut_inside:
7049
# FIXME

0 commit comments

Comments
 (0)