AutoCAD2013 以上利用AccoreConsole+ c# NetApi Windows Froms 封装

1# 封装类

  1  public static class CmdHelper
  2     {
  3         /// <summary>
  4         /// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批量处理图纸(Net Api dll)
  5         /// </summary>
  6         /// <param name="cmsStr">NetApi中注册的命令(commandmethod中写的命令)</param>
  7         /// <param name="dllPath">AutoCAD Net Api的程序集的全路径</param>
  8         /// <param name="dwgfn">dwg文件的全路径</param>
  9         /// <param name="AccoreconsolePath">AutoCAD 安装目录下的AccoreConsole.exe的全路径</param>
 10         public static void ExecuteCmd(string cmsStr,string dllPath,string dwgfn)
 11         {
 12             var acadInstallPath = string.Empty;
 13             for (int i = 2013; i < DateTime.Now.Year + 2; i++)
 14             {
 15                 if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe"))
 16                 {
 17                     acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
 18                     break;
 19                 }
 20             }
 21             System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo()
 22             {
 23                 FileName = "cmd.exe",
 24                 UseShellExecute=false,
 25                 CreateNoWindow=true,
 26                 RedirectStandardInput=true,
 27                 RedirectStandardOutput=true
 28             };
 29             Process pro = new Process() { StartInfo = psi };
 30             pro.Start();
 31             pro.StandardInput.WriteLine("\"" + acadInstallPath + "Accoreconsole.exe" + "\" /i " + "\"" + dwgfn + "\"");
 32             pro.StandardInput.WriteLine("secureload");
 33             pro.StandardInput.WriteLine("0");
 34             pro.StandardInput.WriteLine("netload");
 35             pro.StandardInput.WriteLine("\""+ dllPath + "\"");
 36             pro.StandardInput.WriteLine("filedia");
 37             pro.StandardInput.WriteLine("1");
 38             pro.StandardInput.WriteLine(cmsStr);
 39             pro.StandardInput.WriteLine("qsave");
 40             pro.StandardInput.WriteLine("quit");
 41             pro.StandardInput.WriteLine("exit");
 42         }
 43         /// <summary>
 44         /// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批量处理图纸(scr 文件)
 45         /// </summary>
 46         /// <param name="scrFileName">scr 文件的全路径</param>
 47         /// <param name="dwgfn">dwg文件的全路径</param>
 48         /// <param name="AccoreconsolePath">AutoCAD 安装目录下的AccoreConsole.exe的全路径</param>
 49         public static void ExecuteCmd(string scrFileName, string dwgfn)
 50         {
 51             var acadInstallPath = string.Empty;
 52             for (int i = 2013; i < DateTime.Now.Year + 2; i++)
 53             {
 54                 if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe"))
 55                 {
 56                     acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
 57                     break;
 58                 }
 59             }
 60             System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo()
 61             {
 62                 FileName = acadInstallPath+"Accoreconsole.exe",
 63                 Arguments = " /i " + "\"" + dwgfn + "\" /s  "+"\"" + scrFileName + "\"",
 64                 UseShellExecute = false,
 65                 CreateNoWindow = true,
 66                 RedirectStandardInput = true,
 67                 RedirectStandardOutput = true
 68             };
 69             Process pro = new Process() { StartInfo = psi };
 70             pro.Start();
 71             pro.StandardInput.WriteLine("filedia");
 72             pro.StandardInput.WriteLine("1");
 73             pro.StandardInput.WriteLine("exit");
 74         }
 75 
 76         public static List<String> GetOutNetApiCmd(string dllPath)
 77         {
 78             List<String> strCmd = new List<string>();
 79             AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
 80             Assembly ass = Assembly.LoadFrom(dllPath);
 81             foreach (var t in ass.GetTypes())
 82             {
 83                 if (t.IsClass && t.IsPublic)
 84                 {
 85                     foreach (MethodInfo m in t.GetMethods())
 86                     {
 87                         if (m.IsPublic && m.GetCustomAttributes(true)!=null)
 88                         {
 89                             Attribute att = null;
 90                             foreach (var item in m.GetCustomAttributes(true))
 91                             {
 92                                 if (item.GetType().Name == "CommandMethodAttribute") att = item as Attribute;
 93                             }
 94                             if (att!=null) strCmd.Add(m.CustomAttributes.ToList()[0].ConstructorArguments[0].Value.ToString());
 95                         }
 96                     }
 97                 }
 98             }
 99             return strCmd;
100         }
101 
102         private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
103         {
104             AssemblyName assName = new AssemblyName(args.Name);
105             var acadInstallPath = string.Empty;
106             for (int i = 2013; i < DateTime.Now.Year+2; i++)
107             {
108                 if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD "+i+"\\Accoreconsole.exe")) 
109                 {
110                     acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
111                     break;
112                 }
113             }
114             return Assembly.LoadFile(acadInstallPath + args.Name+".dll");
115         }
116     }

