找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1360|回复: 0

[分享] CSharp启动AutoCAD

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-21 17:20:47 | 显示全部楼层 |阅读模式

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

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

×
http://www.cppblog.com/mzty/archive/2008/06/17/53649.html

CSharp启动AutoCAD


一 我们可以通过AutoCAD安装以后提供的COM接口启动AutoCAD。

COM组件为:
AutoCAD/ObjectDBX Common 17.1 Type Library
(Autodesk.AutoCAD.Interop.Common.dll).
AutoCAD 2009 Type Library (Autodesk.AutoCAD.Interop.dll)   


  1. public static void Way1()

  2. {
  3.     const string progID = "AutoCAD.Application.17.1";
  4.     AcadApplication acApp = null;

  5.     try
  6.     {
  7.         acApp = (AcadApplication)Marshal.GetActiveObject(progID);

  8.     }
  9.     catch
  10.     {
  11.         try
  12.         {
  13.             Type acType = Type.GetTypeFromProgID(progID);
  14.             acApp = (AcadApplication)Activator.CreateInstance(acType,true);
  15.         }
  16.         catch
  17.         {
  18.             MessageBox.Show("Cannot create object of type "" +progID + """);
  19.         }
  20.     }
  21.     if (acApp != null)
  22.     {
  23.         // By the time this is reached AutoCAD is fully
  24.         // functional and can be interacted with through code
  25.         acApp.Visible = true;
  26.         acApp.ActiveDocument.SendCommand("_MYCOMMAND ");
  27.     }        
  28. }
复制代码

  1. public static void Way2()
  2. {
  3.     const string progID = "AutoCAD.Application.17.1";
  4.     const string exePath = @"E:\Program Files\Autodesk\ACADM 2009\acad.exe";
  5.     AcadApplication acApp = null;

  6.     // Let's first check we don't have AutoCAD already running
  7.     try
  8.     {
  9.         acApp =(AcadApplication)Marshal.GetActiveObject(progID);
  10.     }
  11.     catch { }
  12.     if (acApp != null)
  13.     {
  14.         MessageBox.Show("An instance of AutoCAD is already running.");
  15.     }
  16.     else
  17.     {
  18.         try
  19.         {
  20.             // Use classes from the System.Diagnostics namespace
  21.             // to launch our AutoCAD process with command-line
  22.             // options
  23.             ProcessStartInfo psi = new ProcessStartInfo(exePath, "/p myprofile");
  24.             psi.WorkingDirectory = @"c:\temp";
  25.             Process pr = Process.Start(psi);

  26.             // Wait for AutoCAD to be ready for input
  27.             // This doesn't wait until AutoCAD is ready
  28.             // to receive COM requests, it seems
  29.             pr.WaitForInputIdle();

  30.             // Connect to our process using COM
  31.             // We're going to loop infinitely until we get the
  32.             // AutoCAD object.         
  33.             // A little risky, unless we implement a timeout
  34.             // mechanism or let the user cancel

  35.             while (acApp == null)
  36.             {
  37.                 try
  38.                 {
  39.                     acApp = (AcadApplication)Marshal.GetActiveObject(progID);
  40.                 }
  41.                 catch
  42.                 {
  43.                     // Let's let the application check its message
  44.                     // loop, in case the user has exited or cancelled
  45.                     Application.DoEvents();
  46.                 }

  47.             }

  48.         }

  49.         catch (Exception ex)
  50.         {
  51.             MessageBox.Show("Cannot create or attach to AutoCAD object: "+ ex.Message);
  52.         }
  53.     }

  54.     if (acApp != null)
  55.     {
  56.         acApp.Visible = true;
  57.         acApp.ActiveDocument.SendCommand("_MYCOMMAND ");
  58.     }

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

本版积分规则

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

GMT+8, 2024-12-19 01:34 , Processed in 0.383212 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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