c#
悬赏已过期 后悬赏过期
悬赏

尝试获取鼠标停留处的实体异常 paths = e.Context.GetPickedEntities()程序执行到这里抛出异常

邀请:
        [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}");
            }
        }
收藏1
分享
您的回答

回答

默认排序 时间排序
图片审查中...
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
复制链接
微信扫码
已复制到剪贴板