Test curve range
This commit is contained in:
parent
dcbfbe505d
commit
dd69e0c822
2 changed files with 27 additions and 2 deletions
|
@ -5,6 +5,7 @@ package draw2dbase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -48,7 +49,10 @@ func SubdivideCubic(c, c1, c2 []float64) {
|
||||||
|
|
||||||
// TraceCubic generate lines subdividing the cubic curve using a Liner
|
// TraceCubic generate lines subdividing the cubic curve using a Liner
|
||||||
// flattening_threshold helps determines the flattening expectation of the curve
|
// flattening_threshold helps determines the flattening expectation of the curve
|
||||||
func TraceCubic(t Liner, cubic []float64, flatteningThreshold float64) {
|
func TraceCubic(t Liner, cubic []float64, flatteningThreshold float64) error {
|
||||||
|
if len(cubic) < 8 {
|
||||||
|
return errors.New("cubic length must be >= 8")
|
||||||
|
}
|
||||||
// Allocation curves
|
// Allocation curves
|
||||||
var curves [CurveRecursionLimit * 8]float64
|
var curves [CurveRecursionLimit * 8]float64
|
||||||
copy(curves[0:8], cubic[0:8])
|
copy(curves[0:8], cubic[0:8])
|
||||||
|
@ -77,6 +81,7 @@ func TraceCubic(t Liner, cubic []float64, flatteningThreshold float64) {
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quad
|
// Quad
|
||||||
|
@ -103,7 +108,10 @@ func SubdivideQuad(c, c1, c2 []float64) {
|
||||||
|
|
||||||
// TraceQuad generate lines subdividing the curve using a Liner
|
// TraceQuad generate lines subdividing the curve using a Liner
|
||||||
// flattening_threshold helps determines the flattening expectation of the curve
|
// flattening_threshold helps determines the flattening expectation of the curve
|
||||||
func TraceQuad(t Liner, quad []float64, flatteningThreshold float64) {
|
func TraceQuad(t Liner, quad []float64, flatteningThreshold float64) error {
|
||||||
|
if len(quad) < 6 {
|
||||||
|
return errors.New("quad length must be >= 6")
|
||||||
|
}
|
||||||
// Allocates curves stack
|
// Allocates curves stack
|
||||||
var curves [CurveRecursionLimit * 6]float64
|
var curves [CurveRecursionLimit * 6]float64
|
||||||
copy(curves[0:6], quad[0:6])
|
copy(curves[0:6], quad[0:6])
|
||||||
|
@ -129,6 +137,7 @@ func TraceQuad(t Liner, quad []float64, flatteningThreshold float64) {
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraceArc trace an arc using a Liner
|
// TraceArc trace an arc using a Liner
|
||||||
|
|
|
@ -132,3 +132,19 @@ func SaveToPngFile(filePath string, m image.Image) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOutOfRangeTraceCurve(t *testing.T) {
|
||||||
|
c := []float64{
|
||||||
|
100, 100, 200, 100, 100, 200,
|
||||||
|
}
|
||||||
|
var p SegmentedPath
|
||||||
|
TraceCubic(&p, c, flatteningThreshold)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOutOfRangeTraceQuad(t *testing.T) {
|
||||||
|
c := []float64{
|
||||||
|
100, 100, 200, 100,
|
||||||
|
}
|
||||||
|
var p SegmentedPath
|
||||||
|
TraceQuad(&p, c, flatteningThreshold)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue