@a2f0/skyline 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +20 -0
- package/README.md +52 -2
- package/docs/package.md +222 -0
- package/docs/skyline-geography.md +503 -0
- package/lib/models/aon-center.d.ts +4 -0
- package/lib/models/aon-center.js +60 -0
- package/lib/models/aon-geographic.d.ts +9 -0
- package/lib/models/aon-geographic.js +35 -0
- package/lib/models/aon-tower.d.ts +23 -0
- package/lib/models/aon-tower.js +130 -0
- package/lib/models/blue-cross-geographic.d.ts +14 -0
- package/lib/models/blue-cross-geographic.js +248 -0
- package/lib/models/borg-warner-geographic.d.ts +20 -0
- package/lib/models/borg-warner-geographic.js +143 -0
- package/lib/models/buckingham-geographic.d.ts +10 -0
- package/lib/models/buckingham-geographic.js +121 -0
- package/lib/models/building-kit.d.ts +84 -0
- package/lib/models/building-kit.js +358 -0
- package/lib/models/celebrations.d.ts +39 -0
- package/lib/models/celebrations.js +44 -0
- package/lib/models/chicago-athletic-association-geographic.d.ts +32 -0
- package/lib/models/chicago-athletic-association-geographic.js +173 -0
- package/lib/models/crain-communications.d.ts +5 -0
- package/lib/models/crain-communications.js +75 -0
- package/lib/models/crain-geographic.d.ts +10 -0
- package/lib/models/crain-geographic.js +69 -0
- package/lib/models/crain-tower.d.ts +32 -0
- package/lib/models/crain-tower.js +378 -0
- package/lib/models/facade-grid.d.ts +18 -0
- package/lib/models/facade-grid.js +176 -0
- package/lib/models/gage-geographic.d.ts +19 -0
- package/lib/models/gage-geographic.js +154 -0
- package/lib/models/heritage-at-millennium-park.d.ts +3 -0
- package/lib/models/heritage-at-millennium-park.js +284 -0
- package/lib/models/heritage-geographic.d.ts +11 -0
- package/lib/models/heritage-geographic.js +208 -0
- package/lib/models/hyatt-west-tower-geographic.d.ts +26 -0
- package/lib/models/hyatt-west-tower-geographic.js +86 -0
- package/lib/models/keith-ascher-geographic.d.ts +29 -0
- package/lib/models/keith-ascher-geographic.js +110 -0
- package/lib/models/kemper-geographic.d.ts +8 -0
- package/lib/models/kemper-geographic.js +153 -0
- package/lib/models/kemper.d.ts +2 -0
- package/lib/models/kemper.js +78 -0
- package/lib/models/lake-view-geographic.d.ts +15 -0
- package/lib/models/lake-view-geographic.js +134 -0
- package/lib/models/maclean-center-geographic.d.ts +20 -0
- package/lib/models/maclean-center-geographic.js +162 -0
- package/lib/models/michigan-boulevard-geographic.d.ts +12 -0
- package/lib/models/michigan-boulevard-geographic.js +157 -0
- package/lib/models/michigan-plaza-south-geographic.d.ts +7 -0
- package/lib/models/michigan-plaza-south-geographic.js +84 -0
- package/lib/models/michigan-plaza-south.d.ts +2 -0
- package/lib/models/michigan-plaza-south.js +68 -0
- package/lib/models/millennium-park-plaza-geographic.d.ts +9 -0
- package/lib/models/millennium-park-plaza-geographic.js +103 -0
- package/lib/models/monroe-geographic.d.ts +19 -0
- package/lib/models/monroe-geographic.js +177 -0
- package/lib/models/north-michigan-180-geographic.d.ts +14 -0
- package/lib/models/north-michigan-180-geographic.js +117 -0
- package/lib/models/north-wabash-geographic.d.ts +14 -0
- package/lib/models/north-wabash-geographic.js +122 -0
- package/lib/models/on-the-park-geographic.d.ts +11 -0
- package/lib/models/on-the-park-geographic.js +245 -0
- package/lib/models/one-prudential-geographic.d.ts +12 -0
- package/lib/models/one-prudential-geographic.js +55 -0
- package/lib/models/one-prudential-plaza.d.ts +5 -0
- package/lib/models/one-prudential-plaza.js +72 -0
- package/lib/models/one-prudential-tower.d.ts +45 -0
- package/lib/models/one-prudential-tower.js +246 -0
- package/lib/models/peoples-gas-geographic.d.ts +23 -0
- package/lib/models/peoples-gas-geographic.js +250 -0
- package/lib/models/railway-exchange-geographic.d.ts +18 -0
- package/lib/models/railway-exchange-geographic.js +176 -0
- package/lib/models/river-plaza-geographic.d.ts +16 -0
- package/lib/models/river-plaza-geographic.js +104 -0
- package/lib/models/sheraton-grand-geographic.d.ts +24 -0
- package/lib/models/sheraton-grand-geographic.js +112 -0
- package/lib/models/six-north-michigan-geographic.d.ts +16 -0
- package/lib/models/six-north-michigan-geographic.js +180 -0
- package/lib/models/skyline-geography-data.d.ts +44 -0
- package/lib/models/skyline-geography-data.js +607 -0
- package/lib/models/skyline-geography.d.ts +23 -0
- package/lib/models/skyline-geography.js +322 -0
- package/lib/models/swissotel-geographic.d.ts +24 -0
- package/lib/models/swissotel-geographic.js +79 -0
- package/lib/models/three-illinois-center-geographic.d.ts +26 -0
- package/lib/models/three-illinois-center-geographic.js +86 -0
- package/lib/models/trump-geographic.d.ts +14 -0
- package/lib/models/trump-geographic.js +51 -0
- package/lib/models/trump-international-tower.d.ts +4 -0
- package/lib/models/trump-international-tower.js +84 -0
- package/lib/models/trump-tower.d.ts +43 -0
- package/lib/models/trump-tower.js +229 -0
- package/lib/models/two-illinois-center-geographic.d.ts +26 -0
- package/lib/models/two-illinois-center-geographic.js +85 -0
- package/lib/models/two-prudential-geographic.d.ts +25 -0
- package/lib/models/two-prudential-geographic.js +47 -0
- package/lib/models/two-prudential-plaza.d.ts +8 -0
- package/lib/models/two-prudential-plaza.js +55 -0
- package/lib/models/two-prudential-tower.d.ts +53 -0
- package/lib/models/two-prudential-tower.js +441 -0
- package/lib/models/university-club-geographic.d.ts +24 -0
- package/lib/models/university-club-geographic.js +217 -0
- package/lib/models/willoughby-tower-geographic.d.ts +17 -0
- package/lib/models/willoughby-tower-geographic.js +195 -0
- package/lib/models/window-illumination.d.ts +14 -0
- package/lib/models/window-illumination.js +64 -0
- package/lib/package-assets.d.ts +5 -0
- package/lib/package-assets.js +9 -0
- package/lib/skyline-package.d.ts +23 -0
- package/lib/skyline-package.js +25 -0
- package/lib/skyline-scene.d.ts +25 -0
- package/lib/skyline-scene.js +86 -0
- package/lib/study-types.d.ts +49 -0
- package/lib/study-types.js +1 -0
- package/lib/vendor/three-r186.d.ts +1 -0
- package/lib/vendor/three-r186.js +1 -0
- package/package.json +64 -4
- package/site/building-detail.html +54 -0
- package/site/building-detail.js +84 -0
- package/site/building-study.html +58 -0
- package/site/building-study.js +3 -0
- package/site/index.html +407 -0
- package/site/models/aon-center.js +60 -0
- package/site/models/aon-geographic.js +35 -0
- package/site/models/aon-tower.js +130 -0
- package/site/models/blue-cross-geographic.js +248 -0
- package/site/models/borg-warner-geographic.js +143 -0
- package/site/models/buckingham-geographic.js +121 -0
- package/site/models/building-kit.js +358 -0
- package/site/models/celebrations.js +44 -0
- package/site/models/chicago-athletic-association-geographic.js +173 -0
- package/site/models/crain-communications.js +75 -0
- package/site/models/crain-geographic.js +69 -0
- package/site/models/crain-reference.svg +10 -0
- package/site/models/crain-tower.js +378 -0
- package/site/models/facade-grid.js +176 -0
- package/site/models/gage-geographic.js +154 -0
- package/site/models/heritage-at-millennium-park.js +284 -0
- package/site/models/heritage-geographic.js +208 -0
- package/site/models/hyatt-west-tower-geographic.js +86 -0
- package/site/models/keith-ascher-geographic.js +110 -0
- package/site/models/kemper-geographic.js +153 -0
- package/site/models/kemper.js +78 -0
- package/site/models/lake-view-geographic.js +134 -0
- package/site/models/maclean-center-geographic.js +162 -0
- package/site/models/michigan-boulevard-geographic.js +157 -0
- package/site/models/michigan-plaza-south-geographic.js +84 -0
- package/site/models/michigan-plaza-south.js +68 -0
- package/site/models/millennium-park-plaza-geographic.js +103 -0
- package/site/models/monroe-geographic.js +177 -0
- package/site/models/north-michigan-180-geographic.js +117 -0
- package/site/models/north-wabash-geographic.js +122 -0
- package/site/models/on-the-park-geographic.js +245 -0
- package/site/models/one-prudential-geographic.js +55 -0
- package/site/models/one-prudential-plaza.js +72 -0
- package/site/models/one-prudential-tower.js +246 -0
- package/site/models/peoples-gas-geographic.js +250 -0
- package/site/models/railway-exchange-geographic.js +176 -0
- package/site/models/river-plaza-geographic.js +104 -0
- package/site/models/sheraton-grand-geographic.js +112 -0
- package/site/models/six-north-michigan-geographic.js +180 -0
- package/site/models/skyline-geography-data.js +607 -0
- package/site/models/skyline-geography.js +322 -0
- package/site/models/skyline-panorama.svg +3491 -0
- package/site/models/skyline-reference.svg +3090 -0
- package/site/models/swissotel-geographic.js +79 -0
- package/site/models/three-illinois-center-geographic.js +86 -0
- package/site/models/trump-geographic.js +51 -0
- package/site/models/trump-international-tower.js +84 -0
- package/site/models/trump-tower.js +229 -0
- package/site/models/two-illinois-center-geographic.js +85 -0
- package/site/models/two-prudential-geographic.js +47 -0
- package/site/models/two-prudential-plaza.js +55 -0
- package/site/models/two-prudential-tower.js +441 -0
- package/site/models/university-club-geographic.js +217 -0
- package/site/models/willoughby-tower-geographic.js +195 -0
- package/site/models/window-illumination.js +64 -0
- package/site/skyline-3d.html +92 -0
- package/site/skyline-3d.js +333 -0
- package/site/skyline-animated.svg +18795 -0
- package/site/skyline-comparison.js +97 -0
- package/site/skyline-original-fit.svg +18312 -0
- package/site/skyline-scene.js +86 -0
- package/site/skyline-study.html +83 -0
- package/site/skyline-study.js +109 -0
- package/site/skyline-webgl.html +667 -0
- package/site/stars.svg +176 -0
- package/site/study-loader.js +20 -0
- package/site/study-types.js +1 -0
- package/site/study-viewer.js +605 -0
- package/site/study.css +204 -0
- package/site/vendor/THREE-LICENSE.txt +21 -0
- package/site/vendor/three-r186.js +4228 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import * as THREE from "./vendor/three-r186.js";
|
|
2
|
+
import { geographicBuildings } from "./models/skyline-geography-data.js";
|
|
3
|
+
import { footprintMetrics, geographicOrigin } from "./models/skyline-geography.js";
|
|
4
|
+
import { createGeographicSkyline } from "./skyline-scene.js";
|
|
5
|
+
export { createGeographicSkyline, skylineAzimuth } from "./skyline-scene.js";
|
|
6
|
+
// The drawing has no geographic position. Register the two scenes at Crain's
|
|
7
|
+
// center without changing the original models, rotations, or skyline camera.
|
|
8
|
+
// The drawing shown under each layout's scene.
|
|
9
|
+
const drawings = {
|
|
10
|
+
original: {
|
|
11
|
+
src: "models/skyline-reference.svg",
|
|
12
|
+
alt: "Original SVG geometry showing the Heritage at Millennium Park's bowed, finned crown and rooftop screen, Kemper's vertical ribs, Crain's diamond roof, the dark, gridded Michigan Plaza South tower, Trump International Hotel and Tower's stepped shaft and spire, One Prudential Plaza's punch-card slab under a tall antenna mast, Two Prudential Plaza's chevrons and spire, and Aon Center's granite piers",
|
|
13
|
+
},
|
|
14
|
+
geographic: {
|
|
15
|
+
src: "models/skyline-panorama.svg",
|
|
16
|
+
alt: "The whole drawn skyline, every building the drawing shows, from the Railway Exchange Building on the left to the towers around The Buckingham on the right",
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
export function createSkylineComparison(models, anchor) {
|
|
20
|
+
const { ground, layout, comparisonViews: views, labels } = createGeographicSkyline([anchor.x, anchor.y, anchor.z]);
|
|
21
|
+
const layouts = { geographic: layout };
|
|
22
|
+
const number = (n) => n.toFixed(1);
|
|
23
|
+
const signed = (n) => `${n >= 0 ? "+" : "−"}${Math.abs(n).toFixed(1)}`;
|
|
24
|
+
const tbody = document.querySelector("#dimensions-body");
|
|
25
|
+
for (const record of geographicBuildings) {
|
|
26
|
+
// A mapped building the drawing does not model, such as 330 North Wabash, has no
|
|
27
|
+
// original extents to compare.
|
|
28
|
+
const model = models.find((entry) => entry.building.userData["buildingId"] === record.id);
|
|
29
|
+
model?.building.updateMatrixWorld(true);
|
|
30
|
+
const min = [Infinity, Infinity], max = [-Infinity, -Infinity];
|
|
31
|
+
let highest = 0;
|
|
32
|
+
model?.building.traverse((child) => {
|
|
33
|
+
const mesh = child;
|
|
34
|
+
if (!mesh.isMesh)
|
|
35
|
+
return;
|
|
36
|
+
const positions = mesh.geometry.getAttribute("position"), point = new THREE.Vector3();
|
|
37
|
+
for (let i = 0; i < positions.count; i += 1) {
|
|
38
|
+
point.fromBufferAttribute(positions, i).applyMatrix4(mesh.matrixWorld);
|
|
39
|
+
highest = Math.max(highest, point.y);
|
|
40
|
+
if (point.y > 0.2)
|
|
41
|
+
continue;
|
|
42
|
+
[point.x, point.z].forEach((n, axis) => { min[axis] = Math.min(min[axis], n); max[axis] = Math.max(max[axis], n); });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const footprint = footprintMetrics(record.footprint.coordinates);
|
|
46
|
+
const row = document.createElement("tr");
|
|
47
|
+
const name = document.createElement("th");
|
|
48
|
+
name.scope = "row";
|
|
49
|
+
const link = document.createElement("a");
|
|
50
|
+
link.href = `https://www.openstreetmap.org/way/${record.footprint.way}`;
|
|
51
|
+
link.textContent = record.shortName;
|
|
52
|
+
name.append(link);
|
|
53
|
+
row.append(name);
|
|
54
|
+
const values = [
|
|
55
|
+
`${signed(footprint.center[0])}, ${signed(footprint.center[1])}`,
|
|
56
|
+
model ? `${number(max[0] - min[0])} × ${number(max[1] - min[1])}` : "not modeled",
|
|
57
|
+
`${number(footprint.size[0])} × ${number(footprint.size[1])}`,
|
|
58
|
+
model ? `${number(highest)} → ${number(record.tipHeight)} (${signed(record.tipHeight - highest)})` : `— → ${number(record.tipHeight)}`,
|
|
59
|
+
];
|
|
60
|
+
for (const value of values) {
|
|
61
|
+
const cell = document.createElement("td");
|
|
62
|
+
cell.textContent = value;
|
|
63
|
+
row.append(cell);
|
|
64
|
+
}
|
|
65
|
+
const source = document.createElement("td");
|
|
66
|
+
const height = document.createElement("a");
|
|
67
|
+
height.href = record.heightSource;
|
|
68
|
+
height.textContent = record.heightFromDrawing ? `${record.height} m, measured on the drawing` : `${record.height} m architectural${record.heightSource.startsWith("https://www.openstreetmap.org/way/") ? " (OSM)" : ""}`;
|
|
69
|
+
source.append(height, document.createElement("br"), record.note);
|
|
70
|
+
row.append(source);
|
|
71
|
+
tbody.append(row);
|
|
72
|
+
}
|
|
73
|
+
document.querySelector("#coordinate-origin").textContent = `${geographicOrigin[1].toFixed(7)}° N, ${Math.abs(geographicOrigin[0]).toFixed(7)}° W`;
|
|
74
|
+
const streetButton = document.querySelector("#streets");
|
|
75
|
+
function onLayoutChange(name) {
|
|
76
|
+
const geographic = name === "geographic";
|
|
77
|
+
streetButton.disabled = !geographic;
|
|
78
|
+
document.querySelector("#layout-status").textContent = geographic
|
|
79
|
+
? "Geographic layout · mapped footprints and published heights, or heights read on the drawing where none is published, with detailed facades on all thirty-four buildings. Skyline view: the drawing’s camera, on the lakefront by the Adler Planetarium. Light grey outlines: mapped ground coverage. Grey lines: street centerlines. Grid: 100 m."
|
|
80
|
+
: "Original layout · proportions and spacing fitted to the drawing. Use ground plan or height comparison, then toggle layouts to compare at the same camera scale.";
|
|
81
|
+
document.querySelector("#model-caption").textContent = geographic ? "01 / geographic study" : "01 / original 3D study";
|
|
82
|
+
// The drawing under the scene frames what the scene does: the whole skyline for the
|
|
83
|
+
// geographic layout, the excerpt the original layout is fitted to otherwise.
|
|
84
|
+
const drawing = document.querySelector(".reference img"), { src, alt } = drawings[geographic ? "geographic" : "original"];
|
|
85
|
+
if (drawing.getAttribute("src") !== src)
|
|
86
|
+
drawing.src = src;
|
|
87
|
+
drawing.alt = alt;
|
|
88
|
+
}
|
|
89
|
+
function connect(viewer) {
|
|
90
|
+
streetButton.addEventListener("click", () => {
|
|
91
|
+
ground.streets.visible = !ground.streets.visible;
|
|
92
|
+
streetButton.setAttribute("aria-pressed", String(ground.streets.visible));
|
|
93
|
+
viewer.requestRender();
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return { layouts, views, labels, onLayoutChange, connect };
|
|
97
|
+
}
|