2# 准备autocad的sdk放入文件夹,这个sdk的dll不要高于你的netapi的dll的版本,最好一致

 3# 在program.cs中做如下调整

 提前加入netapi的dll的依赖项,此处为了到处netapi的自定义命令的名称“GetOutNetApiCmd”方法可以成功执行,否则无法执行

  static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);var acadInstallPath = string.Empty;for (int i = 2013; i < DateTime.Now.Year + 2; i++){if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe")){acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";break;}}if (acadInstallPath != string.Empty){var location = Application.StartupPath;Assembly.LoadFrom(location + "\\NetApiDll\\AcDbMgd.dll");Assembly.LoadFrom(location + "\\NetApiDll\\AcCoreMgd.dll");Application.Run(new Form1());}else MessageBox.Show("本机没有安装AutoCAD2013-"+DateTime.Now.Year + 1+"中的任意一个版本, 无法启动本程序!");}

 4# 绘制用户界面

 

 5# 写完程序

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 
11 namespace MyAccoreConsole
12 {
13     public partial class Form1 : Form
14     {
15         public List<string> ListDwgFileNames { get; set; }
16         public string SelectedDllName { get; set; }
17         public string SelectedScrName { get; set; }
18         public string SelectedCmdName { get; set; }
19         public Form1()
20         {
21             InitializeComponent();
22         }
23 
24         private void button1_Click(object sender, EventArgs e)
25         {
26             this.listBox1.Items.Clear();
27             this.ListDwgFileNames = new List<string>();
28             OpenFileDialog ofd = new OpenFileDialog() {
29                 Filter="AutoCAD DwgFile *.dwg|*.dwg",
30                 Multiselect=true,
31                 ReadOnlyChecked=true
32             };
33             if (ofd.ShowDialog()== DialogResult.OK) this.ListDwgFileNames.AddRange(ofd.FileNames);
34             foreach (var item in this.ListDwgFileNames) this.listBox1.Items.Add(item);
35         }
36 
37         private void button3_Click(object sender, EventArgs e)
38         {
39             this.label2.Text = string.Empty;
40             OpenFileDialog ofd = new OpenFileDialog()
41             {
42                 Filter = "AutoCAD NetApi Dll *.dll|*.dll",
43                 Multiselect = false
44             };
45             if (ofd.ShowDialog() == DialogResult.OK) this.SelectedDllName = ofd.FileName;
46             this.label2.Text = this.SelectedDllName;
47         }
48 
49         private void button2_Click(object sender, EventArgs e)
50         {
51             this.label1.Text = string.Empty;
52             OpenFileDialog ofd = new OpenFileDialog()
53             {
54                 Filter = "AutoCAD Scr File *.scr|*.scr",
55                 Multiselect = false
56             };
57             if (ofd.ShowDialog() == DialogResult.OK) this.SelectedScrName = ofd.FileName;
58             this.label1.Text = this.SelectedScrName;
59         }
60         private void comboBox1_DropDown(object sender, EventArgs e)
61         {
62             this.comboBox1.Items.Clear();
63             var cms = CmdHelper.GetOutNetApiCmd(this.SelectedDllName);
64             if (cms.Count>0) this.comboBox1.Items.AddRange(cms.ToArray());
65         }
66         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
67         {
68             this.SelectedCmdName = this.comboBox1.Text;
69         }
70         private void button5_Click(object sender, EventArgs e)
71         {
72             foreach (var item in this.ListDwgFileNames)
73             {
74                 CmdHelper.ExecuteCmd(this.SelectedCmdName, this.SelectedDllName,item);
75             }
76             MessageBox.Show("Net Api 执行完成!!!!");
77         }
78 
79         private void button4_Click(object sender, EventArgs e)
80         {
81             foreach (var item in this.ListDwgFileNames)
82             {
83                 CmdHelper.ExecuteCmd(this.SelectedScrName,item);
84             }
85             MessageBox.Show("SCR 批处理文件执行完成!!!!");
86         }
87     }
88 }

转载于:https://www.cnblogs.com/NanShengBlogs/p/11481129.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 输出 XML

一、概述 SELECT 查询将结果作为行集返回。在 SQL 查询中指定 FOR XML 子句&#xff0c;从而将该查询的正式结果作为 XML 来检索。FOR XML 子句可以用在顶级查询和子查询中。顶级 FOR XML 子句只能用在 SELECT 语句中。而在子查询中&#xff0c;FOR XML 可以用在 INSERT、UPDAT…

linux重定向输出命令

