AccoreConsole听起来有点拗口,其中文名可以叫做AutoCAD控制台或者无头AutoCAD。一句话概括,它是快速启动AutoCAD运行微环境,高效的处理图纸。你可以如同DOS命令行一样操作命令,处理图纸,而不需要打开AutoCAD。这在批处理大量图纸时非常有用。另外启动是不管有无license都可以正常操作,不占当前autoCAD的资源

安装AutoCAD后,在安装路径根目录下就可以看到这个可执行程序 AccoreConsole.exe


直入正题,Accoreconsole+scr+bat 纯命令只能单一机械的执行处理命令,今天笔者就结合C# AutoCAD NetApi 来探究下Accoreconsole的强大功能。。。。。。

1# 先写个cmd脚本调用AccoreConsole

%~dp0 代表当前脚本文件的文件夹路径,/i 打开的图纸的全路径/s 执行的scr文件的全路径
1 set acadPath="C:\Program Files\Autodesk\AutoCAD 2019\"
2
3 %acadPath%accoreconsole.exe /i %~dp0Drawing1.dwg /s %~dp0NetCmd.scr
4
5 @pause

多个dwg文件执行需要改成如下,请根据AutoCAD的安装路径更改成对应的版本

1 set acadPath="C:\Program Files\Autodesk\AutoCAD 2019\"
2 for %%i in (%~dp0*.dwg) do %acadPath%accoreconsole.exe /i %%i /s %~dp0NetCmd.scr 

3 @pause

2# 写个scr文件,命名为NetCmd.scr

netload "D:/MyProgrammingData/ShopDrawing/ShopDrawing/bin/Debug/ShopDrawing.dll"
(command "myNetcmd")
qsave
(setvar filedia 0)


secureload 0
cmdecho 0
netload "C:\Users\nslov\Desktop\Test\ShopDrawing.dll"
filedia 0
(if (= (getvar "WRITESTAT") 0) (Command "close"))
mySSsetTest
qsave


解释部分:secureload 0, 关闭dll加载提示
cmdecho 0 关闭回显

(if (= (getvar "WRITESTAT") 0) (Command "close"))

只读的话就执行退出,非只读才执行后面对应的命令

3# 编写c#代码,生成的dll为ShopDrawing.dll,注册cad命令“myNetcmd“

skd的dll只能引用这2个dll,AcDbMgd.dll,AcCoreMgd.dll

这2个dll都可以用,选择集经测试可以使用


 1 using Autodesk.AutoCAD.Runtime;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using Autodesk.AutoCAD.DatabaseServices;
 8 using Autodesk.AutoCAD.ApplicationServices;
 9 using Autodesk.AutoCAD.Geometry;
10 using Autodesk.AutoCAD.EditorInput;
11 using Autodesk.AutoCAD.ApplicationServices.Core;
12
13 namespace ShopDrawing
14 {
15     public class AccoreCmd
16     {
17         [CommandMethod("mySSsetTest")]
18         public void MyPlotModelSpace()
19         {
20             var doc = Application.DocumentManager.MdiActiveDocument;
21             var db = HostApplicationServices.WorkingDatabase;
22             var ed = doc.Editor;
23             //转化成世界坐标系
24             if (ed.CurrentUserCoordinateSystem != Matrix3d.Identity) ed.CurrentUserCoordinateSystem = Matrix3d.Identity;
25             using (Transaction trans = db.TransactionManager.StartTransaction())
26             {
27                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
28                 BlockTableRecord ms = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
29                 //获取块的边界范围
30                 var psr = ed.SelectCrossingWindow(Point3d.Origin, new Point3d(350, 650, 0),
31                     new Autodesk.AutoCAD.EditorInput.SelectionFilter(new TypedValue[] {
32                         new TypedValue((int)DxfCode.Start, RXClass.GetClass(typeof(BlockReference)).DxfName)
33                         }));
34                 if (psr.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
35                 {
36                     foreach (SelectedObject item in psr.Value)
37                     {
38                         Entity ent = trans.GetObject(item.ObjectId, OpenMode.ForRead) as Entity;
39                         if (ent != null)
40                         {
41                             BlockReference blkRef = ent as BlockReference;
42                             if (blkRef.Name == "123")
43                             {
44                                 Polyline pline = new Polyline();
45                                 pline.AddVertexAt(0, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), 0, 0, 0);
46                                 pline.AddVertexAt(0, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MaxPoint.Y), 0, 0, 0);
47                                 pline.AddVertexAt(0, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MinPoint.Y), 0, 0, 0);
48                                 pline.AddVertexAt(0, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MinPoint.Y), 0, 0, 0);
49                                 pline.AddVertexAt(0, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), 0, 0, 0);
50                                 ms.AppendEntity(pline);
51                                 trans.AddNewlyCreatedDBObject(pline, true);
52                             }
53                         }
54                     }
55                     trans.Commit();
56                 }
57                 else ed.WriteMessage("Can't Find Any Block");
58             }
59         }
60     }
61 }

