{
function createCircleData(paddinLeft = 0, circleData){
return circleData.map(c => {
return {
"cx": c.cx + paddinLeft || 0,
"cy": c.cy || 0,
"r": c.r || 0,
"fill": c.fill || "none",
"stroke": c.stroke || "#555555",
"strokeWidth": c.strokeWidth || 4
}
});
}
const circleData = createCircleData(125, [
{ "cx": 0, "cy": 145, "r": 8, "fill": "#555555" },
{ "cx": 0, "cy": 145, "r": 16, "fill": "none" }
]);
const svgContainer = d3.select(DOM.svg(200, 200))
.style("width", "30%")
.style("height", "auto");
const circleGroup = svgContainer.append("g");
function createline(l){
return {
"x1": l.x1 || 0,
"x2": l.x2 || 0,
"y1": l.y1 || 0,
"y2": l.y2 || 0,
"stroke": l.stroke || "#555555",
"strokeWidth": l.strokeWidth || 4
}
}
addLinesToSvg(svgContainer);
function addLinesToSvg(container, baseheight = 100){
const paddingLeft = 100;
const paddingTop = 5;
const width = 40;
const numberFlippers = 5;
const hasHalfFlippers = true;
const data = [];
const base = createline({ "x1": paddingLeft, "x2": paddingLeft,
"y1": baseheight + width + paddingTop, "y2": width + paddingTop });
data.push(base);
let fliPadding = paddingTop;
for(let i = 0; i < numberFlippers; i++){
let flipper = createline({ "x1": paddingLeft, "x2": paddingLeft + width,
"y1": width + fliPadding, "y2": fliPadding });
fliPadding = fliPadding + 15;
data.push(flipper);
}
if(hasHalfFlippers){
fliPadding = numberFlippers === 0 ? paddingTop + 15 : fliPadding;
let flipper = createline({ "x1": paddingLeft, "x2": paddingLeft + width/2,
"y1": width + fliPadding, "y2": fliPadding + width/2 });
data.push(flipper);
}
container.selectAll("line")
.data(data)
.enter()
.append("line")
.attr("x1", d => d.x1)
.attr("x2", d => d.x2)
.attr("y1", d => d.y1)
.attr("y2", d => d.y2)
.attr("stroke", d => d.stroke)
.style("stroke-width", d => d.strokeWidth);
}
return svgContainer.node()
}