田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 11 48
     12
3456789
10111213141516
17181920212223
24252627282930


站点统计

最新评论



预制方桩抗拔裂缝验算 acad InvokeMember
未知 Send and wait for commands in AutoCAD   [ 日期:2017-11-26 ]   [ 来自:本站原创 ]  HTML
http://adndevblog.typepad.com/autocad/2012/04/synchronous ... mmands-in-autocad-using-c-net.html

Synchronously Send (and wait for) commands in AutoCAD using C# .NET
By Fenton Webb

I’m really sorry to say, but anyone who tells me that acedCommand() and acedCmd() are not good C++ functions for driving AutoCAD, are crazy! These functions have existed since the original R11 ADS development system in C and have always been used to synchronously send commands to the AutoCAD Command line. This means you can drive AutoCAD from your program code and expect things to be finished and done by the time the function returns.

These functions can literally save hours of work – instead of programmatically creating your own INSERT routine, just send the command and let AutoCAD do it – problem is, sometimes, you need to wait for the user to before carrying on, for example waiting for the user to place the block or enter the scales etc.

The code below shows how to PInvoke acedCmd() from .NET, and it shows the secret behind programmatically waiting for the user to finish the command using acedCmd(). Be warned though, we are changing/have changed the way these functions work, partly due to the AutoCAD for Mac port and now on Windows the Fiber removal project. Instead, you’ll need to use the acedCmdS() and acedCmdC() versions. Here’s some documentation on the subject

In the meantime, here’s the code showing how to call INSERT using acedCmd() synchronously

// call the insert command and wait until the user has finished, by Fenton Webb, DevTech
[DllImport("acad.exe", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedCmd")]
private static extern int acedCmd(System.IntPtr vlist);
[CommandMethod("Test7")]
public void Test7()
{
  ResultBuffer rb = new ResultBuffer();
  // RTSTR = 5005
  rb.Add(new TypedValue(5005, "_.INSERT"));
  // start the insert command
  acedCmd(rb.UnmanagedObject);
 
  bool quit = false;
  // loop round while the insert command is active
  while (!quit)
  {
    // see what commands are active
    string cmdNames = (string)Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("CMDNAMES");
    // if the INSERT command is active
    if (cmdNames.ToUpper().IndexOf("INSERT") >= 0)
    {
      // then send a PAUSE to the command line
      rb = new ResultBuffer();
      // RTSTR = 5005 - send a user pause to the command line
      rb.Add(new TypedValue(5005, "\\"));
      acedCmd(rb.UnmanagedObject);
    }
    else
      // otherwise quit
      quit = true;
  }
}
 
Posted at 02:03 PM in Fenton Webb | Permalink



暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:2*9=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©