mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 09:37:26 +08:00
1 parent
67aabbda84
commit
9ade2466ba
1 file changed
+6
-5
@@ -144,18 +144,18 @@ func (p GeometryPath) strokePolylines(tolerance float64) ([]geometryPolyline, er
|
|||||||
if depth == 24 {
|
if depth == 24 {
|
||||||
return fmt.Errorf("stroke curve tolerance cannot be met")
|
return fmt.Errorf("stroke curve tolerance cannot be met")
|
||||||
}
|
}
|
||||||
work := append([]Point(nil), points...)
|
var work, left, right [4]Point
|
||||||
left, right := make([]Point, len(points)), make([]Point, len(points))
|
copy(work[:], points)
|
||||||
for n := len(points); n > 0; n-- {
|
for n := len(points); n > 0; n-- {
|
||||||
left[len(points)-n], right[n-1] = work[0], work[n-1]
|
left[len(points)-n], right[n-1] = work[0], work[n-1]
|
||||||
for i := 0; i < n-1; i++ {
|
for i := 0; i < n-1; i++ {
|
||||||
work[i] = geometryLerp(work[i], work[i+1], .5)
|
work[i] = geometryLerp(work[i], work[i+1], .5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := flatten(left, budget/2, depth+1); err != nil {
|
if err := flatten(left[:len(points)], budget/2, depth+1); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return flatten(right, budget/2, depth+1)
|
return flatten(right[:len(points)], budget/2, depth+1)
|
||||||
}
|
}
|
||||||
for _, s := range curves {
|
for _, s := range curves {
|
||||||
switch s.Verb {
|
switch s.Verb {
|
||||||
@@ -175,7 +175,8 @@ func (p GeometryPath) strokePolylines(tolerance float64) ([]geometryPolyline, er
|
|||||||
line.points = []Point{current}
|
line.points = []Point{current}
|
||||||
default:
|
default:
|
||||||
drawn = true
|
drawn = true
|
||||||
points := []Point{current}
|
var buffer [4]Point
|
||||||
|
points := append(buffer[:0], current)
|
||||||
if s.Verb == GeometryQuad || s.Verb == GeometryCubic {
|
if s.Verb == GeometryQuad || s.Verb == GeometryCubic {
|
||||||
points = append(points, s.Control1)
|
points = append(points, s.Control1)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user