[CommandMethod("StartMonitor")]
public void StartMonitor()
{
Editor ed = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
// 开始鼠标监控事件
ed.PointMonitor += new PointMonitorEventHandler(ed_PointMonitor);
}
void ed_PointMonitor(object sender, PointMonitorEventArgs e)
{
string blockInfo = ""; // 用于存储块的信息
// 获取命令行对象(鼠标监视事件的发起者),用于获取文档对象
Editor ed = (Editor)sender;
Document doc = ed.Document;
try
{
// 确保 e.Context 不为 null,并且可以安全地调用 GetPickedEntities
if (e.Context != null)
{
// 尝试获取鼠标停留处的实体
FullSubentityPath[] paths;
try
{
// 尝试获取鼠标停留处的实体
paths = e.Context.GetPickedEntities();
}
catch (System.Exception ex)
{
// 如果 GetPickedEntities 抛出异常,记录具体的异常信息
ed.WriteMessage($"GetPickedEntities 方法调用失败: {ex.Message}");
return;
}
if (paths != null)
{
using (Transaction trans = doc.TransactionManager.StartTransaction())
{
// 获取鼠标停留处的第一个实体
FullSubentityPath path = paths[0];
ObjectId objectId = path.GetObjectIds()[0];
Entity entity = trans.GetObject(objectId, OpenMode.ForRead) as Entity;
if (entity != null)
{
// 检查实体是否为块引用
if (entity is BlockReference blockRef)
{
// 获取块名
string blockName = blockRef.Name;
blockInfo = "块名:" + blockName;
}
}
trans.Commit();
}
}
}
// 如果有块信息,则显示提示信息
if (!string.IsNullOrEmpty(blockInfo))
{
e.AppendToolTipText(blockInfo);
}
}
catch (System.Exception ex)
{
// 捕获异常并记录错误信息
ed.WriteMessage($"发生错误: {ex.Message}");
}
}
¥
悬赏已过期
后悬赏过期
悬赏
尝试获取鼠标停留处的实体异常 paths = e.Context.GetPickedEntities()程序执行到这里抛出异常
已赞
已收藏1
分享