B2_C# CAD-2

嚴華  金牌会员 | 2023-5-15 17:50:39 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

和Visual Lisp 不同,C#要和CAD交互,需要建立交互环境。
不同的CAD版本,略有差异,本文以CAD 2013为例说明。
1. 添加引用

增加下面2个文件:acax19enu.tlb ,axdb19enu.til;
这两个文件在Autodesk Shared目录下:

添加引用:


2. 建立连接

将打开CAD命令放到try 和catch 中是非常必要的,要判断AutoCAD是否打开,如果没有打开,要打开。
点击查看代码
  1.         try
  2.             {
  3.                 AcadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application.19");
  4.             }
  5.             catch
  6.             {
  7.                 AcadApp = new AcadApplicationClass();
  8.             }
复制代码
3. 执行CAD命令

插入一个块的买命令如下:
点击查看代码
  1.             AcadApp.ActiveDocument.Utility.Prompt("给定插入点:");
  2.             insertionPoint = (double[])AcadApp.ActiveDocument.Utility.GetPoint();
  3.             Function_CAD.InsertBlock(AcadApp, insertionPoint, "电机主回路-全抽屉");   //主回路
复制代码
为了便于管理,所以相关的CAD功能都集成在一个文件中:Function_CAD;
public static void InsertBlock(AcadApplication AcadApp, double[] StartingXPoint, string BlockName)
{
AcadBlockReference blockObj;
MessageFilter.Register();
blockObj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(StartingXPoint, BlockName, 1, 1, 1, 0);
MessageFilter.Revoke();
}
4. 需要注意的问题
  1. 如果CAD命令没有执行完或者同步出现问题,系统会出现以下错误:
复制代码

将要执行的命令放到下面语句中间,可以很好的解决这个问题:
MessageFilter.Register();
需要执行的CAD命令
MessageFilter.Revoke();
点击查看代码
  1.   public static void Register()
  2.         {
  3.             IOleMessageFilter newFilter = new MessageFilter();
  4.             IOleMessageFilter oldFilter = null;
  5.             CoRegisterMessageFilter(newFilter, out oldFilter);
  6.         }
  7.         // Done with the filter, close it.
  8.         public static void Revoke()
  9.         {
  10.             IOleMessageFilter oldFilter = null;
  11.             CoRegisterMessageFilter(null, out oldFilter);
  12.         }
复制代码
上述代码是微软的开源代码;
5. 执行结果

设置断点,监视执行:

在指定位置插入相应的块:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表