找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1814|回复: 0

[分享] 用未公开的函数acedSetDynInputDisplayMessage来实现动态显示

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-10-19 22:13:38 | 显示全部楼层 |阅读模式

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

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

×
原文见:http://forums.autodesk.com/t5/NET/Dynamic-Input/td-p/1339772
目前AutoCAD未公开实现Dynamic Input的API,要实现和AutoCAD同样的效果,可以使用一个未公开的函数acedSetDynInputDisplayMessage
以下是C#代码:


  1. using System;
  2. using System.Text;

  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using Autodesk.AutoCAD.DatabaseServices;

  7. using System.Threading;
  8. using System.Globalization;
  9. using System.Runtime.InteropServices;

  10. #endregion

  11. namespace RSNNAcadApp.Test
  12. {
  13. public class Test
  14. {
  15. //this is an undocumented api exported from acad.exe. Use it at your
  16. own risk.
  17. //
  18. // Setting this flag tells AutoCAD to display the last string output
  19. to the command line
  20. //in the Dynamic Input prompt window (one time only.)
  21. [DllImport("acad.exe",
  22. EntryPoint="?acedSetDynInputDisplayMessage@@YA_N_N​@Z")]
  23. private static extern bool acedSetDynInputDisplayMessage(bool
  24. displayMessageOnce);

  25. private double m_dist; //last distance chosen (per-document)
  26. private bool m_firstTime = true; //first invocation of "test"?
  27. (per-document)
  28. //use a non-static command method so the enclosing class (Test) will
  29. be instantiated
  30. //for each document
  31. [CommandMethod("test")]
  32. public void DoIt()
  33. {
  34. Editor ed =
  35. Application.DocumentManager.MdiActiveDocument.Edit​or;
  36. PromptDistanceOptions opt1 = new PromptDistanceOptions("Abstand
  37. zeigen");

  38. opt1.AllowNegative = false;
  39. opt1.AllowZero = false;
  40. opt1.AllowNone = false;
  41. opt1.UseDashedLine = true;
  42. if (!m_firstTime)
  43. opt1.DefaultValue = m_dist;


  44. PromptDoubleResult res = ed.GetDistance(opt1);

  45. if (res.Status == PromptStatus.OK)
  46. {
  47. m_dist = res.Value;
  48. ed.WriteMessage(String.Format("Abstand = {0}",
  49. m_dist.ToString()));
  50. acedSetDynInputDisplayMessage(true);
  51. }
  52. m_firstTime = false;
  53. }
  54. void MyPointFilter(object sender, PointFilterEventArgs e)
  55. {
  56. e.Result.ToolTipText = String.Format("Abstand = {0}",
  57. m_dist.ToString());
  58. }
  59. }
  60. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-18 23:44 , Processed in 0.393170 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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