function draw(event, d) {
env.color = getColor()
env.colorScale = d3.scaleOrdinal(colors).domain(env.color)
env.lineHeight = env.graphH / env.nLines * 0.8;
if (event) {
var t = event.transform
env.xt = t.rescaleX(env.xScale);
} else {
env.xt = env.xScale;
}
env.svg.select('.x-grid').call(env.xGrid.scale(env.xt));
env.svg.selectAll(".rectangle").remove();
env.svg.selectAll(".interval").remove();
env.svg.selectAll(".clas").remove();
env.svg.selectAll(".clasr").remove();
env.svg.selectAll(".clasl").remove();
var group = env.g.selectAll(".rectangle")
.data(env.structData);
var gEnter = group.enter()
.append("g")
.attr("class", "rectangle")
.attr("fill", function (d, i) { return env.colorScale(d.label); })
.attr("transform", function (d) {
return "translate(" + env.xt(d.start) + "," + (env.yScale(d.sub) - env.lineHeight / 2) + ")";
})
.attr("id", function (d) { return d.clas; })
.attr("xstart", function (d) { return env.xt(d.start) })
.attr("ystart", function (d) { return (env.yScale(d.sub) - env.lineHeight / 2) })
.call(d3.drag()
.subject(dragsubject)
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended))
.append("svg")
.attr("class", function (d) { return "interval " + d.clas; })
.attr("width", function (d) { return env.xt(d.finish) - env.xt(d.start) })
.attr("height", env.lineHeight);
gEnter.append("rect")
.attr("class", function (d) { return "rectband " + d.clas; })
.attr("width", function (d) { return env.xt(d.finish) - env.xt(d.start) })
.attr("height", env.lineHeight)
.style("opacity", .5) // set the element opacity
.style("stroke", "black");
gEnter.append("text")
.attr("class", function (d) { return "interval " + d.clas; })
.attr("x", 6)
.attr("y", 9)
.style("pointer-events", "none")
.style("fill", "black")
.attr("font-size", 11)
.attr("font-family", "Cambria")
.text(function (d) { return (d.description); });
var lEnter = group.enter()
.append("rect")
.attr("width", function (d) { return env.xt(new Date(d.finish)) - env.xt(new Date(d.start)) })
.attr("x", function (d) { return env.xt(d.start) })
.attr("y", function (d) { return env.yScale(d.sub) - env.lineHeight / 2 })
.attr("class", function (d) { return "lefthand clasl " + d.clas; })
.attr("idx", function (d) { return d.id; })
.attr("start", function (d) { return d.start; })
.attr("height", env.lineHeight)
.attr("id", "dragleft")
.attr("width", 2)
.attr("fill", "#4A235A")
.attr("fill-opacity", 1)
.attr("cursor", "ew-resize")
.attr("xstart", function (d) { return env.xt(d.start) })
.attr("ystart", function (d) { return (env.yScale(d.sub) - env.lineHeight / 2) })
.call(d3.drag()
.subject(function () {
return {
};
})
.on("start", dragstartedl)
.on("drag", draggedl)
.on("end", dragendedl))
var rEnter = group.enter()
.append("rect")
.attr("x", function (d) { return env.xt(d.finish) - 2 })
.attr("y", function (d) { return env.yScale(d.sub) - env.lineHeight / 2 })
.attr("class", function (d) { return "righthand clasr " + d.clas; })
.attr("idx", function (d) { return d.id; })
.attr("start", function (d) { return d.start; })
.attr("height", env.lineHeight)
.attr("id", "dragright")
.attr("width", 2)
.attr("fill", "#4A235A")
.attr("fill-opacity", 1)
.attr("cursor", "ew-resize")
.call(d3.drag()
.on("start", dragstartedr)
.on("drag", draggedr)
.on("end", dragendedr));
group = group.merge(gEnter);
}