有圆头的弧线修改
This commit is contained in:
parent
01b8f1930b
commit
253545e498
@ -3018,20 +3018,27 @@ namespace CadParamPluging.Cad
|
||||
double xInnerRight = ox + visualTotalW - arcHeight;
|
||||
double innerWidth = xInnerRight - xInnerLeft;
|
||||
|
||||
// 获取内框圆角参数:优先取 UnspecifiedFilletRadiusMax,如果没有则取 BoxFilletRadiusMax
|
||||
// 获取圆头处圆角半径 (BoxRoundHeadFilletRadiusMax) - 用于外侧圆角
|
||||
// 依据用户需求:外侧圆角由“圆头处圆角半径”控制
|
||||
var headFilletParam = bag.GetDoubleOrNull(KeyBoxRoundHeadFilletRadiusMax);
|
||||
double headFilletR = headFilletParam.HasValue && headFilletParam.Value > 0
|
||||
? headFilletParam.Value
|
||||
: 0;
|
||||
|
||||
// 获取内框圆角参数:优先取 UnspecifiedFilletRadiusMax,如果没有则取 BoxFilletRadiusMax - 用于内部剖面
|
||||
var innerFilletParam = bag.GetDoubleOrNull(KeyUnspecifiedFilletRadiusMax);
|
||||
if (!innerFilletParam.HasValue || innerFilletParam.Value <= 0)
|
||||
{
|
||||
innerFilletParam = bag.GetDoubleOrNull(KeyBoxFilletRadiusMax);
|
||||
}
|
||||
|
||||
double innerFilletR = innerFilletParam.HasValue && innerFilletParam.Value > 0
|
||||
double sectionFilletR = innerFilletParam.HasValue && innerFilletParam.Value > 0
|
||||
? innerFilletParam.Value
|
||||
: 0;
|
||||
|
||||
// 1. 绘制完整锻件外轮廓(方体有圆头 - 白色,大圆弧)
|
||||
// 修正:圆弧弦线需向内缩进 innerFilletR,以与锻件圆角起点对齐
|
||||
DrawBlockRoundHeadOutline(ctx, ox, oy, visualTotalW, H, arcHeight, innerFilletR);
|
||||
// 修正:圆弧弦线需向内缩进 headFilletR (原 logic 使用 innerFilletR),以与锻件外侧圆角起点对齐
|
||||
DrawBlockRoundHeadOutline(ctx, ox, oy, visualTotalW, H, arcHeight, headFilletR);
|
||||
|
||||
// 2. 绘制分段式内框(左、中、右三段)以支持中间剖面区域的独立圆角
|
||||
// 中间区域(剖面)作为主体,如果设置了圆角,四个角都应为圆角
|
||||
@ -3065,26 +3072,24 @@ namespace CadParamPluging.Cad
|
||||
double xSectionRight = xSectionLeft + visualSectionWidth;
|
||||
|
||||
// 绘制中间剖面框(带圆角)
|
||||
// 复用 Ring 模板的 SectionContourWithFillet 逻辑绘制中间闭合框
|
||||
// 注意:这里需要把 Ring 的 DrawRingSectionContourWithFillet 方法提取出来通用或者直接复制逻辑
|
||||
// 为简单起见,这里直接使用类似的逻辑绘制
|
||||
DrawBoxSectionContourWithFillet(ctx, xSectionLeft, xSectionRight, oy, H, innerFilletR);
|
||||
// 使用 sectionFilletR
|
||||
DrawBoxSectionContourWithFillet(ctx, xSectionLeft, xSectionRight, oy, H, sectionFilletR);
|
||||
|
||||
// 绘制左侧框线(连接左端圆弧和中间剖面框)
|
||||
// 左端: xInnerLeft (需处理左上下角的圆角 - 修正为使用内框圆角 innerFilletR,与方体参数一致)
|
||||
// 左端: xInnerLeft (需处理左上下角的圆角 - 使用 headFilletR)
|
||||
// 右端: xSectionLeft (连接到中间框的直边)
|
||||
DrawBoxSideFrame(ctx, xInnerLeft, xSectionLeft, oy, H, innerFilletR, isLeft: true);
|
||||
DrawBoxSideFrame(ctx, xInnerLeft, xSectionLeft, oy, H, headFilletR, isLeft: true);
|
||||
|
||||
// 绘制右侧框线
|
||||
// 左端: xSectionRight (连接到中间框的直边)
|
||||
// 右端: xInnerRight (需处理右上下角的圆角 - 修正为使用内框圆角 innerFilletR,与方体参数一致)
|
||||
DrawBoxSideFrame(ctx, xSectionRight, xInnerRight, oy, H, innerFilletR, isLeft: false);
|
||||
// 右端: xInnerRight (需处理右上下角的圆角 - 使用 headFilletR)
|
||||
DrawBoxSideFrame(ctx, xSectionRight, xInnerRight, oy, H, headFilletR, isLeft: false);
|
||||
|
||||
// 3. 剖面填充 - 只在中间区域
|
||||
// 如果有圆角,填充范围也应考虑圆角(不过Hatch边界通常可以自动处理)
|
||||
if (innerFilletR > 0.01)
|
||||
// 使用 sectionFilletR
|
||||
if (sectionFilletR > 0.01)
|
||||
{
|
||||
DrawRingSectionHatchWithFillet(ctx, xSectionLeft, xSectionRight, oy, H, innerFilletR);
|
||||
DrawRingSectionHatchWithFillet(ctx, xSectionLeft, xSectionRight, oy, H, sectionFilletR);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3135,8 +3140,9 @@ namespace CadParamPluging.Cad
|
||||
|
||||
// 修正:标注需涵盖内框宽度 (矩形部分)
|
||||
|
||||
// 修正:引线起点改为内框边界 (xInnerLeft/Right) 和高度底部上移圆角半径 (oy + innerFilletR),确保闭合到白色线框
|
||||
double dimOriginY = oy + innerFilletR;
|
||||
// 修正:引线起点改为内框边界 (xInnerLeft/Right) 和高度底部上移圆角半径,确保闭合到白色线框
|
||||
// 使用 headFilletR 作为 Offset,因为这是侧边框的倒角
|
||||
double dimOriginY = oy + headFilletR;
|
||||
AddLinearDim(
|
||||
ctx,
|
||||
new Point3d(xInnerLeft, dimOriginY, 0),
|
||||
@ -3167,8 +3173,8 @@ namespace CadParamPluging.Cad
|
||||
|
||||
// 标注从圆弧最外侧开始(避免与圆弧轮廓线重叠)
|
||||
double xOuterRight = ox + visualTotalW;
|
||||
// 修正:标注界线起点应从圆弧顶端开始,往内缩进一个圆弧高度 arcHeight + innerFilletR,定位在弦线上
|
||||
double xDimOrigin = xOuterRight - (arcHeight + innerFilletR);
|
||||
// 修正:标注界线起点应从圆弧顶端开始,往内缩进一个圆弧高度 arcHeight + headFilletR,定位在弦线上
|
||||
double xDimOrigin = xOuterRight - (arcHeight + headFilletR);
|
||||
|
||||
AddLinearDim(
|
||||
ctx,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user