/** * InvertContrastModal - 反色对比Modal组件 * * 完整布局:左侧缩略图列表 + 中间对比区域 + 底部工具栏 */ import React, { useEffect } from 'react'; import { Modal } from 'antd'; import * as cornerstone from '@cornerstonejs/core'; import { useSelector, useDispatch } from 'react-redux'; import { RootState, AppDispatch } from '@/states/store'; import { selectIsModalOpen, selectSelectedPositions, closeInvertContrastModal, updateSelectedPositions } from '@/states/view/invertContrastSlice'; import { StackViewerWithErrorBoundary, invertContrast } from './viewers/stack.image.viewer'; import InvertContrastThumbnailList from './InvertContrastThumbnailList'; import InvertContrastToolbar from './InvertContrastToolbar'; const InvertContrastModal: React.FC = () => { const dispatch = useDispatch(); const isOpen = useSelector(selectIsModalOpen); const selectedPositions = useSelector(selectSelectedPositions); const renderingEngineId = 'myRenderingEngine'; // 重用主渲染引擎 // 获取左图和右图的URL const leftImageUrl = selectedPositions[0] || ''; const rightImageUrl = selectedPositions[1] || selectedPositions[0] || ''; // 如果只有一个选择,右图和左图相同但应用反色 const handleClose = () => { console.log('[InvertContrastModal] Closing modal'); dispatch(closeInvertContrastModal()); }; // 应用反色效果到右侧图像 useEffect(() => { if (isOpen && leftImageUrl && rightImageUrl) { console.log('[InvertContrastModal] Modal opened with:', { leftImageUrl, rightImageUrl }); // Modal打开后,等待右侧viewport创建完成,然后应用反色 const timer = setTimeout(() => { const rightViewportId = 'invert-contrast-right'; try { console.log(`[InvertContrastModal] Applying invert to ${rightViewportId} using renderingEngine ${renderingEngineId}`); invertContrast(rightViewportId); console.log('[InvertContrastModal] Invert applied successfully'); } catch (error) { console.error('[InvertContrastModal] Failed to apply invert:', error); console.error('[InvertContrastModal] Error stack:', error.stack); } }, 500); // 增加延迟到500ms确保viewport完全加载 return () => clearTimeout(timer); } }, [isOpen, leftImageUrl, rightImageUrl]); // 工具栏事件处理 const handleRotateLeft = () => { console.log('[InvertContrastModal] Rotate left clicked'); // TODO: 实现旋转逻辑 }; const handleRotateRight = () => { console.log('[InvertContrastModal] Rotate right clicked'); // TODO: 实现旋转逻辑 }; const handleHorizontalFlip = () => { console.log('[InvertContrastModal] Horizontal flip clicked'); // TODO: 实现水平翻转逻辑 }; const handleVerticalFlip = () => { console.log('[InvertContrastModal] Vertical flip clicked'); // TODO: 实现垂直翻转逻辑 }; const handleZoomIn = () => { console.log('[InvertContrastModal] Zoom in clicked'); // TODO: 实现放大逻辑 }; const handleZoomOut = () => { console.log('[InvertContrastModal] Zoom out clicked'); // TODO: 实现缩小逻辑 }; const handleReset = () => { console.log('[InvertContrastModal] Reset clicked'); // TODO: 实现重置逻辑 }; if (!isOpen) { return null; } return ( {/* 主内容区域 */}
{/* 左侧:缩略图列表 */}
{/* 右侧:对比区域 */}
{/* 左侧对比图 */}
{selectedPositions.length > 1 ? '原图' : '对比图'}
{leftImageUrl && (
)}
{/* 右侧反色图 */}
反色图
{rightImageUrl && (
)}
{/* 底部工具栏 */}
); }; export default InvertContrastModal;