2026-05-20-15-20-15 项目库复用逆向视图与用户弹窗调整

This commit is contained in:
2026-05-20 15:32:25 +08:00
parent fd7f3387f7
commit 1f353e97c0
7 changed files with 396 additions and 179 deletions

View File

@@ -28,9 +28,9 @@ interface ModelPreviewPayload {
};
}
type DisplayLevel = 'standard' | 'fine' | 'ultra' | 'solid';
type DicomOpacityLevel = 'low' | 'medium' | 'high';
type MappingDisplayMode = DicomPreview['mode'];
export type DisplayLevel = 'standard' | 'fine' | 'ultra' | 'solid';
export type DicomOpacityLevel = 'low' | 'medium' | 'high';
export type MappingDisplayMode = DicomPreview['mode'];
type ModelPoseKey = keyof ModelPose;
type PoseDraftValues = Record<ModelPoseKey, string>;
type AxisKey = 'x' | 'y' | 'z';
@@ -46,13 +46,13 @@ type WorkspaceLeaveGuard = () => Promise<boolean>;
const modelPoseKeys: ModelPoseKey[] = ['rotateX', 'rotateY', 'rotateZ', 'translateX', 'translateY', 'translateZ', 'scale'];
const displayOptions: Array<{ id: DisplayLevel; label: string; limit: number }> = [
export const displayOptions: Array<{ id: DisplayLevel; label: string; limit: number }> = [
{ id: 'standard', label: '标准', limit: 16000 },
{ id: 'fine', label: '精细', limit: 36000 },
{ id: 'ultra', label: '超精细', limit: 72000 },
{ id: 'solid', label: '实体', limit: 200000 },
];
const dicomOpacityOptions: Array<{ id: DicomOpacityLevel; label: string; sliceOpacity: number; volumeOpacity: number; boxOpacity: number }> = [
export const dicomOpacityOptions: Array<{ id: DicomOpacityLevel; label: string; sliceOpacity: number; volumeOpacity: number; boxOpacity: number }> = [
{ id: 'low', label: '低', sliceOpacity: 0.82, volumeOpacity: 0.12, boxOpacity: 0.32 },
{ id: 'medium', label: '中', sliceOpacity: 0.92, volumeOpacity: 0.2, boxOpacity: 0.42 },
{ id: 'high', label: '高', sliceOpacity: 1, volumeOpacity: 0.32, boxOpacity: 0.54 },
@@ -393,7 +393,7 @@ function CoordinateAxesInset({ projection }: { projection: AxisProjection }) {
);
}
function FusionThreeView({
export function FusionThreeView({
project,
volume,
modelPose,
@@ -1737,7 +1737,7 @@ function drawVoxelOverlayLayer(
return { activeModules, filledPixels, segmentCount, modules };
}
function VoxelizationMappingView({
export function VoxelizationMappingView({
project,
moduleStyles,
modelPose,