目录一、符号二、“>”举例2.1举例一2.2举例二三、“>>”举例3.1举例一3.2举例二https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#x…

mysql10.3修改默认存储路径

版本为10.3的用该种方式修改&#xff1a; 创建/data/mysql目录 mkdir -p /data/mysql 给这个目录至少要附加读写权限 chmod 777 /data/mysql -r 把mariadb服务停掉 systemctl stop mariadb 把/var/lib/mysql整个目录复制到新路径下 cp -r /var/lib/mysql/* /data/mysql 编辑ma…

计算机硬件系统和软件系统

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

修改mysql锁空间大小

A. 单次生效设置 进入mysql命令 mysql -uroot -p show variables like "%_buffer%";(不要忘记带;号&#xff0c;没有;号表示一条语句没有结束) 默认的innodb_buffer_pool_size8M tmp_table_size 4G max_heap_table_size 256M innodb_file_format Barracuda defa…

TypeError: ‘NoneType‘ object is not callable--python报错解决办法

报错为 翻译过来为&#xff1a;TypeError:“NoneType”对象不可调用 代码&#xff1a; def bibao_one():Jay "哎哟不错哦"def bibao_two():print(Jay)return bibao_two()#执行闭包 execute bibao_one()execute()我们在执行调用函数的时候&#xff0c;把括号去掉就…

IndentationError: expected an indented block --python报错 or IndentationError:unexpected indent

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

python闭包与装饰器的代码解释

代码&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c…

软件测试管理工具禅道开源版下载安装

下载 下载地址&#xff1a;https://www.zentao.net/ 点击下图的开源版 根据自己的电脑配置选择相应的安装包&#xff0c;例如我的电脑是windows 64位的&#xff0c;下载中文版&#xff0c;就如下图了 安装 根据你的下载路径&#xff0c;找到并点击你下载的.exe文件&#…

禅道的基本使用(创建项目、维护部门、用户、产品、提出需求、创建测试用例等)

禅道的基本使用一、创建项目二、创建维护部门三、添加用户四、创建产品五、提出需求六、创建测试用例禅道作为一个缺陷的管理工具&#xff0c;对于测试者来说其必不可少&#xff0c;下面将介绍禅道的基本使用 一、创建项目 登录禅道&#xff0c;点击项目&#xff0c;创建一个…

禅道的使用技巧

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

mysql用代码建表基础语法

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 创建表一、基本创建语法二、常用约束三、建表举例一、基本…

利用可视化软件navicat查看表的sql语句

1.双击你的数据表&#xff0c;右键点击最后一个对象信息 2.再点击DDL&#xff0c;我们就可以看到我们的sql语句啦

[Err] 1064 - You have an error in your SQL syntax check the manual that corresponds to 之Mysql报错

当利用navicat用sql语句建表时候&#xff0c;出现如下报错 从下图我们可以看到&#xff0c;是我们最后一行的末尾多加了一个逗号。 当我们将最后一行的逗号取消掉就正常运行了 特别注意&#xff1a;最后一行的末尾没有逗号。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢…

mysql在可视化软件navicat中如何解决中文乱码问题

报错情况 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; sql语句写好点击运行之后出现下列这样的情况&…

mysql中教如何拼接字段(列)值、加入运算、设置别名(非常实用)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 在mysql中&#xff0c;在解决实际问题的时候&#xff0c;遇…

mysql模糊查询LIKE、REGEXP(正则)的详解(在可视化工具navicat下)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录一、总结二、语法三、LIKE举例3.1"%"的用法…

Mysql在可视化工具navicat中如何解决输入小数变整数的问题,(改变小数位数)

方法一 1.点击你选中的表&#xff0c;单击设计表 2.单击字段名&#xff0c;将类型改为double&#xff0c;小数点改为你想保留的几位小数&#xff0c;最后再保存 注&#xff1a;上图中的“填充0”可勾选&#xff0c;若选中&#xff0c;有一个数字输入的时候有两位小数&#x…

Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)

目录一、概念二、举例2.1 COUNT函数2.1.1 语法2.1.2运行结果2.2 AVG函数2.2.1语法2.2.2运行结果2.3 SUM函数2.3.1语法2.3.2运行结果2.4 MAX函数2.4.1语法2.4.2运行结果2.5 MIN函数2.5.1语法2.5.2运行结果一、概念 聚合函数&#xff1a;又称分组函数、统计函数、聚集函数。在my…

mysql使用navicat(建表前与建表后)添加时间戳(创建时间、自动更新时间)

为了知道我们插入更新数据的时间&#xff0c;mysql建表增加以下代码 目录一、建表时添加1.1代码1.2举例二、建表后添加2.1举例2.2代码2.3运行结果一、建表时添加 1.1代码 create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time TIMESTAMP DEFAULT CU…