Skip to content

Commit 012fa55

Browse files
committed
Mouseover effects for setcover problem viz
1 parent 83c70ea commit 012fa55

3 files changed

Lines changed: 77 additions & 10 deletions

File tree

setcover/setcover.css

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,18 @@ SOFTWARE.
2323
*/
2424

2525
div.tooltip {
26-
width: 100px;
26+
min-width: 100px;
2727
}
2828
.graph line.highlighted {
2929
stroke-width: 4;
3030
}
31+
/*
3132
line.highlighted {
3233
stroke: #4488ff;
3334
}
35+
*/
3436

35-
circle.highlighted {
37+
circle.highlighted, rect.highlighted{
3638
stroke-width: 3;
3739
stroke: #4488ff;
3840
}

setcover/setcover.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<tbody>
3030
</tbody>
3131
</table>
32+
View:
3233
<select name="vizType" id="vizType" onchange="selectViz(this.value)">
3334
<option value="forceGraph">Force Graph</option>
3435
<option value="bipartiteGraph">Bipartite Graph</option>

setcover/setcover.js

Lines changed: 72 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,14 @@ function vizBenchmark() {
200200
.enter()
201201
.append("rect")
202202
.attr("id", function (d) { return "setPnt" + d.i; })
203-
.attr("fill", function(d) {return colors[d.i];})
203+
.attr("fill", function(d) {return colors[d.i];})
204+
.attr("class", function(d) {
205+
var classes = "set"+d.i
206+
for (var i = 0; i < d.items.length; i++) {
207+
classes = classes + " item"+d.items[i];
208+
}
209+
return classes;
210+
})
204211
.style("opacity", 1)
205212
.call(force.drag)
206213
.on("dblclick", function(d) { d.fixed = false; })
@@ -216,21 +223,45 @@ function vizBenchmark() {
216223
.style("opacity", .85)
217224
.style("left", (left) + "px")
218225
.style("top", (d3.event.pageY - 25) + "px");
219-
div.html("Set " + d.i);
226+
div.html("Set " + d.i + ". Cost: " + d.cost);
227+
220228
svg.selectAll(".set"+d.i)
221-
// .transition()
222-
// .duration(20)
223229
.classed("highlighted", true);
224-
225-
})
230+
var connectors = svg.append("g")
231+
.attr("id", "set"+d.i+"g")
232+
.style("pointer-events", "none");
233+
for (var i = 0; i < d.items.length; i++) {
234+
var item = items[d.items[i]];
235+
var link = svg.select("line#set"+d.i+"item"+item.i);
236+
var linkX = (parseFloat(link.attr("x1")) + parseFloat(link.attr("x2")))/2;
237+
var linkY = (parseFloat(link.attr("y1")) + parseFloat(link.attr("y2")))/2;
238+
connectors.append("line")
239+
.attr("stroke", "#4488ff")
240+
.attr("stroke-width", 4)
241+
.attr("x1", d.x)
242+
.attr("y1", d.y)
243+
.attr("x2", linkX)
244+
.attr("y2", linkY);
245+
connectors.append("line")
246+
.attr("stroke", "#4488ff")
247+
.attr("stroke-width", 4)
248+
.attr("x1", item.x)
249+
.attr("y1", item.y)
250+
.attr("x2", linkX)
251+
.attr("y2", linkY);
252+
}
253+
})
226254
.on("mouseout", function (d) {
227255
div.transition()
228256
.duration(500)
229257
.style("opacity", 0);
230258
svg.selectAll(".set"+d.i)
231-
// .transition()
232-
// .duration(20)
233259
.classed("highlighted", false);
260+
svg.selectAll("g#set"+d.i+"g")
261+
.transition()
262+
.duration(100)
263+
.style("opacity",0)
264+
.remove();
234265
});
235266

236267
//items
@@ -264,11 +295,44 @@ function vizBenchmark() {
264295
.style("left", (left) + "px")
265296
.style("top", (d3.event.pageY - 25) + "px");
266297
div.html("Item " + d.i);
298+
299+
svg.selectAll(".item"+d.i)
300+
.classed("highlighted", true);
301+
var connectors = svg.append("g")
302+
.attr("id", "item"+d.i+"g")
303+
.style("pointer-events", "none");
304+
for (var i = 0; i < d.coveredBy.length; i++) {
305+
var theSet = sets[d.coveredBy[i]];
306+
var link = svg.select("line#set"+theSet.i+"item"+d.i);
307+
var linkX = (parseFloat(link.attr("x1")) + parseFloat(link.attr("x2")))/2;
308+
var linkY = (parseFloat(link.attr("y1")) + parseFloat(link.attr("y2")))/2;
309+
connectors.append("line")
310+
.attr("stroke", "#4488ff")
311+
.attr("stroke-width", 4)
312+
.attr("x1", d.x)
313+
.attr("y1", d.y)
314+
.attr("x2", linkX)
315+
.attr("y2", linkY);
316+
connectors.append("line")
317+
.attr("stroke", "#4488ff")
318+
.attr("stroke-width", 4)
319+
.attr("x1", theSet.x)
320+
.attr("y1", theSet.y)
321+
.attr("x2", linkX)
322+
.attr("y2", linkY);
323+
}
267324
})
268325
.on("mouseout", function (d) {
269326
div.transition()
270327
.duration(500)
271328
.style("opacity", 0);
329+
svg.selectAll(".item"+d.i)
330+
.classed("highlighted", false);
331+
svg.selectAll("g#item"+d.i+"g")
332+
.transition()
333+
.duration(100)
334+
.style("opacity",0)
335+
.remove();
272336
});
273337

274338
//links

0 commit comments

Comments
 (0)