增加红白框中间的文字
This commit is contained in:
parent
b663c1b894
commit
3e9dc9014d
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -462,6 +462,14 @@ namespace CadParamPluging.UI
|
||||
}
|
||||
}
|
||||
|
||||
// 添加左上角"内部资料,控制范围"标记
|
||||
var labelAdded = TemplateDrawingService.AddInternalMaterialLabel(
|
||||
ctx, layoutName, isModelSpace);
|
||||
if (labelAdded)
|
||||
{
|
||||
AppendLog("已添加内部资料标记");
|
||||
}
|
||||
|
||||
ctx.Commit();
|
||||
|
||||
try { doc.Editor.Regen(); } catch { }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user