增加红白框中间的文字

This commit is contained in:
sladro 2026-01-12 16:58:07 +08:00
parent b663c1b894
commit 3e9dc9014d
2 changed files with 80 additions and 0 deletions

View File

@ -3396,5 +3396,77 @@ namespace CadParamPluging.Cad
return true;
}
/// <summary>
/// 在红色边框与白色边框之间的左上角添加"内部资料,控制范围"文字标记
/// </summary>
/// <param name="ctx">CAD上下文</param>
/// <param name="layoutName">布局名称</param>
/// <param name="isModelSpace">是否为模型空间</param>
/// <returns>是否成功添加</returns>
public static bool AddInternalMaterialLabel(CadContext ctx, string layoutName, bool isModelSpace)
{
if (ctx == null)
{
return false;
}
var db = ctx.Database;
var tr = ctx.Transaction;
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
var ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
var allEntities = ms.Cast<ObjectId>()
.Select(id => tr.GetObject(id, OpenMode.ForRead, false) as Entity)
.Where(e => e != null && !e.IsErased)
.ToList();
// 获取红色边框和白色边框范围
var redFrameExtents = ComputeRedFrameExtents(tr, allEntities);
var whiteFrameExtents = ComputeWhiteFrameExtentsFromEntities(tr, allEntities);
if (!redFrameExtents.HasValue || !whiteFrameExtents.HasValue)
{
return false;
}
var redFrame = redFrameExtents.Value;
var whiteFrame = whiteFrameExtents.Value;
// 计算插入点:在红框和白框之间的左上角
// X: 红框左边界稍内侧
// Y: 红框顶部和白框顶部之间,偏上方
var insertX = redFrame.MinPoint.X + 2.0; // 距红框左边2mm
var insertY = (redFrame.MaxPoint.Y + whiteFrame.MaxPoint.Y) / 2.0; // 红框与白框顶部中间
var insertPoint = new Point3d(insertX, insertY, 0);
// 创建 MText
var mt = new MText();
// 使用宋体格式
mt.Contents = @"{\fSimSun|b0|i0|c134|p2;内部资料,控制范围}";
mt.Location = insertPoint;
mt.TextHeight = 3.5;
mt.Attachment = AttachmentPoint.MiddleLeft; // 左对齐,垂直居中
mt.Width = 0; // 不换行
mt.ColorIndex = 4; // 青色
// 尝试设置图层
try
{
var layerTbl = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
string targetLayer = "0";
if (layerTbl.Has("TEXT")) targetLayer = "TEXT";
else if (layerTbl.Has("文字")) targetLayer = "文字";
mt.Layer = targetLayer;
}
catch { }
ms.AppendEntity(mt);
tr.AddNewlyCreatedDBObject(mt, true);
return true;
}
}
}

View File

@ -462,6 +462,14 @@ namespace CadParamPluging.UI
}
}
// 添加左上角"内部资料,控制范围"标记
var labelAdded = TemplateDrawingService.AddInternalMaterialLabel(
ctx, layoutName, isModelSpace);
if (labelAdded)
{
AppendLog("已添加内部资料标记");
}
ctx.Commit();
try { doc.Editor.Regen(); } catch { }