/* -------------------------- */ /* tracesPlugin */ /* -------------------------- */ var tracesPlugin = function tracesPlugin(cls = "traces") { let traceLineWidth = 2 let traceStrokeStyleLight = "rgba(128, 0, 255, 0.02)" let traceStroke = '#FF2400' // "red" let traceOpacity = 0.7 let traceFill = 'transparent' let traceLength = 5000 let tracePath = d => "M" + d.join("L") let traces = [] // get your actions together var layerMark var layerEnter var parentclass = "traces" var cls = cls // var elemsUpdate var elemsEnter var elemsMerge var elemsExit function tracesPlugin() { } tracesPlugin.render = function () { layerMark = d3.select("svg").selectAll("." + parentclass).data(['cls']) layerEnter = layerMark.enter().append("g").attr("class", parentclass) elemsUpdate = d3.select("." + parentclass).selectAll("." + cls).data(["path"]) elemsEnter = elemsUpdate.enter().insert("path") elemsMerge = elemsEnter.merge(elemsUpdate) .attr("class", cls) .attr("d", d => tracesPlugin.path()) .style("fill", function(d, i) { return traceFill }) .style("stroke", function(d) { return traceStroke }) .style("stroke-width", function(d) { return traceLineWidth }) .style("opacity", traceOpacity) elemsExit = elemsUpdate.exit().remove() } tracesPlugin.addstep = function (step) { traces.push(step) // add present traces.splice(0, traces.length - traceLength) // remove past } tracesPlugin.traces = function () { return traces } tracesPlugin.path = function () { return tracePath(traces) } tracesPlugin.clear = function() { traces = [] let p = d3.select("." + parentclass).selectAll("." + cls).remove() } tracesPlugin.hc = function(_) { if (arguments.length < 1) return traceLength traceLength = _ return tracesPlugin } tracesPlugin.hs = function(_) { if (arguments.length < 1) return traceStroke traceStroke = _ return tracesPlugin } tracesPlugin.ho = function(_) { if (arguments.length < 1) return traceOpacity traceOpacity = _ return tracesPlugin } return tracesPlugin } ;