找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 738|回复: 0

[每日一码] 取代redrawall命令的函数

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-5-28 08:10:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
调用C++的acedRedraw函数。
这个函数还是挺有用的,可以用于:

  • 重新绘制屏幕
  • 显示/隐藏实体后更新实体
  • 高亮显示/不高亮实体显示后更新实体
对于本贴的问题,应该是第一个。但下面的代码中包含了高亮显示的内容。

  1. #define ACADR16
  2. using System ;
  3. using System.Runtime.InteropServices ;
  4. using Autodesk.AutoCAD.Runtime ;
  5. using Autodesk.AutoCAD.ApplicationServices ;
  6. using Autodesk.AutoCAD.EditorInput ;
  7. using Autodesk.AutoCAD.DatabaseServices ;
  8. using Autodesk.AutoCAD.Geometry ;
  9. [assembly: CommandClass(typeof(Rivilis.Redraw))]
  10. namespace Rivilis
  11. {
  12.   public class Redraw
  13.   {
  14.     [System.Security.SuppressUnmanagedCodeSecurity]
  15.     [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
  16.     private static extern Int32 acedRedraw(long [] name, Int32 mode);
  17. #if ACADR16
  18.     [DllImport("acdb16.dll", CallingConvention=CallingConvention.Cdecl, EntryPoint="?acdbGetAdsName@@YA?AW4ErrorStatus@Acad@@AAY01JVAcDbObjectId@@@Z")]  
  19. #elif ACADR17
  20.     [DllImport("acdb17.dll", CallingConvention=CallingConvention.Cdecl, EntryPoint="?acdbGetAdsName@@YA?AW4ErrorStatus@Acad@@AAY01JVAcDbObjectId@@@Z")]  
  21. #endif
  22.     private static extern int acdbGetAdsName(long [] name, ObjectId objId);
  23.     [CommandMethod("MyRedraw")]
  24.     static public void MyRedraw()
  25.     {
  26.       acedRedraw(null, 1);
  27.     }
  28.     // 高亮显示实体
  29.     [CommandMethod("HlEnt")]
  30.     static public void HlEnt()
  31.     {
  32.       PromptEntityOptions entityOpts = new PromptEntityOptions("\nSelect entity: ");
  33.       PromptEntityResult rc = Application.DocumentManager.MdiActiveDocument.Editor.GetEntity(entityOpts);
  34.       if (rc.Status == PromptStatus.OK)
  35.       {
  36.         long [] ent = new long [] { 0, 0};
  37.         acdbGetAdsName(ent,rc.ObjectId);
  38.         acedRedraw(ent, 3);
  39.       }
  40.     }
  41.     // 取消实体高亮显示
  42.     [CommandMethod("UlEnt")]
  43.     static public void UlEnt()
  44.     {
  45.       PromptEntityOptions entityOpts = new PromptEntityOptions("\nSelect entity: ");
  46.       PromptEntityResult rc = Application.DocumentManager.MdiActiveDocument.Editor.GetEntity(entityOpts);
  47.       if (rc.Status == PromptStatus.OK)
  48.       {
  49.         long [] ent = new long [] { 0, 0};
  50.         acdbGetAdsName(ent,rc.ObjectId);
  51.         acedRedraw(ent, 4);
  52.       }
  53.     }
  54.   }
  55. }


请注意开头的#define ACADR16,这个表示现在的CAD版本是2006,如果你用的是2007/2008的话,请把它改成#define ACADR17


  1.     <System.Security.SuppressUnmanagedCodeSecurity()> _
  2.     <System.Runtime.InteropServices.DllImport("acad.exe", CallingConvention:=System.Runtime.InteropServices.CallingConvention.Cdecl)> _
  3.     Private Shared Function acedRedraw(ByVal name As Long(), ByVal mode As Integer) As Integer
  4.     End Function

  5.     <CommandMethod("MyRedraw")> _
  6.     Public Sub MyRedraw()
  7.         acedRedraw(Nothing, 1)
  8.     End Sub






论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:53 , Processed in 0.332566 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表