2026-06-23-13-38-48 新增逆向工作区单轴拉伸
This commit is contained in:
@@ -33,6 +33,9 @@ interface ModelPoseValue {
|
||||
translateY: number;
|
||||
translateZ: number;
|
||||
scale: number;
|
||||
scaleX: number;
|
||||
scaleY: number;
|
||||
scaleZ: number;
|
||||
flipX: boolean;
|
||||
flipY: boolean;
|
||||
flipZ: boolean;
|
||||
@@ -179,6 +182,9 @@ const defaultModelPose: ModelPoseValue = {
|
||||
translateY: 0,
|
||||
translateZ: 0,
|
||||
scale: 1,
|
||||
scaleX: 1,
|
||||
scaleY: 1,
|
||||
scaleZ: 1,
|
||||
flipX: false,
|
||||
flipY: false,
|
||||
flipZ: false,
|
||||
@@ -188,6 +194,9 @@ const modelPoseValuePrecision: Partial<Record<keyof ModelPoseValue, number>> = {
|
||||
translateY: 3,
|
||||
translateZ: 3,
|
||||
scale: 3,
|
||||
scaleX: 3,
|
||||
scaleY: 3,
|
||||
scaleZ: 3,
|
||||
};
|
||||
|
||||
interface DicomAttributes {
|
||||
@@ -494,6 +503,9 @@ function normalizeModelPoseValue(value: Partial<ModelPoseValue> | undefined): Mo
|
||||
translateY: read('translateY', defaultModelPose.translateY, -2, 2),
|
||||
translateZ: read('translateZ', defaultModelPose.translateZ, -2, 2),
|
||||
scale: read('scale', defaultModelPose.scale, 0.5, 3),
|
||||
scaleX: read('scaleX', defaultModelPose.scaleX, 0.2, 8),
|
||||
scaleY: read('scaleY', defaultModelPose.scaleY, 0.2, 8),
|
||||
scaleZ: read('scaleZ', defaultModelPose.scaleZ, 0.2, 8),
|
||||
flipX: readBoolean('flipX', defaultModelPose.flipX),
|
||||
flipY: readBoolean('flipY', defaultModelPose.flipY),
|
||||
flipZ: readBoolean('flipZ', defaultModelPose.flipZ),
|
||||
@@ -1030,9 +1042,9 @@ function transformPointForExportPose(x: number, y: number, z: number, metrics: E
|
||||
y: afterX.y,
|
||||
z: -afterX.x * sinY + afterX.z * cosY,
|
||||
};
|
||||
px = afterY.x * cosZ - afterY.y * sinZ;
|
||||
py = afterY.x * sinZ + afterY.y * cosZ;
|
||||
pz = afterY.z;
|
||||
px = (afterY.x * cosZ - afterY.y * sinZ) * pose.scaleX;
|
||||
py = (afterY.x * sinZ + afterY.y * cosZ) * pose.scaleY;
|
||||
pz = afterY.z * pose.scaleZ;
|
||||
|
||||
return {
|
||||
x: px + pose.translateX,
|
||||
@@ -2437,6 +2449,10 @@ function normalizePipelinePose(metadata: Record<string, unknown>) {
|
||||
const translateY = readNumberOption(translation.y ?? translation.translateY ?? metadata.translateY);
|
||||
const translateZ = readNumberOption(translation.z ?? translation.translateZ ?? metadata.translateZ);
|
||||
const scale = readNumberOption(metadata.scale ?? poseSource.scale);
|
||||
const axisScale = readNestedObject(metadata.axisScale ?? metadata.axisScales ?? metadata.stretchScale);
|
||||
const scaleX = readNumberOption(axisScale.x ?? axisScale.scaleX ?? metadata.scaleX);
|
||||
const scaleY = readNumberOption(axisScale.y ?? axisScale.scaleY ?? metadata.scaleY);
|
||||
const scaleZ = readNumberOption(axisScale.z ?? axisScale.scaleZ ?? metadata.scaleZ);
|
||||
|
||||
if (rotationX !== undefined) pose.rotateX = rotationX;
|
||||
if (rotationY !== undefined) pose.rotateY = rotationY;
|
||||
@@ -2445,6 +2461,9 @@ function normalizePipelinePose(metadata: Record<string, unknown>) {
|
||||
if (translateY !== undefined) pose.translateY = translateY;
|
||||
if (translateZ !== undefined) pose.translateZ = translateZ;
|
||||
if (scale !== undefined) pose.scale = scale;
|
||||
if (scaleX !== undefined) pose.scaleX = scaleX;
|
||||
if (scaleY !== undefined) pose.scaleY = scaleY;
|
||||
if (scaleZ !== undefined) pose.scaleZ = scaleZ;
|
||||
|
||||
(['X', 'Y', 'Z'] as const).forEach((axis) => {
|
||||
const lowerAxis = axis.toLowerCase();
|
||||
@@ -2518,9 +2537,9 @@ function rotatedModelSizeForPose(bounds: ModelBoundsRecord, pose: ModelPoseValue
|
||||
y: afterX.y,
|
||||
z: -afterX.x * sinY + afterX.z * cosY,
|
||||
};
|
||||
px = afterY.x * cosZ - afterY.y * sinZ;
|
||||
py = afterY.x * sinZ + afterY.y * cosZ;
|
||||
pz = afterY.z;
|
||||
px = (afterY.x * cosZ - afterY.y * sinZ) * pose.scaleX;
|
||||
py = (afterY.x * sinZ + afterY.y * cosZ) * pose.scaleY;
|
||||
pz = afterY.z * pose.scaleZ;
|
||||
rotatedBounds.min.x = Math.min(rotatedBounds.min.x, px);
|
||||
rotatedBounds.min.y = Math.min(rotatedBounds.min.y, py);
|
||||
rotatedBounds.min.z = Math.min(rotatedBounds.min.z, pz);
|
||||
|
||||
Reference in New Issue
Block a user