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

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


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

1# 先写个cmd脚本调用AccoreConsole

  1. %~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.  
  4. @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(, , ),
  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 == "")
  43. {
  44. Polyline pline = new Polyline();
  45. pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
  46. pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
  47. pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MinPoint.Y), , , );
  48. pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MinPoint.Y), , , );
  49. pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
  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. }

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

5# AutoCAD script脚本语法简介

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

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

AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸的更多相关文章

  1. AUTOCAD2013 以上利用ACCORECONSOLE+ SCR后台批量清理图纸

    无意中浏览到南胜大神的博客,https://www.cnblogs.com/NanShengBlogs/p/10957489.html 受此启发,特意改装此方法用于批量清理图纸,效果极佳. 详细介绍详 ...

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

    1# 封装类 public static class CmdHelper { /// <summary> /// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批 ...

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

    今天仍然继续探讨GridView的问题,昨天有个小伙伴留言说你用gridview给我去掉表头的链接?我想啊想,这用gridview确实不容易实现,至少我没想出来,会的下方可留言.但是呢,这根gridv ...

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

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

  5. 利用osql/ocmd批处理批量执行sql文件

    原文:利用osql/ocmd批处理批量执行sql文件 上周在测试环境建了几十张表,保存了.sql文件,准备在正式环境重建的时候懒得一个个打开建了,做一在网上搜寻了一下,果然有简单点的方法. 利用osq ...

  6. 利用实体bean对象批量数据传输处理

    利用实体bean对象批量数据传输处理 需求 现在有两方数据库表结构相同,一方A.另一个方B,现想从A处查询出多个表的数据,传输到B地保存起来. 解决方案1 最简单粗暴的方法就是,查询出A处相关表的数据 ...

  7. Linux利用nc命令脚本批量检测服务器指定端口是否开放

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

  8. 如何在CAD中批量打印图纸?这种方法你要知道

    CAD图纸都是使用CAD制图软件进行设计出来的,图纸的格式均为dwg格式的,不方便进行使用.就需要将图纸进行打印出来.多张CAD图纸如果一张一张进行打印速度就会非常的慢,那就可以使用CAD中的批量打印 ...

  9. 利用SkyDrive Pro 迅速批量下载SharePoint Server 上已上传的文件

    在上一篇<SharePoint Server 2013 让上传文件更精彩>,我们一起了解了如何快速的方便的上传批量文件到SharePoint Server 2013 ,而在这一篇日志中您将 ...

随机推荐

  1. 全文搜索(AC-1)-互联网信息过载问题

    什么是信息过载? 信息检索技术是什么? 信息过滤技术是什么?

  2. NOIP2018普及游记

    我好弱啊,今年又是考pj啊 今年GD的又是在我们学校有考点(gzez) 考前其实还是蛮紧张的,毕竟考砸了就AFO了.我dp是真的弱,模拟赛连最长下降子序列都不会写,心想要是T3是dp就咕咕咕了.去年那 ...

  3. msp430入门学习10

    msp430的定时器--看门狗 msp430入门学习

  4. linux 命令练习 2018-08-27

    linux 命令练习 2018-08-27 uname  显示系统名字 [test@localhost ~]$ uname Linux uname -a   即列出linux的内核版本号 [test@ ...

  5. hdu - 1104 Remainder (bfs + 数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=1104 注意这里定义的取模运算和计算机的%是不一样的,这里的取模只会得到非负数. 而%可以得到正数和负数. 所以需 ...

  6. [bzo1211][HNOI2004]树的计数_prufer序列

    树的计数 bzoj-1211 HNOI-2004 题目大意:题目链接. 注释:略. 想法: prufer序列有一个性质就是一个数在prufer序列中出现的次数等于这个prufer序列生成的树中它的度数 ...

  7. 2017-10-03-morning

    #include <algorithm> #include <cstring> #include <cstdio> inline void read(int &am ...

  8. openstack setup demo Compute service

    本文包含以下部分 Compute service overview Install and configure controller node Prerequisites Install and co ...

  9. linux 的硬链接与软连接

    linux 里有硬链接和软连接两种概念.要明白这些概念首先要明白文件在linux 上其实有3个组成部分. data 真正的数据存储区域 inode 一个用来唯一表示data的数据结构 filename ...

  10. 物理内存、虚拟内存、buffers、cached、共享内存、swap

    物理内存: 实际使用的内存: 虚拟内存: 虚拟内存是操作系统内核为了对进程地址空间进行管理(process address space management)而精心设计的一个逻辑意义上的内存空间概念. ...