Browse Source

feat(image-processing): add image reset functionality

dengdx 3 days ago
parent
commit
c783a8e6c3
1 changed files with 27 additions and 12 deletions
  1. 27 12
      src/pages/view/components/viewers/stack.image.viewer.tsx

+ 27 - 12
src/pages/view/components/viewers/stack.image.viewer.tsx

@@ -230,23 +230,25 @@ function RotateCounterclockwise90(): void {
   const newRotation = (camera.rotation ?? 0) + 90;
 
   // 但计算viewUp向量时,我们应该使用90度的弧度,而不是新角度的弧度!
-  const ninetyDegreesRadians = 90 * Math.PI / 180;
+  const ninetyDegreesRadians = (90 * Math.PI) / 180;
 
   // 获取当前的viewUp向量
   const currentViewUp = camera.viewUp || [0, 1, 0];
 
   // 计算旋转后的viewUp向量(这才是正确的相对旋转)
   const newViewUp: [number, number, number] = [
-    currentViewUp[0] * Math.cos(ninetyDegreesRadians) - currentViewUp[1] * Math.sin(ninetyDegreesRadians),
-    currentViewUp[0] * Math.sin(ninetyDegreesRadians) + currentViewUp[1] * Math.cos(ninetyDegreesRadians),
-    0
+    currentViewUp[0] * Math.cos(ninetyDegreesRadians) -
+      currentViewUp[1] * Math.sin(ninetyDegreesRadians),
+    currentViewUp[0] * Math.sin(ninetyDegreesRadians) +
+      currentViewUp[1] * Math.cos(ninetyDegreesRadians),
+    0,
   ];
 
   // 设置新的相机参数
   viewport.setCamera({
     ...camera,
     viewUp: newViewUp,
-    rotation: newRotation % 360 // 确保角度在0-359范围内
+    rotation: newRotation % 360, // 确保角度在0-359范围内
   });
 
   viewport.render();
@@ -262,29 +264,43 @@ function RotateClockwise90(): void {
   const newRotation = (camera.rotation ?? 0) - 90;
 
   // 但计算viewUp向量时,我们应该使用90度的弧度,而不是新角度的弧度!
-  const ninetyDegreesRadians = 90 * Math.PI / 180;
+  const ninetyDegreesRadians = (90 * Math.PI) / 180;
 
   // 获取当前的viewUp向量
   const currentViewUp = camera.viewUp || [0, 1, 0];
 
   // 计算旋转后的viewUp向量(这才是正确的相对旋转)
   const newViewUp: [number, number, number] = [
-    currentViewUp[0] * Math.cos(ninetyDegreesRadians) - currentViewUp[1] * Math.sin(ninetyDegreesRadians),
-    currentViewUp[0] * Math.sin(ninetyDegreesRadians) + currentViewUp[1] * Math.cos(ninetyDegreesRadians),
-    0
+    currentViewUp[0] * Math.cos(ninetyDegreesRadians) -
+      currentViewUp[1] * Math.sin(ninetyDegreesRadians),
+    currentViewUp[0] * Math.sin(ninetyDegreesRadians) +
+      currentViewUp[1] * Math.cos(ninetyDegreesRadians),
+    0,
   ];
 
   // 设置新的相机参数
   viewport.setCamera({
     ...camera,
     viewUp: newViewUp,
-    rotation: newRotation % 360 // 确保角度在0-359范围内
+    rotation: newRotation % 360, // 确保角度在0-359范围内
   });
 
   viewport.render();
   console.log('Rotating Image Clockwise 90°');
 }
 
+function ResetImage(): void {
+  const viewport = cornerstone.getEnabledElementByViewportId(currentViewportId)
+    .viewport as cornerstone.StackViewport;
+  // Implement the logic to reset the image
+  // Resets the viewport's camera
+  viewport.resetCamera();
+  // Resets the viewport's properties
+  viewport.resetProperties();
+  viewport.render();
+  console.log('Resetting Image');
+}
+
 const StackViewer = ({
   imageIndex = 0,
   imageUrls = [],
@@ -498,8 +514,7 @@ const StackViewer = ({
           console.log('Inverting Image');
           break;
         case 'Reset Image':
-          // Implement the logic to reset the image
-          console.log('Resetting Image');
+          ResetImage();
           break;
         case 'Snapshot':
           // Implement the logic to take a snapshot