auto-git:

[change] src/viewport-three/viewport-focus.ts
This commit is contained in:
2026-04-22 14:51:37 +02:00
parent 31e29bcedf
commit 8f10edd07d

View File

@@ -35,6 +35,11 @@ interface FocusBoundsAccumulator {
max: Vec3; max: Vec3;
} }
export interface ViewportSceneBounds {
min: Vec3;
max: Vec3;
}
export interface ViewportFocusTarget { export interface ViewportFocusTarget {
center: Vec3; center: Vec3;
radius: number; radius: number;
@@ -85,6 +90,25 @@ function finishBounds(bounds: FocusBoundsAccumulator): ViewportFocusTarget | nul
}; };
} }
function finishSceneBounds(bounds: FocusBoundsAccumulator): ViewportSceneBounds | null {
if (!Number.isFinite(bounds.min.x) || !Number.isFinite(bounds.max.x)) {
return null;
}
return {
min: {
x: bounds.min.x,
y: bounds.min.y,
z: bounds.min.z
},
max: {
x: bounds.max.x,
y: bounds.max.y,
z: bounds.max.z
}
};
}
function createBrushFocusTarget(brush: Brush): ViewportFocusTarget { function createBrushFocusTarget(brush: Brush): ViewportFocusTarget {
return { return {
center: { center: {
@@ -443,7 +467,9 @@ function createEntityFocusTarget(entity: EntityInstance): ViewportFocusTarget {
} }
} }
function getSceneFocusTarget(document: SceneDocument): ViewportFocusTarget | null { export function resolveViewportDocumentBounds(
document: SceneDocument
): ViewportSceneBounds | null {
const bounds = createEmptyBoundsAccumulator(); const bounds = createEmptyBoundsAccumulator();
for (const brush of Object.values(document.brushes)) { for (const brush of Object.values(document.brushes)) {
@@ -466,7 +492,20 @@ function getSceneFocusTarget(document: SceneDocument): ViewportFocusTarget | nul
includeEntity(bounds, entity); includeEntity(bounds, entity);
} }
return finishBounds(bounds); return finishSceneBounds(bounds);
}
function getSceneFocusTarget(document: SceneDocument): ViewportFocusTarget | null {
const bounds = resolveViewportDocumentBounds(document);
if (bounds === null) {
return null;
}
return finishBounds({
min: bounds.min,
max: bounds.max
});
} }
export function resolveViewportFocusTarget(document: SceneDocument, selection: EditorSelection): ViewportFocusTarget | null { export function resolveViewportFocusTarget(document: SceneDocument, selection: EditorSelection): ViewportFocusTarget | null {