57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
import type { EditorSelection } from "./selection";
|
|
import {
|
|
type Brush
|
|
} from "../document/brushes";
|
|
import type { SceneDocument } from "../document/scene-document";
|
|
import {
|
|
getBrushDefaultName,
|
|
getBrushEdgeLabel,
|
|
getBrushFaceLabel,
|
|
getBrushVertexLabel
|
|
} from "../geometry/whitebox-topology";
|
|
|
|
function getBrushDisplayLabel(document: SceneDocument, brushId: string): string {
|
|
const brushes = Object.values(document.brushes);
|
|
const brushIndex = brushes.findIndex((brush) => brush.id === brushId);
|
|
|
|
if (brushIndex === -1) {
|
|
return "Whitebox Solid";
|
|
}
|
|
|
|
return brushes[brushIndex].name ?? getBrushDefaultName(brushes[brushIndex], brushIndex);
|
|
}
|
|
|
|
function getBrushOrNull(
|
|
document: SceneDocument,
|
|
brushId: string
|
|
): Brush | null {
|
|
return document.brushes[brushId] ?? null;
|
|
}
|
|
|
|
export function getWhiteboxSelectionFeedbackLabel(document: SceneDocument, selection: EditorSelection): string | null {
|
|
switch (selection.kind) {
|
|
case "brushes":
|
|
return selection.ids.length === 1 ? `Solid · ${getBrushDisplayLabel(document, selection.ids[0])}` : null;
|
|
case "brushFace": {
|
|
const brush = getBrushOrNull(document, selection.brushId);
|
|
return brush === null
|
|
? `Face · ${selection.faceId} · ${getBrushDisplayLabel(document, selection.brushId)}`
|
|
: `Face · ${getBrushFaceLabel(brush, selection.faceId)} · ${getBrushDisplayLabel(document, selection.brushId)}`;
|
|
}
|
|
case "brushEdge": {
|
|
const brush = getBrushOrNull(document, selection.brushId);
|
|
return brush === null
|
|
? `Edge · ${selection.edgeId} · ${getBrushDisplayLabel(document, selection.brushId)}`
|
|
: `Edge · ${getBrushEdgeLabel(brush, selection.edgeId)} · ${getBrushDisplayLabel(document, selection.brushId)}`;
|
|
}
|
|
case "brushVertex": {
|
|
const brush = getBrushOrNull(document, selection.brushId);
|
|
return brush === null
|
|
? `Vertex · ${selection.vertexId} · ${getBrushDisplayLabel(document, selection.brushId)}`
|
|
: `Vertex · ${getBrushVertexLabel(brush, selection.vertexId)} · ${getBrushDisplayLabel(document, selection.brushId)}`;
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
}
|