如何解决AutoCAD NET获取没有属性的块的范围
我正在尝试从图形中检索BlockReference的大小,该大小保存在其他位置,以便可以在自定义预览窗口中显示。
我知道我可以使用BlockReference.GeometricExtents,但是这似乎包括属性的宽度以及实际的几何图形,并且很多块的属性都大于几何图形。
我还尝试访问块定义的宽度,因为该属性中不应包含任何内容,但是BlockTableRecord.Bounds似乎始终为空?
下面是一些示例代码。
var doc = Autodesk.AutoCAD.applicationservices.Core.Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var selRes = ed.GetSelection();
if (selRes.Status != Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
return;
var selSet = selRes.Value;
using var tr = doc.TransactionManager.StartTransaction();
var bt = (BlockTable)tr.Getobject(doc.Database.BlockTableId,OpenMode.ForRead);
foreach (var item in selSet.GetobjectIds())
{
var obj = tr.Getobject(item,OpenMode.ForRead);
if (!(obj is BlockReference blk))
continue;
ed.WriteMessage(Environment.NewLine + "Block: " + blk.Name);
// Returns dimensions including attributes
ed.WriteMessage(Environment.NewLine + $"Block Reference Dimensions: {blk.GeometricExtents.MaxPoint.X - blk.GeometricExtents.MinPoint.X} x {blk.GeometricExtents.MaxPoint.Y - blk.GeometricExtents.MinPoint.Y}");
if (bt.Has(blk.Name))
{
var btr = (BlockTableRecord)tr.Getobject(bt[blk.Name],OpenMode.ForRead);
if (btr.Bounds.HasValue)
ed.WriteMessage(Environment.NewLine + $"Block DeFinition Dimensions: {btr.Bounds.Value.MaxPoint.X - btr.Bounds.Value.MinPoint.X} x {btr.Bounds.Value.MaxPoint.Y - btr.Bounds.Value.MinPoint.Y}");
else
// Always returns this
ed.WriteMessage(Environment.NewLine + "No bounds found.");
}
else
ed.WriteMessage(Environment.NewLine + $"No block deFinition found for '{blk.Name}'");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。