function county3D(county, type) {
let pt_string_top = '';
let pt_string_bot = '';
let h = height(county, type);
county.pts.map(function(pt) {
pt_string_top = `${pt_string_top}${pt[0]} ${pt[1]} ${h}, `;
pt_string_bot = `${pt_string_bot}${pt[0]} ${pt[1]} 0, `;
});
let pt_string = pt_string_top + pt_string_bot;
let top_coord_string = '';
county.triangles.map(function(t) {
top_coord_string = `${top_coord_string}${t[0]} ${t[1]} ${t[2]} -1 `;
});
let n = county.pts.length;
let side_coord_string = '';
county.segments.map(function(s) {
side_coord_string = `${side_coord_string}${s[0]} ${s[1]} ${s[1] +
n} ${s[0] + n} -1 `;
});
let coord_string = `${top_coord_string} ${side_coord_string}`;
let color;
if (type == 'HD' || type == 'VD') {
let density =
county.properties.pop /
(county.properties.ALAND + county.properties.AWATER);
color = d3.interpolateBlues((density / max_density) ** 0.2);
} else if (type == 'HP' || type == 'VP') {
color = d3.interpolateBlues((county.properties.pop / max_pop) ** 0.2);
}
let g = d3.create('group');
let shape = g.append('shape');
let appearance = shape.append('appearance');
appearance
.append('material')
.attr('transparency', 1)
.attr('diffuseColor', color);
let ifs = shape
.append('IndexedFaceSet')
.attr('solid', 'false')
.attr('coordIndex', coord_string);
ifs.append('coordinate').attr('point', pt_string);
return g.node();
}