修改了测试生图和正式生图的样式
This commit is contained in:
parent
947ab96a3e
commit
f120d2e34b
@ -77,7 +77,7 @@ namespace CadParamPluging.Cad
|
||||
var tr = ctx.Transaction;
|
||||
var btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
|
||||
|
||||
// 读取锻件尺寸
|
||||
// 读取尺寸
|
||||
double outerDia = bag.GetDouble("OuterDiameter1");
|
||||
double innerDia = bag.GetDouble("InnerDiameter2");
|
||||
double height = bag.GetDouble("Height1");
|
||||
@ -87,44 +87,54 @@ namespace CadParamPluging.Cad
|
||||
return;
|
||||
}
|
||||
|
||||
// 锻件外轮廓(半剖:只绘制右侧)
|
||||
// 绘制水平圆柱 (侧视图)
|
||||
// 中心线 (X轴) - 已移除,以匹配参考图样式
|
||||
|
||||
// 1. 锻件外轮廓
|
||||
double R = outerDia / 2.0;
|
||||
var polyForging = new Polyline();
|
||||
polyForging.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0);
|
||||
polyForging.AddVertexAt(1, new Point2d(outerDia / 2, 0), 0, 0, 0);
|
||||
polyForging.AddVertexAt(2, new Point2d(outerDia / 2, height), 0, 0, 0);
|
||||
polyForging.AddVertexAt(3, new Point2d(0, height), 0, 0, 0);
|
||||
polyForging.Closed = false;
|
||||
polyForging.ColorIndex = 7;
|
||||
polyForging.AddVertexAt(0, new Point2d(0, -R), 0, 0, 0);
|
||||
polyForging.AddVertexAt(1, new Point2d(height, -R), 0, 0, 0);
|
||||
polyForging.AddVertexAt(2, new Point2d(height, R), 0, 0, 0);
|
||||
polyForging.AddVertexAt(3, new Point2d(0, R), 0, 0, 0);
|
||||
polyForging.Closed = true;
|
||||
polyForging.ColorIndex = 7; // 白色
|
||||
|
||||
btr.AppendEntity(polyForging);
|
||||
tr.AddNewlyCreatedDBObject(polyForging, true);
|
||||
|
||||
// 锻件内孔轮廓
|
||||
// 3. 内孔轮廓 (虚线)
|
||||
if (innerDia > 0)
|
||||
{
|
||||
var polyForgingInner = new Polyline();
|
||||
polyForgingInner.AddVertexAt(0, new Point2d(innerDia / 2, 0), 0, 0, 0);
|
||||
polyForgingInner.AddVertexAt(1, new Point2d(innerDia / 2, height), 0, 0, 0);
|
||||
polyForgingInner.Closed = false;
|
||||
polyForgingInner.ColorIndex = 7;
|
||||
double r = innerDia / 2.0;
|
||||
TryLoadLinetype(db, tr, "DASHED");
|
||||
|
||||
btr.AppendEntity(polyForgingInner);
|
||||
tr.AddNewlyCreatedDBObject(polyForgingInner, true);
|
||||
var lineHiddenTop = new Line(new Point3d(0, r, 0), new Point3d(height, r, 0));
|
||||
lineHiddenTop.ColorIndex = 2; // 黄色
|
||||
lineHiddenTop.Linetype = "DASHED";
|
||||
btr.AppendEntity(lineHiddenTop);
|
||||
tr.AddNewlyCreatedDBObject(lineHiddenTop, true);
|
||||
|
||||
var lineHiddenBot = new Line(new Point3d(0, -r, 0), new Point3d(height, -r, 0));
|
||||
lineHiddenBot.ColorIndex = 2;
|
||||
lineHiddenBot.Linetype = "DASHED";
|
||||
btr.AppendEntity(lineHiddenBot);
|
||||
tr.AddNewlyCreatedDBObject(lineHiddenBot, true);
|
||||
|
||||
// 内孔标注
|
||||
AddLinearDim(db, tr, btr, new Point3d(0, r, 0), new Point3d(0, -r, 0),
|
||||
new Point3d(height + 15, 0, 0), 90, $"%%c{innerDia}");
|
||||
}
|
||||
|
||||
// 中心线
|
||||
double centerLineExt = 20.0;
|
||||
var lineCenter = new Line(
|
||||
new Point3d(-centerLineExt, height / 2, 0),
|
||||
new Point3d(outerDia / 2 + centerLineExt, height / 2, 0));
|
||||
lineCenter.ColorIndex = 4;
|
||||
// 外径标注
|
||||
AddLinearDim(db, tr, btr, new Point3d(0, R, 0), new Point3d(0, -R, 0),
|
||||
new Point3d(-15, 0, 0), 90, $"%%c{outerDia}");
|
||||
|
||||
TryLoadCenterLinetype(db, tr, lineCenter);
|
||||
// 长度标注
|
||||
AddLinearDim(db, tr, btr, new Point3d(0, -R, 0), new Point3d(height, -R, 0),
|
||||
new Point3d(height / 2, -R - 15, 0), 0, $"{height}min");
|
||||
|
||||
btr.AppendEntity(lineCenter);
|
||||
tr.AddNewlyCreatedDBObject(lineCenter, true);
|
||||
|
||||
// 车加工态:绘制零件轮廓及填充
|
||||
// 4. 车加工零件 (填充)
|
||||
if (IsMachined(deliveryStatus))
|
||||
{
|
||||
double outerDiaPrime = bag.GetDouble("OuterDiameter1Prime");
|
||||
@ -133,27 +143,28 @@ namespace CadParamPluging.Cad
|
||||
|
||||
if (outerDiaPrime > 0 && heightPrime > 0)
|
||||
{
|
||||
double partOffsetY = (height - heightPrime) / 2.0;
|
||||
double offsetX = (height - heightPrime) / 2.0;
|
||||
double Rp = outerDiaPrime / 2.0;
|
||||
|
||||
// 零件轮廓(闭合)
|
||||
// 零件轮廓
|
||||
var polyPart = new Polyline();
|
||||
polyPart.AddVertexAt(0, new Point2d(innerDiaPrime / 2, partOffsetY), 0, 0, 0);
|
||||
polyPart.AddVertexAt(1, new Point2d(outerDiaPrime / 2, partOffsetY), 0, 0, 0);
|
||||
polyPart.AddVertexAt(2, new Point2d(outerDiaPrime / 2, partOffsetY + heightPrime), 0, 0, 0);
|
||||
polyPart.AddVertexAt(3, new Point2d(innerDiaPrime / 2, partOffsetY + heightPrime), 0, 0, 0);
|
||||
polyPart.AddVertexAt(0, new Point2d(offsetX, -Rp), 0, 0, 0);
|
||||
polyPart.AddVertexAt(1, new Point2d(offsetX + heightPrime, -Rp), 0, 0, 0);
|
||||
polyPart.AddVertexAt(2, new Point2d(offsetX + heightPrime, Rp), 0, 0, 0);
|
||||
polyPart.AddVertexAt(3, new Point2d(offsetX, Rp), 0, 0, 0);
|
||||
polyPart.Closed = true;
|
||||
polyPart.ColorIndex = 7;
|
||||
|
||||
btr.AppendEntity(polyPart);
|
||||
tr.AddNewlyCreatedDBObject(polyPart, true);
|
||||
|
||||
// 剖面填充
|
||||
// 填充
|
||||
try
|
||||
{
|
||||
var hatch = new Hatch();
|
||||
hatch.SetDatabaseDefaults();
|
||||
hatch.Normal = new Vector3d(0, 0, 1);
|
||||
hatch.Elevation = 0.0;
|
||||
hatch.SetDatabaseDefaults();
|
||||
|
||||
btr.AppendEntity(hatch);
|
||||
tr.AddNewlyCreatedDBObject(hatch, true);
|
||||
@ -170,30 +181,46 @@ namespace CadParamPluging.Cad
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 填充失败时忽略
|
||||
// 忽略
|
||||
}
|
||||
|
||||
// 可以在这里添加零件尺寸标注
|
||||
AddLinearDim(db, tr, btr, new Point3d(offsetX, Rp, 0), new Point3d(offsetX, -Rp, 0),
|
||||
new Point3d(offsetX - 5, 0, 0), 90, $"%%c{outerDiaPrime}");
|
||||
|
||||
AddLinearDim(db, tr, btr, new Point3d(offsetX, -Rp, 0), new Point3d(offsetX + heightPrime, -Rp, 0),
|
||||
new Point3d(offsetX + heightPrime / 2, -Rp - 10, 0), 0, $"{heightPrime}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void TryLoadCenterLinetype(Database db, Transaction tr, Line line)
|
||||
private static void AddLinearDim(Database db, Transaction tr, BlockTableRecord btr,
|
||||
Point3d pt1, Point3d pt2, Point3d dimLinePt, double rotationDeg, string textOverride)
|
||||
{
|
||||
try
|
||||
{
|
||||
double rotRad = rotationDeg * Math.PI / 180.0;
|
||||
var dim = new RotatedDimension(rotRad, pt1, pt2, dimLinePt, textOverride, db.Dimstyle);
|
||||
dim.ColorIndex = 4; // 青色
|
||||
btr.AppendEntity(dim);
|
||||
tr.AddNewlyCreatedDBObject(dim, true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略标注错误
|
||||
}
|
||||
}
|
||||
|
||||
private static void TryLoadLinetype(Database db, Transaction tr, string linetypeName)
|
||||
{
|
||||
try
|
||||
{
|
||||
var linetypeTbl = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
|
||||
if (linetypeTbl.Has("CENTER"))
|
||||
{
|
||||
line.Linetype = "CENTER";
|
||||
}
|
||||
else
|
||||
if (!linetypeTbl.Has(linetypeName))
|
||||
{
|
||||
try
|
||||
{
|
||||
db.LoadLineTypeFile("CENTER", "acad.lin");
|
||||
if (linetypeTbl.Has("CENTER"))
|
||||
{
|
||||
line.Linetype = "CENTER";
|
||||
}
|
||||
db.LoadLineTypeFile(linetypeName, "acad.lin");
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
@ -771,46 +771,19 @@ namespace CadParamPluging.UI
|
||||
try
|
||||
{
|
||||
// ==========================================
|
||||
// 参数定义 - 调整比例接近参考图
|
||||
// 测试参数构造
|
||||
// ==========================================
|
||||
var bag = new ParamBag();
|
||||
|
||||
// 1. 锻件尺寸参数 (扁平环形件)
|
||||
double Φ1 = 500.0; // 锻件外径
|
||||
double a1 = 2.0; // 外径上差
|
||||
double b1 = -1.0; // 外径下差
|
||||
// 锻件参数 (调整为细长型,符合参考图比例)
|
||||
bag.Set("OuterDiameter1", "160");
|
||||
bag.Set("InnerDiameter2", "100");
|
||||
bag.Set("Height1", "400");
|
||||
|
||||
double Φ2 = 150.0; // 锻件内径
|
||||
double a2 = 1.5; // 内径上差
|
||||
double b2 = -0.5; // 内径下差
|
||||
|
||||
double H1 = 100.0; // 锻件高度
|
||||
double a3 = 1.0; // 高度上差
|
||||
double b3 = -1.0; // 高度下差
|
||||
|
||||
double T = 45.0; // 最小壁厚 (设定值)
|
||||
|
||||
// --- 零件尺寸 ---
|
||||
double Φ_1 = 485.0; // 零件外径 (Φ'1)
|
||||
double Φ_2 = 165.0; // 零件内径 (Φ'2)
|
||||
double H_1 = 90.0; // 零件高度 (H'1)
|
||||
|
||||
|
||||
// ==========================================
|
||||
// 2. 逻辑校验 (使用 T 参数)
|
||||
// ==========================================
|
||||
double actualWallThickness = (Φ1 - Φ2) / 2.0;
|
||||
if (actualWallThickness < T)
|
||||
{
|
||||
AppendLog($"[警告] 实际壁厚 ({actualWallThickness}) 小于设定最小壁厚 T ({T})");
|
||||
}
|
||||
|
||||
|
||||
// ==========================================
|
||||
// 3. 绘图逻辑 (使用其余几何参数)
|
||||
// ==========================================
|
||||
|
||||
// 仅计算相对位置,不增加额外参数
|
||||
double partOffsetY = (H1 - H_1) / 2.0;
|
||||
// 零件参数 (车加工)
|
||||
bag.Set("OuterDiameter1Prime", "150");
|
||||
bag.Set("InnerDiameter2Prime", "110");
|
||||
bag.Set("Height1Prime", "380");
|
||||
|
||||
var doc = AcadApp.DocumentManager.MdiActiveDocument;
|
||||
if (doc == null)
|
||||
@ -822,112 +795,12 @@ namespace CadParamPluging.UI
|
||||
using (doc.LockDocument())
|
||||
using (var ctx = new CadContext(doc))
|
||||
{
|
||||
var db = ctx.Database;
|
||||
var tr = ctx.Transaction;
|
||||
var btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
|
||||
|
||||
// --- 半剖视图:只绘制右侧 ---
|
||||
|
||||
// 锻件外轮廓 (不闭合,用于显示剖面边界)
|
||||
var polyForging = new Polyline();
|
||||
polyForging.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0); // 中心线底部
|
||||
polyForging.AddVertexAt(1, new Point2d(Φ1 / 2, 0), 0, 0, 0); // 外径底部
|
||||
polyForging.AddVertexAt(2, new Point2d(Φ1 / 2, H1), 0, 0, 0); // 外径顶部
|
||||
polyForging.AddVertexAt(3, new Point2d(0, H1), 0, 0, 0); // 中心线顶部
|
||||
polyForging.Closed = false;
|
||||
polyForging.ColorIndex = 7; // White
|
||||
|
||||
// 锻件内孔轮廓
|
||||
var polyForgingInner = new Polyline();
|
||||
polyForgingInner.AddVertexAt(0, new Point2d(Φ2 / 2, 0), 0, 0, 0);
|
||||
polyForgingInner.AddVertexAt(1, new Point2d(Φ2 / 2, H1), 0, 0, 0);
|
||||
polyForgingInner.Closed = false;
|
||||
polyForgingInner.ColorIndex = 7; // White
|
||||
|
||||
// 零件轮廓 (闭合,用于填充)
|
||||
var polyPart = new Polyline();
|
||||
polyPart.AddVertexAt(0, new Point2d(Φ_2 / 2, partOffsetY), 0, 0, 0);
|
||||
polyPart.AddVertexAt(1, new Point2d(Φ_1 / 2, partOffsetY), 0, 0, 0);
|
||||
polyPart.AddVertexAt(2, new Point2d(Φ_1 / 2, partOffsetY + H_1), 0, 0, 0);
|
||||
polyPart.AddVertexAt(3, new Point2d(Φ_2 / 2, partOffsetY + H_1), 0, 0, 0);
|
||||
polyPart.Closed = true;
|
||||
polyPart.ColorIndex = 7; // White
|
||||
|
||||
// --- 绘制中心线 (水平,表示轴线) ---
|
||||
double centerLineExt = 20.0;
|
||||
var lineCenter = new Line(
|
||||
new Point3d(-centerLineExt, H1 / 2, 0),
|
||||
new Point3d(Φ1 / 2 + centerLineExt, H1 / 2, 0));
|
||||
lineCenter.ColorIndex = 4; // Cyan
|
||||
|
||||
// 尝试加载线型
|
||||
try
|
||||
{
|
||||
var linetypeTbl = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
|
||||
if (linetypeTbl.Has("CENTER"))
|
||||
{
|
||||
lineCenter.Linetype = "CENTER";
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
db.LoadLineTypeFile("CENTER", "acad.lin");
|
||||
if (linetypeTbl.Has("CENTER"))
|
||||
{
|
||||
lineCenter.Linetype = "CENTER";
|
||||
}
|
||||
}
|
||||
catch { /* Ignore */ }
|
||||
}
|
||||
}
|
||||
catch { /* Ignore */ }
|
||||
|
||||
// 添加到数据库
|
||||
btr.AppendEntity(polyForging);
|
||||
tr.AddNewlyCreatedDBObject(polyForging, true);
|
||||
|
||||
btr.AppendEntity(polyForgingInner);
|
||||
tr.AddNewlyCreatedDBObject(polyForgingInner, true);
|
||||
|
||||
btr.AppendEntity(polyPart);
|
||||
tr.AddNewlyCreatedDBObject(polyPart, true);
|
||||
|
||||
btr.AppendEntity(lineCenter);
|
||||
tr.AddNewlyCreatedDBObject(lineCenter, true);
|
||||
|
||||
// --- 剖面填充 ---
|
||||
try
|
||||
{
|
||||
var hatch = new Hatch();
|
||||
hatch.Normal = new Vector3d(0, 0, 1);
|
||||
hatch.Elevation = 0.0;
|
||||
hatch.SetDatabaseDefaults();
|
||||
|
||||
btr.AppendEntity(hatch);
|
||||
tr.AddNewlyCreatedDBObject(hatch, true);
|
||||
|
||||
hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
|
||||
hatch.PatternScale = 5.0;
|
||||
hatch.Associative = true;
|
||||
hatch.ColorIndex = 4; // Cyan
|
||||
|
||||
var ids = new ObjectIdCollection();
|
||||
ids.Add(polyPart.ObjectId);
|
||||
hatch.AppendLoop(HatchLoopTypes.External, ids);
|
||||
hatch.EvaluateHatch(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
AppendLog($"填充失败: {ex.Message}");
|
||||
}
|
||||
// 调用统一的绘图逻辑
|
||||
HalfSectionDrawer.Draw(ctx, bag, "车加工", "环形");
|
||||
|
||||
ctx.Commit();
|
||||
|
||||
// --- 日志输出 ---
|
||||
AppendLog($"半剖视图绘制完成");
|
||||
AppendLog($"锻件: Φ{Φ1}, 内Φ{Φ2}, H{H1}");
|
||||
AppendLog($"零件: Φ'{Φ_1}, 内Φ'{Φ_2}, H'{H_1}");
|
||||
AppendLog($"测试绘制完成 (调用 HalfSectionDrawer)");
|
||||
}
|
||||
|
||||
// Zoom Extents
|
||||
|
||||
Loading…
Reference in New Issue
Block a user