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文件的全路径
 set acadPath="C:\Program Files\Autodesk\AutoCAD 2019\"

 %acadPath%accoreconsole.exe /i %~dp0Drawing1.dwg /s %~dp0NetCmd.scr

 @pause

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

 set acadPath="C:\Program Files\Autodesk\AutoCAD 2019\"
for %%i in (%~dp0*.dwg) do %acadPath%accoreconsole.exe /i %%i /s %~dp0NetCmd.scr @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都可以用,选择集经测试可以使用


 using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices.Core; namespace ShopDrawing
{
public class AccoreCmd
{
[CommandMethod("mySSsetTest")]
public void MyPlotModelSpace()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = HostApplicationServices.WorkingDatabase;
var ed = doc.Editor;
//转化成世界坐标系
if (ed.CurrentUserCoordinateSystem != Matrix3d.Identity) ed.CurrentUserCoordinateSystem = Matrix3d.Identity;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord ms = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
//获取块的边界范围
var psr = ed.SelectCrossingWindow(Point3d.Origin, new Point3d(, , ),
new Autodesk.AutoCAD.EditorInput.SelectionFilter(new TypedValue[] {
new TypedValue((int)DxfCode.Start, RXClass.GetClass(typeof(BlockReference)).DxfName)
}));
if (psr.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
{
foreach (SelectedObject item in psr.Value)
{
Entity ent = trans.GetObject(item.ObjectId, OpenMode.ForRead) as Entity;
if (ent != null)
{
BlockReference blkRef = ent as BlockReference;
if (blkRef.Name == "")
{
Polyline pline = new Polyline();
pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MinPoint.X, blkRef.GeometricExtents.MinPoint.Y), , , );
pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MinPoint.Y), , , );
pline.AddVertexAt(, new Point2d(blkRef.GeometricExtents.MaxPoint.X, blkRef.GeometricExtents.MaxPoint.Y), , , );
ms.AppendEntity(pline);
trans.AddNewlyCreatedDBObject(pline, true);
}
}
}
trans.Commit();
}
else ed.WriteMessage("Can't Find Any Block");
}
}
}
}

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. iar修改包含路径的方法

  2. 易接SDK ios9以上无法弹出充值界面的一种情况

    充值需要用到http请求: 打开info.plist, 在app tansport security  setting 这个项 ,  加入  NSAllowsArbitraryLoads YES

  3. Webdriver概述(selenium对应浏览器版本)

    Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Webdriver 的API更容易理解 ...

  4. hash存储结构【六】

    一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Ag ...

  5. poj_2524_Ubiquitous Religions_201407211506

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23390   Accepted:  ...

  6. Codeforces 629D Babaei and Birthday Cake(线段树优化dp)

    题意: n个蛋糕编号从小到大编号,j号蛋糕可以放在i号上面,当且仅当j的体积严格大于i且i<j,问最终可得的最大蛋糕体积. 分析: 实质为求最长上升子序列问题,设dp[i]从头开始到第i位的最长 ...

  7. Logstash学习系列之基础介绍

    Logstash功能特性 能集中处理各种类型的数据 能标准化不同模式和格式的数据 能快速的扩展自定义日志的格式 它具有收集,分析和转发数据流的功能 Logstash运行参数 -f 指定配置文件 -e ...

  8. 笔记本能连上WIFI网络,但是无法上网怎么办

    在插网线的台式机上登陆192.168.1.1,点击无线设置,修改一下SSID号,别的什么都不用改.   然后保存,需要重启路由器.重启之后再用笔记本连接新的无线网络即可.

  9. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  10. 背包系统学习笔(tu)记(cao)

    这几天在学习背包系统,网上有看到一个挺牛逼的背包系统,不过人家那个功能很全面,一个背包系统就囊括了装备,锻造,购买等等功能(这里给出网址:https://blog.csdn.net/say__yes/ ...