Add viewport view modes definitions
This commit is contained in:
114
src/viewport-three/viewport-view-modes.ts
Normal file
114
src/viewport-three/viewport-view-modes.ts
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
import type { Vec3 } from "../core/vector";
|
||||||
|
|
||||||
|
export type ViewportViewMode = "perspective" | "top" | "front" | "side";
|
||||||
|
|
||||||
|
export const VIEWPORT_VIEW_MODES = ["perspective", "top", "front", "side"] as const;
|
||||||
|
|
||||||
|
export type ViewportGridPlane = "xz" | "xy" | "yz";
|
||||||
|
export type ViewportAxis = "x" | "y" | "z";
|
||||||
|
|
||||||
|
export interface ViewportViewModeDefinition {
|
||||||
|
id: ViewportViewMode;
|
||||||
|
label: string;
|
||||||
|
cameraType: "perspective" | "orthographic";
|
||||||
|
cameraDirection: Vec3 | null;
|
||||||
|
cameraUp: Vec3;
|
||||||
|
gridPlane: ViewportGridPlane;
|
||||||
|
snapAxis: ViewportAxis;
|
||||||
|
controlHint: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const VIEWPORT_VIEW_MODE_DEFINITIONS: Record<ViewportViewMode, ViewportViewModeDefinition> = {
|
||||||
|
perspective: {
|
||||||
|
id: "perspective",
|
||||||
|
label: "Perspective",
|
||||||
|
cameraType: "perspective",
|
||||||
|
cameraDirection: null,
|
||||||
|
cameraUp: {
|
||||||
|
x: 0,
|
||||||
|
y: 1,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
gridPlane: "xz",
|
||||||
|
snapAxis: "y",
|
||||||
|
controlHint: "Middle-drag orbits, Shift + middle-drag pans, wheel zooms, and Numpad Comma frames the selection."
|
||||||
|
},
|
||||||
|
top: {
|
||||||
|
id: "top",
|
||||||
|
label: "Top",
|
||||||
|
cameraType: "orthographic",
|
||||||
|
cameraDirection: {
|
||||||
|
x: 0,
|
||||||
|
y: 1,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
cameraUp: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: -1
|
||||||
|
},
|
||||||
|
gridPlane: "xz",
|
||||||
|
snapAxis: "y",
|
||||||
|
controlHint: "Middle-drag pans, wheel zooms, and Numpad Comma frames the selection."
|
||||||
|
},
|
||||||
|
front: {
|
||||||
|
id: "front",
|
||||||
|
label: "Front",
|
||||||
|
cameraType: "orthographic",
|
||||||
|
cameraDirection: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 1
|
||||||
|
},
|
||||||
|
cameraUp: {
|
||||||
|
x: 0,
|
||||||
|
y: 1,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
gridPlane: "xy",
|
||||||
|
snapAxis: "z",
|
||||||
|
controlHint: "Middle-drag pans, wheel zooms, and Numpad Comma frames the selection."
|
||||||
|
},
|
||||||
|
side: {
|
||||||
|
id: "side",
|
||||||
|
label: "Side",
|
||||||
|
cameraType: "orthographic",
|
||||||
|
cameraDirection: {
|
||||||
|
x: -1,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
cameraUp: {
|
||||||
|
x: 0,
|
||||||
|
y: 1,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
gridPlane: "yz",
|
||||||
|
snapAxis: "x",
|
||||||
|
controlHint: "Middle-drag pans, wheel zooms, and Numpad Comma frames the selection."
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getViewportViewModeDefinition(viewMode: ViewportViewMode): ViewportViewModeDefinition {
|
||||||
|
return VIEWPORT_VIEW_MODE_DEFINITIONS[viewMode];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getViewportViewModeLabel(viewMode: ViewportViewMode): string {
|
||||||
|
return VIEWPORT_VIEW_MODE_DEFINITIONS[viewMode].label;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getViewportViewModeGridPlaneLabel(viewMode: ViewportViewMode): string {
|
||||||
|
return VIEWPORT_VIEW_MODE_DEFINITIONS[viewMode].gridPlane.toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getViewportViewModeControlHint(viewMode: ViewportViewMode): string {
|
||||||
|
return VIEWPORT_VIEW_MODE_DEFINITIONS[viewMode].controlHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getViewportViewModeSnapAxis(viewMode: ViewportViewMode): ViewportAxis {
|
||||||
|
return VIEWPORT_VIEW_MODE_DEFINITIONS[viewMode].snapAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isOrthographicViewportViewMode(viewMode: ViewportViewMode): boolean {
|
||||||
|
return viewMode !== "perspective";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user