MCPcopy Create free account
hub / github.com/cogentcore/core / Plot

Method Plot

plot/plots/line.go:100–192  ·  view source on GitHub ↗

Plot draws the Line, implementing the plot.Plotter interface.

(plt *plot.Plot)

Source from the content-addressed store, hash-verified

98
99// Plot draws the Line, implementing the plot.Plotter interface.
100func (pts *Line) Plot(plt *plot.Plot) {
101 pc := plt.Paint
102
103 ps := plot.PlotXYs(plt, pts.XYs)
104 np := len(ps)
105 pts.PXYs = ps
106
107 if pts.Fill != nil {
108 pc.FillStyle.Color = pts.Fill
109 minY := plt.PY(plt.Y.Min)
110 prev := math32.Vec2(ps[0].X, minY)
111 pc.MoveTo(prev.X, prev.Y)
112 for i := range ps {
113 pt := ps[i]
114 switch pts.StepStyle {
115 case NoStep:
116 if pt.X < prev.X {
117 pc.LineTo(prev.X, minY)
118 pc.ClosePath()
119 pc.MoveTo(pt.X, minY)
120 }
121 pc.LineTo(pt.X, pt.Y)
122 case PreStep:
123 if i == 0 {
124 continue
125 }
126 if pt.X < prev.X {
127 pc.LineTo(prev.X, minY)
128 pc.ClosePath()
129 pc.MoveTo(pt.X, minY)
130 } else {
131 pc.LineTo(prev.X, pt.Y)
132 }
133 pc.LineTo(pt.X, pt.Y)
134 case MidStep:
135 if pt.X < prev.X {
136 pc.LineTo(prev.X, minY)
137 pc.ClosePath()
138 pc.MoveTo(pt.X, minY)
139 } else {
140 pc.LineTo(0.5*(prev.X+pt.X), prev.Y)
141 pc.LineTo(0.5*(prev.X+pt.X), pt.Y)
142 }
143 pc.LineTo(pt.X, pt.Y)
144 case PostStep:
145 if pt.X < prev.X {
146 pc.LineTo(prev.X, minY)
147 pc.ClosePath()
148 pc.MoveTo(pt.X, minY)
149 } else {
150 pc.LineTo(pt.X, prev.Y)
151 }
152 pc.LineTo(pt.X, pt.Y)
153 }
154 prev = pt
155 }
156 pc.LineTo(prev.X, minY)
157 pc.ClosePath()

Callers

nothing calls this directly

Calls 9

PlotXYsFunction · 0.92
Vec2Function · 0.92
PYMethod · 0.80
MoveToMethod · 0.80
LineToMethod · 0.80
ClosePathMethod · 0.80
StrokeMethod · 0.80
FillMethod · 0.65
SetStrokeMethod · 0.45

Tested by

no test coverage detected