MCPcopy
hub / github.com/tdewolff/canvas / LineTo

Method LineTo

path.go:411–450  ·  view source on GitHub ↗

LineTo adds a linear path to (x,y).

(x, y float64)

Source from the content-addressed store, hash-verified

409
410// LineTo adds a linear path to (x,y).
411func (p *Path) LineTo(x, y float64) {
412 start := p.Pos()
413 end := Point{x, y}
414 if start.Equals(end) {
415 return
416 } else if cmdLen(LineToCmd) <= len(p.d) && p.d[len(p.d)-1] == LineToCmd {
417 prevStart := Point{}
418 if cmdLen(LineToCmd) < len(p.d) {
419 prevStart = Point{p.d[len(p.d)-cmdLen(LineToCmd)-3], p.d[len(p.d)-cmdLen(LineToCmd)-2]}
420 }
421
422 // divide by length^2 since otherwise the perpdot between very small segments may be
423 // below Epsilon
424 da := start.Sub(prevStart)
425 db := end.Sub(start)
426 div := da.PerpDot(db)
427 if length := da.Length() * db.Length(); Equal(div/length, 0.0) {
428 // lines are parallel
429 extends := false
430 if da.Y < da.X {
431 extends = math.Signbit(da.X) == math.Signbit(db.X)
432 } else {
433 extends = math.Signbit(da.Y) == math.Signbit(db.Y)
434 }
435 if extends {
436 //if Equal(end.Sub(start).AngleBetween(start.Sub(prevStart)), 0.0) {
437 p.d[len(p.d)-3] = x
438 p.d[len(p.d)-2] = y
439 return
440 }
441 }
442 }
443
444 if len(p.d) == 0 {
445 p.MoveTo(0.0, 0.0)
446 } else if p.d[len(p.d)-1] == CloseCmd {
447 p.MoveTo(p.d[len(p.d)-3], p.d[len(p.d)-2])
448 }
449 p.d = append(p.d, LineToCmd, end.X, end.Y, LineToCmd)
450}
451
452// QuadTo adds a quadratic Bézier path with control point (cpx,cpy) and end point (x,y).
453func (p *Path) QuadTo(cpx, cpy, x, y float64) {

Callers 15

PathMethod · 0.95
PathMethod · 0.95
bentleyOttmannFunction · 0.95
JoinMethod · 0.95
QuadToMethod · 0.95
CubeToMethod · 0.95
ArcToMethod · 0.95
replaceMethod · 0.95
SplitAtMethod · 0.95
ParseSVGPathFunction · 0.95
flattenEllipticArcFunction · 0.95
flattenQuadraticBezierFunction · 0.95

Calls 8

PosMethod · 0.95
SubMethod · 0.95
MoveToMethod · 0.95
cmdLenFunction · 0.85
EqualFunction · 0.85
PerpDotMethod · 0.80
EqualsMethod · 0.45
LengthMethod · 0.45

Tested by 2

TestPathEmptyFunction · 0.76
TestPathReplaceFunction · 0.76