feat: add drawing functionality for raw free forge square shafts

This commit is contained in:
sladro 2026-03-25 13:23:19 +08:00
parent f8ed9ebc2e
commit 7b436612f1

View File

@ -63,13 +63,12 @@ namespace CadParamPluging.Cad
return; return;
} }
// Swap Size1 and Size2 so Size2 is horizontal and Size1 is vertical // 修正Size1 为横向总长Size2 为竖向高度
double S1 = size2.Value; double S1 = size1.Value;
double S2 = size1.Value; double S2 = size2.Value;
double S3 = size3.HasValue && size3.Value > 0 ? size3.Value : 0; double S3 = size3.HasValue && size3.Value > 0 ? size3.Value : 0;
var originalSize2 = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2); double originalS1 = originalSize1.HasValue ? originalSize1.Value : S1;
double originalS1 = originalSize2.HasValue ? originalSize2.Value : S1;
double ox = ctx.Center.X - S1 / 2.0; double ox = ctx.Center.X - S1 / 2.0;
double oy = ctx.Center.Y - S2 / 2.0; double oy = ctx.Center.Y - S2 / 2.0;
@ -118,7 +117,12 @@ namespace CadParamPluging.Cad
// 1. 绘制主体轮廓 (矩形 + 平滑相切圆角) 和左右端弧线一体化 // 1. 绘制主体轮廓 (矩形 + 平滑相切圆角) 和左右端弧线一体化
DrawShaftRoundHeadUnifiedOutline(ctx, ox, oy, S1, S2, w, r, xf_left, xf_right, fx_L_tangTop, fy_L_tangTop, fx_L_tang, fy_L_tangBot, fx_R_tangTop, fy_R_tangTop, fx_R_tang, fy_R_tangBot, needBreakLines, xBreak, lineSpacing); DrawShaftRoundHeadUnifiedOutline(ctx, ox, oy, S1, S2, w, r, xf_left, xf_right, fx_L_tangTop, fy_L_tangTop, fx_L_tang, fy_L_tangBot, fx_R_tangTop, fy_R_tangTop, fx_R_tang, fy_R_tangBot, needBreakLines, xBreak, lineSpacing);
// 2. 中心线 (由于方轴暂无纵向中心线需求,可跳过) // 2. 中心线 (贯穿左右水平方向)
double clY = oy + S2 / 2.0;
var centerLine = new Line(new Point3d(ox - 10, clY, 0), new Point3d(ox + S1 + 10, clY, 0));
ctx.Style?.Apply(centerLine, DrawingStyleManager.Role.Centerline);
ctx.Btr.AppendEntity(centerLine);
ctx.Tr.AddNewlyCreatedDBObject(centerLine, true);
// 4. Draw Break Lines if needed // 4. Draw Break Lines if needed
if (needBreakLines) if (needBreakLines)
@ -148,16 +152,16 @@ namespace CadParamPluging.Cad
// 4. Dimensions // 4. Dimensions
{ {
var val = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2) ?? S1; var val = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1) ?? S1;
var str = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2); var str = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1);
var tolPlus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2TolPlus); var tolPlus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1TolPlus);
var tolMinus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2TolMinus); var tolMinus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1TolMinus);
var tolPlusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2TolPlus); var tolPlusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1TolPlus);
var tolMinusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2TolMinus); var tolMinusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1TolMinus);
var dimText = FeatureDrivenDrawer.BuildDimensionText(FeatureDrivenDrawer.FormatDimNumber(val, str), tolPlus, tolMinus, tolPlusStr, tolMinusStr); var dimText = FeatureDrivenDrawer.BuildDimensionText(FeatureDrivenDrawer.FormatDimNumber(val, str), tolPlus, tolMinus, tolPlusStr, tolMinusStr);
var valPrime = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2Prime); var valPrime = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1Prime);
if (valPrime.HasValue && valPrime.Value > 0) if (valPrime.HasValue && valPrime.Value > 0)
{ {
dimText += @"\X(" + FeatureDrivenDrawer.FormatDimNumber(valPrime.Value) + ")"; dimText += @"\X(" + FeatureDrivenDrawer.FormatDimNumber(valPrime.Value) + ")";
@ -169,16 +173,16 @@ namespace CadParamPluging.Cad
} }
{ {
var val = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1) ?? S2; var val = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2) ?? S2;
var str = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1); var str = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2);
var tolPlus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1TolPlus); var tolPlus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2TolPlus);
var tolMinus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1TolMinus); var tolMinus = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2TolMinus);
var tolPlusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1TolPlus); var tolPlusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2TolPlus);
var tolMinusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize1TolMinus); var tolMinusStr = ctx.OriginalBag?.GetString(FeatureDrivenDrawer.KeySquareShaftSize2TolMinus);
var dimText = FeatureDrivenDrawer.BuildDimensionText(FeatureDrivenDrawer.FormatDimNumber(val, str), tolPlus, tolMinus, tolPlusStr, tolMinusStr); var dimText = FeatureDrivenDrawer.BuildDimensionText(FeatureDrivenDrawer.FormatDimNumber(val, str), tolPlus, tolMinus, tolPlusStr, tolMinusStr);
var valPrime = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize1Prime); var valPrime = ctx.OriginalBag?.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2Prime);
if (valPrime.HasValue && valPrime.Value > 0) if (valPrime.HasValue && valPrime.Value > 0)
{ {
dimText += @"\X(" + FeatureDrivenDrawer.FormatDimNumber(valPrime.Value) + ")"; dimText += @"\X(" + FeatureDrivenDrawer.FormatDimNumber(valPrime.Value) + ")";
@ -241,19 +245,19 @@ namespace CadParamPluging.Cad
var s2Prime = bag.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2Prime); var s2Prime = bag.GetDoubleOrNull(FeatureDrivenDrawer.KeySquareShaftSize2Prime);
if (s1Prime.HasValue && s1Prime.Value > 0 && s2Prime.HasValue && s2Prime.Value > 0) if (s1Prime.HasValue && s1Prime.Value > 0 && s2Prime.HasValue && s2Prime.Value > 0)
{ {
// Size2 is horizontal (width), Size1 is vertical (height) // Size1 对应横向总长Size2 对应竖向高度
double pL = s2Prime.Value; double pL = s1Prime.Value;
double pH = s1Prime.Value; double pH = s2Prime.Value;
double pOx = ctx.Center.X - pL / 2.0; double pOx = ctx.Center.X - pL / 2.0;
double pOy = ctx.Center.Y - pH / 2.0; double pOy = ctx.Center.Y - pH / 2.0;
if (needBreakLines) if (needBreakLines)
{ {
DrawRectOutlineWithBreak(ctx, pOx, pOy, pL, pH, xBreak, lineSpacing, DrawingStyleManager.Role.PartContour); DrawRectOutlineWithBreak(ctx, pOx, pOy, pL, pH, xBreak, lineSpacing, DrawingStyleManager.Role.Hidden);
} }
else else
{ {
DrawRectOutline(ctx, pOx, pOy, pL, pH, DrawingStyleManager.Role.PartContour); DrawRectOutline(ctx, pOx, pOy, pL, pH, DrawingStyleManager.Role.Hidden);
} }
} }
} }
@ -604,7 +608,7 @@ namespace CadParamPluging.Cad
/// <summary> /// <summary>
/// 绘制带断口的零件轮廓(在断线位置打断上下横线) /// 绘制带断口的零件轮廓(在断线位置打断上下横线)
/// 支持自定义 Role (通常为 PartContour) /// 支持自定义 Role (通常为 Hidden 或 PartContour)
/// </summary> /// </summary>
private static void DrawRectOutlineWithBreak(FeatureDrivenDrawer.DrawingContext ctx, double x, double y, double w, double h, double xBreak, double breakWidth, DrawingStyleManager.Role role) private static void DrawRectOutlineWithBreak(FeatureDrivenDrawer.DrawingContext ctx, double x, double y, double w, double h, double xBreak, double breakWidth, DrawingStyleManager.Role role)
{ {