乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 81|回复: 3

通过鼠标光标悬停高亮显示闭合多段线

[复制链接]

6

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
38
发表于 2022-1-16 22:03:36 | 显示全部楼层 |阅读模式
当我将光标悬停在组成闭合多段线的多段线上时,我试图生成临时图案填充和文本。文本将显示区域等。
现在,显示沿周长的简单白色多段线
参见GIF:
我正在成功使用编辑器。TraceBoundary()但是,每当可以/无法找到闭合边界时,它都会在命令编辑器框中生成消息
是否有任何方法关闭此功能?否则,是否有其他方法实现此功能?
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Runtime;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using aGi = Autodesk.AutoCAD.GraphicsInterface;
  10. namespace Test
  11. {
  12.     public class PointMonitorTooltips
  13.     {
  14.         private static DBObjectCollection m_markers = new DBObjectCollection();
  15.         private static IntegerCollection collectints = new IntegerCollection();
  16.         [CommandMethod("starto")]
  17.         public static void StartMonitor()
  18.         {
  19.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  20.             ed.PointMonitor += new PointMonitorEventHandler(ed_PointMonitor);
  21.         }
  22.         [CommandMethod("stopo")]
  23.         public static void stopmonitor()
  24.         {
  25.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  26.             ed.PointMonitor -= ed_PointMonitor;
  27.             ClearMarkers();
  28.         }
  29.         static void ed_PointMonitor(object sender, PointMonitorEventArgs e)
  30.         {
  31.             showRegionHatch(e.Context.RawPoint);
  32.         }
  33.         static void showRegionHatch(Point3d pt)
  34.         {
  35.             ClearMarkers();
  36.             Document doc = Application.DocumentManager.MdiActiveDocument;
  37.             Database db = doc.Database;
  38.             Editor edt = doc.Editor;
  39.             var objs = edt.TraceBoundary(pt, false);
  40.             if (objs == null || objs.Count == 0)
  41.                 return;
  42.             // If we have some geometry, create a Region from it
  43.             try
  44.             {
  45.                 var regstest = Region.CreateFromCurves(objs);
  46.             }
  47.             catch (Autodesk.AutoCAD.Runtime.Exception Ex)
  48.             {
  49.                 Application.ShowAlertDialog("Error");
  50.             }
  51.             var regs = Region.CreateFromCurves(objs);
  52.             if (regs == null || regs.Count == 0)
  53.                 return;
  54.             foreach (Region reg in regs)
  55.             {
  56.                 DBObjectCollection dbocRegionPolylines = Extensions.PolylineFromRegion(reg);
  57.                 foreach (Entity ent in dbocRegionPolylines)
  58.                 {
  59.                     m_markers.Add(ent);
  60.                     aGi.TransientManager.CurrentTransientManager.AddTransient(ent, aGi.TransientDrawingMode.DirectShortTerm, 128, collectints);
  61.                 }
  62.             }
  63.         }
  64.         static void ClearMarkers()
  65.         {
  66.             for (int i = 0; i < m_markers.Count; i++)
  67.             {
  68.                 aGi.TransientManager.CurrentTransientManager.EraseTransient(m_markers[i], collectints);
  69.                 m_markers[i].Dispose();
  70.             }
  71.             m_markers.Clear();
  72.         }
  73.     }
  74. }

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2022-1-17 16:00:38 | 显示全部楼层
一种方法是获取所有模型空间封闭折线的选择集,检查当前光标位置是否在其中一条内,然后突出显示折线并显示阴影/文本。我可能还会获取折线的几何范围,这样它就不会在dwg的其他地方不断检查点在里面。我在C3D走廊中突出显示区域时也做了类似的事情。
回复

使用道具 举报

6

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
38
发表于 2022-1-18 05:15:17 | 显示全部楼层
经过反复试验,我使用SendStringToExecute将CLIPROMPTLINES设置为0。程序完成后,我对其进行了编码以恢复到默认值。不是一个非常干净的解决方案,但似乎有效。
感谢Jeff_M的建议-我接下来会考虑这样做
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2022-1-18 10:35:54 | 显示全部楼层
您可以在代码中设置sysvar,而不必求助于sendstringtoexecute。一个更好的sysvar可能是NOMUTT。
应用。SetSystemVariable("NOMUTT ",1);//完成后重置为0
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 02:07 , Processed in 0.185247 second(s), 60 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表