View Code

4# 执行结果如下,双击bat文件执行如下,bat 文件和scr都要仔细调试,一步错步步错!!!

5# AutoCAD script脚本语法简介

  与cad命令行操作一样,命令行怎么输入,代码就怎写。。。

  1. 脚本文件空格作为命令或数据结束符来处理
  2. 脚本命令不要简写,以免歧义。
  3. 注释语法以分号表示。
  4. 最后一行必须为空行。
  5. 嵌入空格的长文件名用双引号括起来。 如open “my house”; 打开my house.dwg文件

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

AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸相关推荐

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

    1# 封装类 1 public static class CmdHelper 2 { 3 /// <summary> 4 /// 调用AutoCAD 安装目录下的AccoreConsole ...

  2. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

  3. 利用yii2 gridview实现批量删除案例

    作者:白狼 出处:http://www.manks.top/article/yii2_gridview_deleteall本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  4. 利用自定义函数实现批量爬取多家公司的新闻

    1 需求 利用自定义函数实现批量爬取多家公司的新闻. 2 代码实现 from selenium import webdriver import redef dongfang(company):chro ...

  5. 利用Python编写脚本批量下载公众号中的音频

    欢迎大家光临我的博客,大家一起交流学习哦 陈京九的博客 首先声明我只是一个小菜鸡,把自己琢磨一些功能的过程发到了这里当做记录,希望大神们轻喷,能给我一些指导就更好啦~ 上一篇博客教大家下载了公众号中的 ...

  6. 【Python脚本进阶】2.3、利用FTP与Web批量抓“ 肉机”(终)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  7. 利用Python实现自动批量图片格式转换

    文章目录 利用Python实现自动批量图片格式转换 0.背景 1.简单思路 2.进一步改进 3.最终版本 4.总结 利用Python实现自动批量图片格式转换 0.背景 在一个漫画网站下载了一些图片,但 ...

  8. 利用notepad++实现文件批量转换编码格式

    利用notepad++实现文件批量转换编码格式 一.安装Python Script 插件 二.新建python脚本,进行格式转换 三.需要注意几点 一.安装Python Script 插件 1.Run ...

  9. 利用word邮件合并批量导入照片

    利用word邮件合并批量导入照片 ------嘉为   张辛 "邮件合并"是Word的一项高级功能,是办公自动化人员应该掌握的基本技术之一.邮件合并可以帮我们批量处理文档,提高工作 ...

  10. 在ArcGIS中利用模型构建器批量进行面积制表

    在ArcGIS中遇到批量计算面或者fishnet中某个类型的面积时,可以用模型构建器进行. 为了实验后续的操作比较好进行,可以先将你的shp数据加载进ArcGIS中,用其中一张tif影像进行实验,这主 ...

最新文章

  1. html5摒弃的标记,5 HTML5的列表标记
  2. MySQL中字段字符集不同导致索引不能命中
  3. 一段简单的模拟服务器的代码(Selector)
  4. 云服务器如何链接本地打印机_利用FileZilla搭建云服务器FTP服务端和本地客户端...
  5. 《音乐达人秀:Adobe Audition CC实战222例》——1.3 数字录音记录生活越来越便捷...
  6. 软件测试 学习之路 linux vim编辑器
  7. python2 urllib2_python2.7 urllib和urllib2
  8. 为什么Firefox 3及之后的版本不能加载本地的JavaScript文件了?
  9. django+echarts+ajax异步+显示优化--基本例子
  10. java发送邮件带附件
  11. 因子分析(SPSS)
  12. [MUI框架]-滑动侧边栏-div同页结构
  13. 基于切比雪夫空间距离的空间跳跃体绘制加速方法(Empty Space Skipping-ESS)
  14. Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!
  15. 泛型+IO流+网络编程
  16. android全局的dialog,使android的dialog全局显示
  17. 第三次作业(蒋鑫和贺俊朋组)
  18. 一次Python爬虫实战,解决反爬问题!
  19. 基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)
  20. 模式识别技术漫谈(3)

热门文章

  1. 关于南宁市教育云网站的网课视频链接blob加密破解
  2. 用kindle看微信公众号文章的一种方法
  3. 基于MATLAB的图像拼接实现
  4. LSTM实现情感分类
  5. 正项级数收敛性的判别法
  6. html图片滚动红点_程序员最爱的小红点更新了!史上最薄的钛制ThinkPad发布
  7. 二维数组指针,指针数组与数组指针的区别,一看就懂
  8. 主汛期到达!水库大坝如何利用北斗短报文等应用防灾减灾?
  9. 2021金三银四,你准备好挑战这份最新腾讯、字节跳动、阿里巴巴Android面试题集了吗?
  10. opencv IplImage和Mat的 区别和转换