@fnndsc/orrery 0.1.0
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/README.md +12 -0
- package/dist/controls/cameraRig.d.ts +223 -0
- package/dist/controls/cameraRig.js +353 -0
- package/dist/controls/cameraRig.js.map +1 -0
- package/dist/controls/gestures.d.ts +133 -0
- package/dist/controls/gestures.js +282 -0
- package/dist/controls/gestures.js.map +1 -0
- package/dist/controls/index.d.ts +9 -0
- package/dist/controls/index.js +10 -0
- package/dist/controls/index.js.map +1 -0
- package/dist/controls/picker.d.ts +117 -0
- package/dist/controls/picker.js +167 -0
- package/dist/controls/picker.js.map +1 -0
- package/dist/controls/replay.d.ts +94 -0
- package/dist/controls/replay.js +147 -0
- package/dist/controls/replay.js.map +1 -0
- package/dist/draw/censusField.d.ts +113 -0
- package/dist/draw/censusField.js +241 -0
- package/dist/draw/censusField.js.map +1 -0
- package/dist/draw/constants.d.ts +13 -0
- package/dist/draw/constants.js +14 -0
- package/dist/draw/constants.js.map +1 -0
- package/dist/draw/geometry.d.ts +33 -0
- package/dist/draw/geometry.js +55 -0
- package/dist/draw/geometry.js.map +1 -0
- package/dist/draw/handoff.d.ts +11 -0
- package/dist/draw/handoff.js +12 -0
- package/dist/draw/handoff.js.map +1 -0
- package/dist/draw/handoffField.d.ts +74 -0
- package/dist/draw/handoffField.js +151 -0
- package/dist/draw/handoffField.js.map +1 -0
- package/dist/draw/index.d.ts +20 -0
- package/dist/draw/index.js +21 -0
- package/dist/draw/index.js.map +1 -0
- package/dist/draw/labelField.d.ts +63 -0
- package/dist/draw/labelField.js +149 -0
- package/dist/draw/labelField.js.map +1 -0
- package/dist/draw/lamps.d.ts +16 -0
- package/dist/draw/lamps.js +17 -0
- package/dist/draw/lamps.js.map +1 -0
- package/dist/draw/nebula.d.ts +8 -0
- package/dist/draw/nebula.js +28 -0
- package/dist/draw/nebula.js.map +1 -0
- package/dist/draw/palette.d.ts +41 -0
- package/dist/draw/palette.js +32 -0
- package/dist/draw/palette.js.map +1 -0
- package/dist/draw/sphereField.d.ts +98 -0
- package/dist/draw/sphereField.js +168 -0
- package/dist/draw/sphereField.js.map +1 -0
- package/dist/draw/starField.d.ts +127 -0
- package/dist/draw/starField.js +267 -0
- package/dist/draw/starField.js.map +1 -0
- package/dist/draw/stars.d.ts +65 -0
- package/dist/draw/stars.js +132 -0
- package/dist/draw/stars.js.map +1 -0
- package/dist/draw/timing.d.ts +11 -0
- package/dist/draw/timing.js +12 -0
- package/dist/draw/timing.js.map +1 -0
- package/dist/draw/tubeField.d.ts +131 -0
- package/dist/draw/tubeField.js +352 -0
- package/dist/draw/tubeField.js.map +1 -0
- package/dist/draw/tubes.d.ts +41 -0
- package/dist/draw/tubes.js +116 -0
- package/dist/draw/tubes.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/accretion.d.ts +31 -0
- package/dist/layout/accretion.js +384 -0
- package/dist/layout/accretion.js.map +1 -0
- package/dist/layout/constellations.d.ts +25 -0
- package/dist/layout/constellations.js +197 -0
- package/dist/layout/constellations.js.map +1 -0
- package/dist/layout/galaxy.d.ts +12 -0
- package/dist/layout/galaxy.js +99 -0
- package/dist/layout/galaxy.js.map +1 -0
- package/dist/layout/hierarchy.d.ts +45 -0
- package/dist/layout/hierarchy.js +464 -0
- package/dist/layout/hierarchy.js.map +1 -0
- package/dist/layout/index.d.ts +20 -0
- package/dist/layout/index.js +21 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layoutInput.d.ts +29 -0
- package/dist/layout/layoutInput.js +45 -0
- package/dist/layout/layoutInput.js.map +1 -0
- package/dist/layout/molecule.d.ts +64 -0
- package/dist/layout/molecule.js +155 -0
- package/dist/layout/molecule.js.map +1 -0
- package/dist/layout/pull.d.ts +94 -0
- package/dist/layout/pull.js +137 -0
- package/dist/layout/pull.js.map +1 -0
- package/dist/layout/ranked.d.ts +75 -0
- package/dist/layout/ranked.js +148 -0
- package/dist/layout/ranked.js.map +1 -0
- package/dist/layout/registry.d.ts +23 -0
- package/dist/layout/registry.js +165 -0
- package/dist/layout/registry.js.map +1 -0
- package/dist/layout/seeded.d.ts +32 -0
- package/dist/layout/seeded.js +48 -0
- package/dist/layout/seeded.js.map +1 -0
- package/dist/layout/types.d.ts +81 -0
- package/dist/layout/types.js +14 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/scene/index.d.ts +6 -0
- package/dist/scene/index.js +7 -0
- package/dist/scene/index.js.map +1 -0
- package/dist/scene/orrery.d.ts +592 -0
- package/dist/scene/orrery.js +1555 -0
- package/dist/scene/orrery.js.map +1 -0
- package/dist/types/encoding.d.ts +43 -0
- package/dist/types/encoding.js +7 -0
- package/dist/types/encoding.js.map +1 -0
- package/dist/types/space.d.ts +12 -0
- package/dist/types/space.js +10 -0
- package/dist/types/space.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accretion.js","sourceRoot":"","sources":["../../src/layout/accretion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type LayoutNode, type PhysicsTerms, type Positions } from './types.js';
|
|
2
|
+
/** A plugin in more than this share of feeds is a landmark: no pull. */
|
|
3
|
+
export declare const LANDMARK_SHARE: number;
|
|
4
|
+
/**
|
|
5
|
+
* How much each plugin says about a feed: the log of feeds over feeds that
|
|
6
|
+
* ran it, zero for a landmark.
|
|
7
|
+
*
|
|
8
|
+
* @param feedsUsing - How many feeds ran each plugin.
|
|
9
|
+
* @param feeds - How many feeds there are.
|
|
10
|
+
* @returns Each plugin's weight.
|
|
11
|
+
*/
|
|
12
|
+
export declare function pluginWeights_of(feedsUsing: ReadonlyMap<string, number>, feeds: number): Map<string, number>;
|
|
13
|
+
/**
|
|
14
|
+
* Lays out a space as constellations.
|
|
15
|
+
*
|
|
16
|
+
* Nodes with `attrs.kind === 'star'` and `attrs.plugin` are the plugin
|
|
17
|
+
* stars; every other node with `attrs.plugin` is a stage of its `group`
|
|
18
|
+
* (the feed); anything else settles by its edges alone.
|
|
19
|
+
*
|
|
20
|
+
* @param nodes - Every node.
|
|
21
|
+
* @param physics - The terms of the settle.
|
|
22
|
+
* @param onProgress - Told how far it has come, 0..1.
|
|
23
|
+
* @returns Every node's position.
|
|
24
|
+
*/
|
|
25
|
+
export declare function constellations_layout(nodes: ReadonlyArray<LayoutNode>, physics: PhysicsTerms, onProgress?: (fraction: number) => void): Positions;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Constellations: a space arranged by what it ran.
|
|
3
|
+
*
|
|
4
|
+
* Every plugin is a star, placed first and alone: two plugins that many
|
|
5
|
+
* feeds ran together draw close, so the sky itself is a map of which tools
|
|
6
|
+
* go with which. Then the stars hold still and every feed settles against
|
|
7
|
+
* them, each stage pulled to its own plugin's star — a feed stretches
|
|
8
|
+
* between the stars it used, and feeds alike lie alike.
|
|
9
|
+
*
|
|
10
|
+
* A pull is weighted by how much a plugin SAYS about a feed: a plugin in
|
|
11
|
+
* every feed says nothing (IDF, log of feeds over feeds using it), so its
|
|
12
|
+
* pull is small, and a plugin in nearly all of them (a landmark, over nine
|
|
13
|
+
* in ten) pulls not at all; a feed's pull is shared across its distinct
|
|
14
|
+
* plugins, so a long pipeline is not dragged harder than a short one.
|
|
15
|
+
* Stars stand where their co-occurrence puts them, run to run — the start
|
|
16
|
+
* is seeded from the space itself.
|
|
17
|
+
*
|
|
18
|
+
* Pure: nodes in, positions out, run in the worker.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import { forceSimulation, forceLink, forceManyBody, forceCollide, forceCenter } from 'd3-force-3d';
|
|
23
|
+
import { randomFor_key } from './seeded.js';
|
|
24
|
+
import { NODE_RADIUS } from './types.js';
|
|
25
|
+
/** Ticks of the stars' own settle. */
|
|
26
|
+
const STAR_TICKS = 160;
|
|
27
|
+
/** Ticks of the feeds' settle against the held stars. */
|
|
28
|
+
const FEED_TICKS = 120;
|
|
29
|
+
/** How far a stage's repulsion carries: a crowd round a star stays round it. */
|
|
30
|
+
const STAGE_REACH = 5;
|
|
31
|
+
/** The pull on a stage from its plugin's star, for the rarest plugin; a common one pulls less. */
|
|
32
|
+
const STAR_PULL_MAX = 0.9;
|
|
33
|
+
/** The least pull a plugin that pulls at all exerts. */
|
|
34
|
+
const STAR_PULL_MIN = 0.3;
|
|
35
|
+
/** A plugin in more than this share of feeds is a landmark: no pull. */
|
|
36
|
+
export const LANDMARK_SHARE = 0.9;
|
|
37
|
+
/**
|
|
38
|
+
* How much each plugin says about a feed: the log of feeds over feeds that
|
|
39
|
+
* ran it, zero for a landmark.
|
|
40
|
+
*
|
|
41
|
+
* @param feedsUsing - How many feeds ran each plugin.
|
|
42
|
+
* @param feeds - How many feeds there are.
|
|
43
|
+
* @returns Each plugin's weight.
|
|
44
|
+
*/
|
|
45
|
+
export function pluginWeights_of(feedsUsing, feeds) {
|
|
46
|
+
const out = new Map();
|
|
47
|
+
for (const [plugin, count] of feedsUsing) {
|
|
48
|
+
out.set(plugin, feeds === 0 || count / feeds > LANDMARK_SHARE ? 0 : Math.log(feeds / Math.max(1, count)));
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Lays out a space as constellations.
|
|
54
|
+
*
|
|
55
|
+
* Nodes with `attrs.kind === 'star'` and `attrs.plugin` are the plugin
|
|
56
|
+
* stars; every other node with `attrs.plugin` is a stage of its `group`
|
|
57
|
+
* (the feed); anything else settles by its edges alone.
|
|
58
|
+
*
|
|
59
|
+
* @param nodes - Every node.
|
|
60
|
+
* @param physics - The terms of the settle.
|
|
61
|
+
* @param onProgress - Told how far it has come, 0..1.
|
|
62
|
+
* @returns Every node's position.
|
|
63
|
+
*/
|
|
64
|
+
export function constellations_layout(nodes, physics, onProgress = () => { }) {
|
|
65
|
+
const pluginOf = (node) => (typeof node.attrs?.['plugin'] === 'string' ? node.attrs['plugin'] : null);
|
|
66
|
+
const isStar = (node) => node.attrs?.['kind'] === 'star' && pluginOf(node) !== null;
|
|
67
|
+
const stars = nodes.filter(isStar);
|
|
68
|
+
const starOf = new Map(stars.map((star) => [pluginOf(star), star]));
|
|
69
|
+
const stages = nodes.filter((node) => !isStar(node));
|
|
70
|
+
// Which plugins each feed ran, and how many feeds ran each plugin.
|
|
71
|
+
const feedPlugins = new Map();
|
|
72
|
+
for (const node of stages) {
|
|
73
|
+
const plugin = pluginOf(node);
|
|
74
|
+
if (node.group === null || plugin === null || !starOf.has(plugin))
|
|
75
|
+
continue;
|
|
76
|
+
feedPlugins.set(node.group, (feedPlugins.get(node.group) ?? new Set()).add(plugin));
|
|
77
|
+
}
|
|
78
|
+
const feedsUsing = new Map();
|
|
79
|
+
for (const plugins of feedPlugins.values())
|
|
80
|
+
for (const plugin of plugins)
|
|
81
|
+
feedsUsing.set(plugin, (feedsUsing.get(plugin) ?? 0) + 1);
|
|
82
|
+
const weights = pluginWeights_of(feedsUsing, feedPlugins.size);
|
|
83
|
+
const heaviest = Math.max(1e-9, ...weights.values());
|
|
84
|
+
// Phase 1: the stars alone, drawn together by how often they ran together.
|
|
85
|
+
const together = new Map();
|
|
86
|
+
for (const plugins of feedPlugins.values()) {
|
|
87
|
+
const list = [...plugins].sort();
|
|
88
|
+
for (let i = 0; i < list.length; i++)
|
|
89
|
+
for (let j = i + 1; j < list.length; j++) {
|
|
90
|
+
const key = `${list[i]}\u0000${list[j]}`;
|
|
91
|
+
together.set(key, (together.get(key) ?? 0) + 1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Room for every stage round its star: the sky grows with what settles in it.
|
|
95
|
+
const skyRadius = Math.max(6, Math.sqrt(stars.length) * 4, Math.sqrt(stages.length) * 1.6);
|
|
96
|
+
const starBodies = stars.map((star) => body_of(star, skyRadius, randomFor_key(`star:${star.id}`)));
|
|
97
|
+
const starLinks = [];
|
|
98
|
+
for (const [key, count] of together) {
|
|
99
|
+
const [a, b] = key.split('\u0000');
|
|
100
|
+
const smaller = Math.min(feedsUsing.get(a) ?? 1, feedsUsing.get(b) ?? 1);
|
|
101
|
+
starLinks.push({ source: starOf.get(a).id, target: starOf.get(b).id, share: count / Math.max(1, smaller) });
|
|
102
|
+
}
|
|
103
|
+
if (starBodies.length > 0 && starBodies.some((body) => body.fx === undefined)) {
|
|
104
|
+
const sky = forceSimulation(starBodies, 3)
|
|
105
|
+
.force('link', forceLink(starLinks).id((d) => d.id)
|
|
106
|
+
.distance((link) => skyRadius * (1.1 - Number(link['share'])))
|
|
107
|
+
.strength((link) => 0.05 + 0.6 * Number(link['share'])))
|
|
108
|
+
.force('charge', forceManyBody().strength(-30).distanceMax(skyRadius * 3))
|
|
109
|
+
.force('collide', forceCollide().radius((d) => d.r * 3))
|
|
110
|
+
.force('center', forceCenter(0, 0, 0))
|
|
111
|
+
.stop();
|
|
112
|
+
for (let tick = 0; tick < STAR_TICKS; tick++) {
|
|
113
|
+
sky.tick();
|
|
114
|
+
if (tick % 4 === 0)
|
|
115
|
+
onProgress(0.4 * (tick / STAR_TICKS));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const starAt = new Map(starBodies.map((body) => [body.id, [body.x ?? 0, body.y ?? 0, body.z ?? 0]]));
|
|
119
|
+
onProgress(0.4);
|
|
120
|
+
// Phase 2: the stars held; every stage pulled to its plugin's star.
|
|
121
|
+
const all = [
|
|
122
|
+
...starBodies.map((body) => ({ ...body, fx: body.x ?? 0, fy: body.y ?? 0, fz: body.z ?? 0 })),
|
|
123
|
+
...stages.map((node) => {
|
|
124
|
+
const plugin = pluginOf(node);
|
|
125
|
+
const star = plugin === null ? undefined : starOf.get(plugin);
|
|
126
|
+
const near = star === undefined ? undefined : starAt.get(star.id);
|
|
127
|
+
return body_of(node, 2, randomFor_key(`stage:${node.id}`), near);
|
|
128
|
+
}),
|
|
129
|
+
];
|
|
130
|
+
const present = new Set(nodes.map((node) => node.id));
|
|
131
|
+
const radiusOf = new Map(nodes.map((node) => [node.id, node.radius]));
|
|
132
|
+
const links = [];
|
|
133
|
+
for (const node of stages) {
|
|
134
|
+
for (const parent of node.parents) {
|
|
135
|
+
if (!present.has(parent))
|
|
136
|
+
continue;
|
|
137
|
+
links.push({ source: parent, target: node.id, strength: 1, length: (radiusOf.get(parent) ?? NODE_RADIUS) + node.radius + 1.4 });
|
|
138
|
+
}
|
|
139
|
+
const plugin = pluginOf(node);
|
|
140
|
+
const star = plugin === null ? undefined : starOf.get(plugin);
|
|
141
|
+
const weight = plugin === null ? 0 : weights.get(plugin) ?? 0;
|
|
142
|
+
const shared = node.group === null ? 1 : Math.max(1, feedPlugins.get(node.group)?.size ?? 1);
|
|
143
|
+
if (star !== undefined && weight > 0) {
|
|
144
|
+
// The rarest plugin pulls hardest; a feed's pull is shared across its
|
|
145
|
+
// plugins, gently, so a long pipeline still reaches every star it ran.
|
|
146
|
+
const said = weight / heaviest;
|
|
147
|
+
const pull = (STAR_PULL_MIN + (STAR_PULL_MAX - STAR_PULL_MIN) * said) / Math.sqrt(shared);
|
|
148
|
+
links.push({ source: star.id, target: node.id, strength: pull, length: star.radius + node.radius + 1 });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const sim = forceSimulation(all, 3)
|
|
152
|
+
.force('link', forceLink(links).id((d) => d.id)
|
|
153
|
+
.distance((link) => Number(link['length']))
|
|
154
|
+
.strength((link) => Number(link['strength'])))
|
|
155
|
+
.stop();
|
|
156
|
+
if (physics.charge) {
|
|
157
|
+
const charge = forceManyBody().strength((d) => -6 * ((d.r / NODE_RADIUS) ** 2));
|
|
158
|
+
charge.distanceMax(Math.min(physics.reach ?? STAGE_REACH, STAGE_REACH));
|
|
159
|
+
sim.force('charge', charge);
|
|
160
|
+
}
|
|
161
|
+
if (physics.collide)
|
|
162
|
+
sim.force('collide', forceCollide().radius((d) => d.r * 1.2));
|
|
163
|
+
// A space whose every body is held has nothing to settle.
|
|
164
|
+
const moving = all.some((body) => body.fx === undefined);
|
|
165
|
+
for (let tick = 0; moving && tick < FEED_TICKS; tick++) {
|
|
166
|
+
sim.tick();
|
|
167
|
+
if (tick % 4 === 0)
|
|
168
|
+
onProgress(0.4 + 0.6 * (tick / FEED_TICKS));
|
|
169
|
+
}
|
|
170
|
+
const positions = {};
|
|
171
|
+
for (const body of all)
|
|
172
|
+
positions[body.id] = [body.x ?? 0, body.y ?? 0, body.z ?? 0];
|
|
173
|
+
onProgress(1);
|
|
174
|
+
return positions;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A node's body at its start: where it stood, or a seeded place near a
|
|
178
|
+
* centre (the origin, or the star it belongs to). A frozen node holds its seed.
|
|
179
|
+
*/
|
|
180
|
+
function body_of(node, spread, random, near = [0, 0, 0]) {
|
|
181
|
+
const body = { id: node.id, r: node.radius };
|
|
182
|
+
const at = node.seed ?? [
|
|
183
|
+
near[0] + (random() - 0.5) * 2 * spread,
|
|
184
|
+
near[1] + (random() - 0.5) * 2 * spread,
|
|
185
|
+
near[2] + (random() - 0.5) * 2 * spread,
|
|
186
|
+
];
|
|
187
|
+
body.x = at[0];
|
|
188
|
+
body.y = at[1];
|
|
189
|
+
body.z = at[2];
|
|
190
|
+
if (node.frozen === true && node.seed !== undefined) {
|
|
191
|
+
body.fx = at[0];
|
|
192
|
+
body.fy = at[1];
|
|
193
|
+
body.fz = at[2];
|
|
194
|
+
}
|
|
195
|
+
return body;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=constellations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constellations.js","sourceRoot":"","sources":["../../src/layout/constellations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type HierarchyNode, type HierarchyPhysics, type HierarchyPositions } from './hierarchy.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lays out a space as a galaxy.
|
|
4
|
+
*
|
|
5
|
+
* @param nodes - Every node (group and seed as for the hierarchy).
|
|
6
|
+
* @param physics - The terms: the molecule settle's own.
|
|
7
|
+
* @param onProgress - Told how far it has come, 0..1.
|
|
8
|
+
* @param randomFor - Where a reused molecule's turn comes from, by its key;
|
|
9
|
+
* seeded by the key unless a caller asks otherwise.
|
|
10
|
+
* @returns Every node's position.
|
|
11
|
+
*/
|
|
12
|
+
export declare function galaxy_layout(nodes: ReadonlyArray<HierarchyNode>, physics: HierarchyPhysics, onProgress?: (fraction: number) => void, randomFor?: (key: string) => () => number): HierarchyPositions;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The galaxy: a space whose shape emerges.
|
|
3
|
+
*
|
|
4
|
+
* Every sphere a charged ball repelling every other, springs along each
|
|
5
|
+
* feed's edges and from each feed's root to its shape's hub, no two balls
|
|
6
|
+
* overlapping, and the whole let go to find its own rest. Nobody places a
|
|
7
|
+
* feed: a lab that runs two pipelines most shows two galaxies because the
|
|
8
|
+
* forces make them, not because a layout drew them.
|
|
9
|
+
*
|
|
10
|
+
* That emergence costs every sphere against every other. It starts here
|
|
11
|
+
* from the spokes arrangement (a fraction of a second) rather than from a
|
|
12
|
+
* heap at the centre, so the forces refine a picture already near its
|
|
13
|
+
* rest instead of unfolding one from nothing — the same forces, fewer
|
|
14
|
+
* ticks. Pure, so it runs in the worker.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
import { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide, forceX, forceY, forceZ } from 'd3-force-3d';
|
|
19
|
+
import { hierarchy_layout } from './hierarchy.js';
|
|
20
|
+
import { randomFor_key } from './seeded.js';
|
|
21
|
+
import { NODE_RADIUS } from './types.js';
|
|
22
|
+
/** Ticks of the free settle, from the spokes start. */
|
|
23
|
+
const GALAXY_TICKS = 80;
|
|
24
|
+
/**
|
|
25
|
+
* Lays out a space as a galaxy.
|
|
26
|
+
*
|
|
27
|
+
* @param nodes - Every node (group and seed as for the hierarchy).
|
|
28
|
+
* @param physics - The terms: the molecule settle's own.
|
|
29
|
+
* @param onProgress - Told how far it has come, 0..1.
|
|
30
|
+
* @param randomFor - Where a reused molecule's turn comes from, by its key;
|
|
31
|
+
* seeded by the key unless a caller asks otherwise.
|
|
32
|
+
* @returns Every node's position.
|
|
33
|
+
*/
|
|
34
|
+
export function galaxy_layout(nodes, physics, onProgress = () => { }, randomFor = randomFor_key) {
|
|
35
|
+
// Where to start: where each sphere stood, or — for a space not seen
|
|
36
|
+
// before — the spokes arrangement.
|
|
37
|
+
const unseeded = nodes.some((node) => node.seed === undefined);
|
|
38
|
+
const start = unseeded
|
|
39
|
+
? hierarchy_layout(nodes, physics, (fraction) => onProgress(0.05 * fraction), 'spokes', randomFor)
|
|
40
|
+
: {};
|
|
41
|
+
onProgress(0.05);
|
|
42
|
+
const sim = nodes.map((node) => {
|
|
43
|
+
const at = node.seed ?? start[node.id];
|
|
44
|
+
const body = { id: node.id, r: node.radius };
|
|
45
|
+
if (at !== undefined) {
|
|
46
|
+
body.x = at[0];
|
|
47
|
+
body.y = at[1];
|
|
48
|
+
body.z = at[2];
|
|
49
|
+
if (node.frozen === true && node.seed !== undefined) {
|
|
50
|
+
body.fx = at[0];
|
|
51
|
+
body.fy = at[1];
|
|
52
|
+
body.fz = at[2];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return body;
|
|
56
|
+
});
|
|
57
|
+
const present = new Set(nodes.map((node) => node.id));
|
|
58
|
+
const links = [];
|
|
59
|
+
for (const node of nodes)
|
|
60
|
+
for (const parent of node.parents)
|
|
61
|
+
if (present.has(parent))
|
|
62
|
+
links.push({ source: parent, target: node.id });
|
|
63
|
+
const radiusOf = new Map(nodes.map((node) => [node.id, node.radius]));
|
|
64
|
+
const anyFrozen = sim.some((body) => body.fx !== undefined);
|
|
65
|
+
if (!sim.every((body) => body.fx !== undefined)) {
|
|
66
|
+
const simulation = forceSimulation(sim, 3)
|
|
67
|
+
.force('link', forceLink(links).id((d) => d.id).distance(physics.link
|
|
68
|
+
? (link) => (radiusOf.get(link.source.id) ?? NODE_RADIUS) + (radiusOf.get(link.target.id) ?? NODE_RADIUS) + 1.4
|
|
69
|
+
: 2.2))
|
|
70
|
+
.stop();
|
|
71
|
+
const charge = forceManyBody().strength((d) => (physics.charge ? -6 * ((d.r / NODE_RADIUS) ** 2) : -6));
|
|
72
|
+
if (physics.reach !== undefined)
|
|
73
|
+
charge.distanceMax(physics.reach);
|
|
74
|
+
simulation.force('charge', charge);
|
|
75
|
+
if (!anyFrozen)
|
|
76
|
+
simulation.force('center', forceCenter(0, 0, 0));
|
|
77
|
+
if (physics.collide)
|
|
78
|
+
simulation.force('collide', forceCollide().radius((d) => d.r * 1.2));
|
|
79
|
+
if (physics.gravity) {
|
|
80
|
+
const pull = (d) => ((d.r / NODE_RADIUS) ** 2) * 0.08;
|
|
81
|
+
simulation.force('gx', forceX(0).strength(pull)).force('gy', forceY(0).strength(pull)).force('gz', forceZ(0).strength(pull));
|
|
82
|
+
}
|
|
83
|
+
// From a start near rest the settle needs less heat: it refines, it
|
|
84
|
+
// does not unfold.
|
|
85
|
+
if (unseeded)
|
|
86
|
+
simulation.alpha(0.6);
|
|
87
|
+
for (let tick = 0; tick < GALAXY_TICKS; tick++) {
|
|
88
|
+
simulation.tick();
|
|
89
|
+
if (tick % 2 === 0)
|
|
90
|
+
onProgress(0.05 + 0.95 * (tick / GALAXY_TICKS));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const positions = {};
|
|
94
|
+
for (const body of sim)
|
|
95
|
+
positions[body.id] = [body.x ?? 0, body.y ?? 0, body.z ?? 0];
|
|
96
|
+
onProgress(1);
|
|
97
|
+
return positions;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=galaxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"galaxy.js","sourceRoot":"","sources":["../../src/layout/galaxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PhysicsTerms } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* How molecules sit around their anchor: packed as bodies (CLUMPS), or
|
|
4
|
+
* each turned so its root faces the anchor and its chain points outward —
|
|
5
|
+
* the hub and its spokes, the starburst a flat settle used to make.
|
|
6
|
+
*/
|
|
7
|
+
export type HierarchyArrangement = 'clumps' | 'spokes' | 'galaxy';
|
|
8
|
+
/** The physics a hierarchy honours: the layout layer's own terms. */
|
|
9
|
+
export type HierarchyPhysics = PhysicsTerms;
|
|
10
|
+
/**
|
|
11
|
+
* One node to place.
|
|
12
|
+
*
|
|
13
|
+
* @property id - Its id.
|
|
14
|
+
* @property parents - Its parents' ids (joins included).
|
|
15
|
+
* @property radius - Its sphere's radius.
|
|
16
|
+
* @property group - The molecule it belongs to, or null for a node that
|
|
17
|
+
* stands alone at the top (an anchor).
|
|
18
|
+
* @property seed - Where it stood last, if anywhere.
|
|
19
|
+
* @property frozen - Holds still at its seed.
|
|
20
|
+
*/
|
|
21
|
+
export interface HierarchyNode {
|
|
22
|
+
id: string;
|
|
23
|
+
parents: string[];
|
|
24
|
+
radius: number;
|
|
25
|
+
group: string | null;
|
|
26
|
+
seed?: [number, number, number];
|
|
27
|
+
frozen?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** Where every node stands. */
|
|
30
|
+
export type HierarchyPositions = Record<string, [number, number, number]>;
|
|
31
|
+
/**
|
|
32
|
+
* Lays out a space as a hierarchy.
|
|
33
|
+
*
|
|
34
|
+
* @param nodes - Every node.
|
|
35
|
+
* @param physics - The terms.
|
|
36
|
+
* @param onProgress - Told how far it has come, 0..1.
|
|
37
|
+
* @param arrangement - SPOKES or CLUMPS (GALAXY starts from spokes).
|
|
38
|
+
* @param randomFor - Where a reused molecule's turn comes from, by the
|
|
39
|
+
* molecule's key: a molecule whose shape was already worked out takes it
|
|
40
|
+
* at a turn of its own, so like feeds do not stand as clones. Seeded by
|
|
41
|
+
* the key unless a caller asks otherwise, so the same space lands the
|
|
42
|
+
* same way on every device and a new molecule turns no other.
|
|
43
|
+
* @returns Every node's position.
|
|
44
|
+
*/
|
|
45
|
+
export declare function hierarchy_layout(nodes: ReadonlyArray<HierarchyNode>, physics: HierarchyPhysics, onProgress?: (fraction: number) => void, arrangement?: HierarchyArrangement, randomFor?: (key: string) => () => number): HierarchyPositions;
|