d3.gnarly = {}; d3.gnarly.circle = function(r,c,w,fillColor,strokeColor,selection) { selection.append("circle").attr("class", "gnarly").attr("r", r).attr("cx", c[0]).attr("cy", c[1]).style("fill", fillColor) r = r * 1.5; //divide width by two to get the offset var z = w /2; var gCirclePoints = []; gCirclePoints.push([c[0],c[1] + r - (r * .35)]); gCirclePoints.push([c[0],c[1] + r - (r * .25)]); gCirclePoints.push([c[0] + (r + (z * .375)) * .3,c[1] + (r - (r * .25)) * .9]); gCirclePoints.push([c[0] + (r * .9) + (z * .375),c[1] - (r * .1)]); gCirclePoints.push([c[0],c[1] - (r * 1) - (z * .5)]); gCirclePoints.push([c[0] - (r * .9) - (z * .35),c[1] - (r * .1)]); gCirclePoints.push([c[0] - (r + (z * .95)) * .4,c[1] + (r - (r * .25)) * .9]); gCirclePoints.push([c[0],c[1] + (r * .9) + (z) - (r * .25)]); gCirclePoints.push([c[0],c[1] + (r * .9) - (z) - (r * .25)]); gCirclePoints.push([c[0] - (r - (z * .95)) * .3,c[1] + (r - (r * .25)) * .9]); gCirclePoints.push([c[0] - (r * .9) + (z * .75),c[1] - (r * .1)]); gCirclePoints.push([c[0],c[1] - (r * 1) + (z * .5)]); gCirclePoints.push([c[0] + (r * .9) - (z * .375),c[1] - (r * .1)]); gCirclePoints.push([c[0] + (r - (z * .375)) * .3,c[1] + (r - (r * .25)) * .9]); gCirclePoints.push([c[0],c[1] + r - (r * .35)]); gnarlyC = d3.svg.line() .x(function(d,i) { return d[0] }) .y(function(d) { return d[1] }) .interpolate("basis") selection.append("path").attr("class", "gnarly").attr("d", gnarlyC(gCirclePoints)).style("stroke", "none").style("fill", strokeColor) } d3.gnarly.rect = function(rh,rw,w,c,fillColor,strokeColor,selection,jostle) { selection.append("rect").attr("class", "gnarly").attr("x", c[0]).attr("y", c[1]).attr("height", rh).attr("width", rw).style("fill", fillColor) var randomJostle = d3.scale.linear().domain([0,1]).range([-jostle,jostle]); var j = []; j.push(randomJostle(Math.random())); j.push(randomJostle(Math.random())); j.push(randomJostle(Math.random())); j.push(randomJostle(Math.random())); j.push(randomJostle(Math.random())); j.push(randomJostle(Math.random())); //divide width by two to get the offset var z = w /2; var gRectPoints = []; gRectPoints.push([c[0] + (z),c[1] + rh]); gRectPoints.push([c[0] - (z),c[1] + rh]); gRectPoints.push([c[0] - (z * .55) + j[0],c[1] - (z * .55) + j[1]]); gRectPoints.push([c[0] + rw + (z * .35) + j[2],c[1] - (z * .35) + j[3]]); gRectPoints.push([c[0] + rw + (z * .25) + j[4],c[1] + rh + (z * .25) + j[5]]); gRectPoints.push([c[0] + (z),c[1] + rh + (z * .1)]); gRectPoints.push([c[0] + (z),c[1] + rh - (z * .1)]); gRectPoints.push([c[0] + rw - (z * .25) + j[4],c[1] + rh - (z * .25) + j[5]]); gRectPoints.push([c[0] + rw - (z * .35) + j[2],c[1] + (z * .35) + j[3]]); gRectPoints.push([c[0] + (z * .55) + j[0],c[1] + (z * .55) + j[1]]); gRectPoints.push([c[0] + (z),c[1] + rh]); gnarlyC = d3.svg.line() .x(function(d,i) { return d[0] }) .y(function(d) { return d[1] }) .interpolate("linear") selection.append("path").attr("class", "gnarly").attr("d", gnarlyC(gRectPoints)).style("stroke", "none").style("fill", strokeColor) }