Skip to content

Commit e931c83

Browse files
committed
shapes: Make shapes CCW by default
1 parent 6b9fa2b commit e931c83

File tree

4 files changed

+56
-22
lines changed

4 files changed

+56
-22
lines changed

src/draw/shapes.typ

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,10 +1069,10 @@
10691069
let (rx, ry) = radius
10701070
if rx > 0 or ry > 0 {
10711071
let m = 0.551784
1072-
let p0 = (p0.at(0) * m * radius.at(0),
1073-
p0.at(1) * m * radius.at(1))
1074-
let p1 = (p1.at(0) * m * radius.at(0),
1075-
p1.at(1) * m * radius.at(1))
1072+
let p0 = (p0.at(0) * m * rx,
1073+
p0.at(1) * m * ry)
1074+
let p1 = (p1.at(0) * m * rx,
1075+
p1.at(1) * m * ry)
10761076
(path-util.cubic-segment(s, e,
10771077
vector.add(s, p0),
10781078
vector.add(e, p1)),)
@@ -1098,14 +1098,14 @@
10981098
let (p6, p7) = get-corner-pts(sw, (x1, y1, z), ( 1, 0), ( 0, 1))
10991099

11001100
let segments = ()
1101-
segments += corner-arc(nw, p0, p1, (0, 1), (-1, 0))
1102-
if p1 != p2 { segments += (path-util.line-segment((p1, p2)),) }
1103-
segments += corner-arc(ne, p2, p3, (1, 0), (0, 1))
1104-
if p3 != p4 { segments += (path-util.line-segment((p3, p4)),) }
1105-
segments += corner-arc(se, p4, p5, (0, -1), (1, 0))
1106-
if p5 != p6 { segments += (path-util.line-segment((p5, p6)),) }
1107-
segments += corner-arc(sw, p6, p7, (-1, 0), (0,-1))
1108-
if p7 != p0 { segments += (path-util.line-segment((p7, p0)),) }
1101+
segments += corner-arc(nw, p1, p0, (-1,0), (0, 1))
1102+
if p0 != p7 { segments += (path-util.line-segment((p0, p7)),) }
1103+
segments += corner-arc(sw, p7, p6, (0,-1), (-1,0))
1104+
if p6 != p5 { segments += (path-util.line-segment((p6, p5)),) }
1105+
segments += corner-arc(se, p5, p4, (1, 0), (0,-1))
1106+
if p4 != p3 { segments += (path-util.line-segment((p4, p3)),) }
1107+
segments += corner-arc(ne, p3, p2, (0, 1), (1, 0))
1108+
if p2 != p1 { segments += (path-util.line-segment((p2, p1)),) }
11091109

11101110
drawable.path(segments, fill: style.fill, stroke: style.stroke, close: true)
11111111
}

src/drawable.typ

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,28 @@
8181
(
8282
path-util.cubic-segment(
8383
(x, top, z),
84-
(right, y, z),
85-
(x + m * rx, top, z),
86-
(right, y + m * ry, z),
84+
(left, y, z),
85+
(x - m * rx, top, z),
86+
(left, y + m * ry, z),
8787
),
8888
path-util.cubic-segment(
89-
(right, y, z),
89+
(left, y, z),
9090
(x, bottom, z),
91-
(right, y - m * ry, z),
92-
(x + m * rx, bottom, z),
91+
(left, y - m * ry, z),
92+
(x - m * rx, bottom, z),
9393
),
9494
path-util.cubic-segment(
9595
(x, bottom, z),
96-
(left, y, z),
97-
(x - m * rx, bottom, z),
98-
(left, y - m * ry, z),
96+
(right, y, z),
97+
(x + m * rx, bottom, z),
98+
(right, y - m * ry, z),
99+
),
100+
path-util.cubic-segment(
101+
(right, y, z),
102+
(x, top, z),
103+
(right, y + m * ry, z),
104+
(x + m * rx, top, z)
99105
),
100-
path-util.cubic-segment((left, y, z), (x, top, z), (left, y + m * ry, z), (x - m * rx, top, z)),
101106
),
102107
stroke: stroke,
103108
fill: fill,

tests/projection/ortho/ref/1.png

8.11 KB
Loading

tests/projection/ortho/test.typ

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,32 @@
118118
line((-1,-1), (1,-1), (0,1), close: true)
119119
})
120120
})
121+
122+
// Face order of library shapes
123+
#test-case({
124+
import draw: *
125+
ortho(cull-face: "cw", {
126+
rect((-1, -1), (1, 1), radius: .5)
127+
})
128+
})
129+
130+
#test-case({
131+
import draw: *
132+
ortho(cull-face: "cw", {
133+
circle((0,0))
134+
})
135+
})
136+
137+
#test-case({
138+
import draw: *
139+
ortho(cull-face: "cw", {
140+
arc((0,0), start: 0deg, stop: 270deg, mode: "PIE")
141+
})
142+
})
143+
144+
#test-case({
145+
import draw: *
146+
ortho(cull-face: "cw", {
147+
content((0,0), [Text])
148+
})
149+
})

0 commit comments

Comments
 (0)