feat: 添加饼盘毛料自由锻的CAD绘图功能。
This commit is contained in:
parent
8d0dde58b5
commit
e5b3f5a747
@ -62,13 +62,40 @@ namespace CadParamPluging.Cad
|
|||||||
double R = diameter.Value / 2.0;
|
double R = diameter.Value / 2.0;
|
||||||
double H = height.Value;
|
double H = height.Value;
|
||||||
|
|
||||||
// 绘制饼盘轮廓(俯视图为圆,侧视图为矩形)
|
// 获取未注圆角半径
|
||||||
// 这里绘制侧视图
|
var unspecifiedFillet = bag.GetDoubleOrNull(FeatureDrivenDrawer.KeyUnspecifiedFilletRadiusMax);
|
||||||
|
double r = unspecifiedFillet.HasValue && unspecifiedFillet.Value > 0 ? unspecifiedFillet.Value : 0;
|
||||||
|
|
||||||
|
// 安全检查:圆角不能超过宽或高的一半
|
||||||
|
double maxR = Math.Min(diameter.Value * 0.5, H * 0.5);
|
||||||
|
r = Math.Min(r, maxR);
|
||||||
|
|
||||||
|
// 绘制饼盘轮廓(俯视图为圆,侧视图为矩形,根据 R 控制圆角弧度)
|
||||||
var poly = new Polyline();
|
var poly = new Polyline();
|
||||||
|
if (r > 0.01)
|
||||||
|
{
|
||||||
|
var bulge = Math.Tan(Math.PI / 8.0);
|
||||||
|
double xLeft = ox;
|
||||||
|
double xRight = ox + diameter.Value;
|
||||||
|
double yBottom = oy;
|
||||||
|
double yTop = oy + H;
|
||||||
|
|
||||||
|
poly.AddVertexAt(0, new Point2d(xLeft + r, yBottom), 0, 0, 0);
|
||||||
|
poly.AddVertexAt(1, new Point2d(xRight - r, yBottom), bulge, 0, 0);
|
||||||
|
poly.AddVertexAt(2, new Point2d(xRight, yBottom + r), 0, 0, 0);
|
||||||
|
poly.AddVertexAt(3, new Point2d(xRight, yTop - r), bulge, 0, 0);
|
||||||
|
poly.AddVertexAt(4, new Point2d(xRight - r, yTop), 0, 0, 0);
|
||||||
|
poly.AddVertexAt(5, new Point2d(xLeft + r, yTop), bulge, 0, 0);
|
||||||
|
poly.AddVertexAt(6, new Point2d(xLeft, yTop - r), 0, 0, 0);
|
||||||
|
poly.AddVertexAt(7, new Point2d(xLeft, yBottom + r), bulge, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
poly.AddVertexAt(0, new Point2d(ox, oy), 0, 0, 0);
|
poly.AddVertexAt(0, new Point2d(ox, oy), 0, 0, 0);
|
||||||
poly.AddVertexAt(1, new Point2d(ox + diameter.Value, oy), 0, 0, 0);
|
poly.AddVertexAt(1, new Point2d(ox + diameter.Value, oy), 0, 0, 0);
|
||||||
poly.AddVertexAt(2, new Point2d(ox + diameter.Value, oy + H), 0, 0, 0);
|
poly.AddVertexAt(2, new Point2d(ox + diameter.Value, oy + H), 0, 0, 0);
|
||||||
poly.AddVertexAt(3, new Point2d(ox, oy + H), 0, 0, 0);
|
poly.AddVertexAt(3, new Point2d(ox, oy + H), 0, 0, 0);
|
||||||
|
}
|
||||||
poly.Closed = true;
|
poly.Closed = true;
|
||||||
ctx.Style?.Apply(poly, DrawingStyleManager.Role.OutlineBold);
|
ctx.Style?.Apply(poly, DrawingStyleManager.Role.OutlineBold);
|
||||||
|
|
||||||
@ -83,7 +110,8 @@ namespace CadParamPluging.Cad
|
|||||||
var diaTolMinusStr = bag.GetString(FeatureDrivenDrawer.KeyDiameterTolMinus);
|
var diaTolMinusStr = bag.GetString(FeatureDrivenDrawer.KeyDiameterTolMinus);
|
||||||
|
|
||||||
var diaDimText = BuildDimensionText($"%%c{FormatDimNumber(diameter.Value, diameterStr)}", diaTolPlus, diaTolMinus, diaTolPlusStr, diaTolMinusStr);
|
var diaDimText = BuildDimensionText($"%%c{FormatDimNumber(diameter.Value, diameterStr)}", diaTolPlus, diaTolMinus, diaTolPlusStr, diaTolMinusStr);
|
||||||
AddLinearDim(ctx, new Point3d(ox, oy, 0), new Point3d(ox + diameter.Value, oy, 0),
|
// 为避免标注界线悬空,根据 r 的存在小幅调整起点
|
||||||
|
AddLinearDim(ctx, new Point3d(ox, oy + r, 0), new Point3d(ox + diameter.Value, oy + r, 0),
|
||||||
new Point3d(ctx.Center.X, oy - 20, 0), 0, diaDimText);
|
new Point3d(ctx.Center.X, oy - 20, 0), 0, diaDimText);
|
||||||
|
|
||||||
// 高度标注
|
// 高度标注
|
||||||
@ -94,11 +122,10 @@ namespace CadParamPluging.Cad
|
|||||||
var htTolMinusStr = bag.GetString(FeatureDrivenDrawer.KeyHeight1TolMinus);
|
var htTolMinusStr = bag.GetString(FeatureDrivenDrawer.KeyHeight1TolMinus);
|
||||||
|
|
||||||
var htDimText = BuildDimensionText(FormatDimNumber(H, heightStr), htTolPlus, htTolMinus, htTolPlusStr, htTolMinusStr);
|
var htDimText = BuildDimensionText(FormatDimNumber(H, heightStr), htTolPlus, htTolMinus, htTolPlusStr, htTolMinusStr);
|
||||||
AddLinearDim(ctx, new Point3d(ox + diameter.Value, oy, 0), new Point3d(ox + diameter.Value, oy + H, 0),
|
AddLinearDim(ctx, new Point3d(ox + diameter.Value - r, oy, 0), new Point3d(ox + diameter.Value - r, oy + H, 0),
|
||||||
new Point3d(ox + diameter.Value + 20, ctx.Center.Y, 0), 90, htDimText);
|
new Point3d(ox + diameter.Value + 20, ctx.Center.Y, 0), 90, htDimText);
|
||||||
|
|
||||||
// 未注圆角(使用通用 Key)
|
// 添加未注圆角文字标注
|
||||||
var unspecifiedFillet = bag.GetDoubleOrNull(FeatureDrivenDrawer.KeyUnspecifiedFilletRadiusMax);
|
|
||||||
if (unspecifiedFillet.HasValue && unspecifiedFillet.Value > 0)
|
if (unspecifiedFillet.HasValue && unspecifiedFillet.Value > 0)
|
||||||
{
|
{
|
||||||
DrawUnspecifiedFilletNote(ctx, ox, oy + H, R, diameter.Value, unspecifiedFillet.Value);
|
DrawUnspecifiedFilletNote(ctx, ox, oy + H, R, diameter.Value, unspecifiedFillet.Value);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user