From bfec5deb9f63c0172289fdeb6c570c38df4a7c82 Mon Sep 17 00:00:00 2001 From: sladro Date: Fri, 16 Jan 2026 13:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=B4=E8=B7=9D=EF=BC=8C?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=92=8C=E5=A4=96=E6=A1=86=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cad/FeatureDrivenDrawer.cs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Cad/FeatureDrivenDrawer.cs b/Cad/FeatureDrivenDrawer.cs index 64d06f7..41fa3a2 100644 --- a/Cad/FeatureDrivenDrawer.cs +++ b/Cad/FeatureDrivenDrawer.cs @@ -538,18 +538,25 @@ namespace CadParamPluging.Cad // === 特征8: 零件轮廓(车加工态,右半边) === if (ctx.IsMachined && outerDiaPrime.HasValue && outerDiaPrime.Value > 0 && heightPrime.HasValue && heightPrime.Value > 0) { - // 零件轮廓(黄色部分)与锻件轮廓(白色部分)的间隙: - // 由于采用了强制比例和非线性映射,直接映射会导致间隙过大。 - // 此处采用固定视觉间隙 (2.5个单位),确保零件框紧贴锻件框内部,符合示意图效果。 + // 零件轮廓(黄色)尺寸计算: 基于实际尺寸差值(间隙)进行映射 - var visualGap = 2.5; - var scaledOuterDiaPrime = (visualOuterR - visualGap) * 2.0; - var scaledInnerDiaPrime = innerDiaPrime.HasValue - ? (visualInnerR + visualGap) * 2.0 - : (double?)null; - - // 同时也修正高度方向的视觉间隙,使其上下也紧贴外框 - var scaledHeightPrime = H - visualGap * 2.0; + // 1. 外径 (Mapped) + double physicalPartOuterR = outerDiaPrime.Value / 2.0; + double visualPartOuterR = MapRadius(physicalPartOuterR); + var scaledOuterDiaPrime = visualPartOuterR * 2.0; + + // 2. 内径 (Mapped) + double? scaledInnerDiaPrime = null; + if (innerDiaPrime.HasValue && innerDiaPrime.Value > 0) + { + double physicalPartInnerR = innerDiaPrime.Value / 2.0; + double visualPartInnerR = MapRadius(physicalPartInnerR); + scaledInnerDiaPrime = visualPartInnerR * 2.0; + } + + // 3. 高度 (Direct, Y-axis is 1:1) + // 高度方向没有示意图扭曲,直接使用物理高度 + var scaledHeightPrime = heightPrime.Value; DrawPartContourHalf(ctx, ox, oy, H, scaledOuterDiaPrime, scaledInnerDiaPrime, scaledHeightPrime); }