作者在使用JoinEntity时出现eNotApplicable的问题,查阅了Autodesk论坛的相关帖子,发现大多数人都有遇到这个问题,但没有找到合适的解决方法,可能原因是进行Join时两Curve需要同类型,例如Arc有相同的圆心等,当然不管什么情况,肯定是需要端点重合. 作者针对上述情况,自己重新定义了JoinEntity,具体思路如下: 1.首先将需要Join的Curve(Line,Circle,Arc,Spline,等)统一转化为Polyline: 2.设置容差delta,端点距离在…
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果,在操作前最好全屏缩放一下! 小测试: [CommandMethod("TestPromptSelectionResult")] public void TestPromptSelectionResult() { Point3dCollection pt3dCol = new Point3d…
用C#有一段时间了,由于单位需要,开始接触CAD二次开发,网上一搜,加入CAD开发的群,零零碎碎看了一些文章和博客,没有系统地的知识,能解决一些小问题.最近开始系统学习,再次推荐两本书,一本事纸质版的 <AutoCAd VBA &VB.NET 开发基础与实例教程>,大家不要给这个书名迷惑了,想用C#开发的同学注意了,此书完全是用C# 写的,系统,全面.我错过好久,后来受一位高手推荐.还有一个是电子办的<AutoCAD.NET 开发指南  2012 版  >里面的代码用3种语…
推荐两个不错的CAD二次开发(.Net)手册 http://www.mjtd.com/helpcenter/netguide/index.html http://www.ceesky.com/book/cad2011/landing.html…
CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DLL. 为此,我写了一个函数,很方便的修改注册表,达到自动加载dll的目的! 该函数支持各个版本cad. //strCadRegKey = "HLD_CAD_Import"; //唯一注册标识 可用公司名称和程序名称 //strDll dll文件路径 private bool WriteRe…
最近被公司分配到了做CAD二次开发.也是初次接触这方面的东西,其实是有些无从下手的感觉.因为公司这边也没有人有时间带我,只能是自己看书,然后再写一些Demo,再结合实际的应用来一点点的学习.废话不多说,推荐一本我入门的书籍,就是李冠亿先生的<深居浅出AutoCAD二次开发>,写的非常不错,把这本书中的Demo自己手写一遍大概就能知道CAD二次开发到底是个什么东西了. 开发环境配置 开发环境 Win10 x64 CAD 2010 Visual Studio 2012 环境配置 首先要安装CAD软…
CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides,这样就好了. ps = new PaletteSet("PSCollectPart"); ps.Style = PaletteSetStyles.NameEditable | PaletteSetStyles.ShowPropertiesMenu | PaletteSetStyles.S…
1 环境搭建(VS 2017 + CAD 2019) CAD版本一般要比VS版本晚两年以上,比如我现在使用VS2017,则CAD要用2019版,至于CAD2018能不能用没试验过,有兴趣的小伙伴可以试试. (1)下载 以上两项都能在Autodesk网站下载: ObjectARX_2019.autoCADnetwizards. (2)安装ObjectARX类库 双击Autodesk_ObjectARX_2019_Win_64_and_32_Bit.sfx选个非中文路径解压,记住路径备用. (3)安…
梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完成,经过多年的累积已经非常稳定可靠,功能完善.有关键的空间搜索算法,并使用汇编优化,可以处理50万级实体,图形的显示和处理效率比同类产品高出很多. 梦想绘图3d插件6.0(MxDraw6.03d),使用二维控件的显示核心,基于 OpenCASCADE 几何造型引擎, 创建锥.柱.环等基本几何体, 对…
1 环境搭建:安装CAD 和objectArx库,这里安装的是cad2012和objectArx2010 ,vs是2010 2 新建一个类库项目,引用objectArx安装目录下inc文件夹下的AcDbMgd.dll和AcMgd.dll,这里注意X86和X64系统的区别 3 添加两个类,一个继承IExtensionApplication接口,这个是dll的入口,cad会从这个类加载程序做一些初始化的操作:另外一个可以写自定义的一些cad命令 cad的引用: using Autodesk.Auto…
Autodesk官方网站 官方帮助文档:AutoCAD 2016 帮助: Managed .NET Developer's Guide (.NET) (autodesk.com) DXF帮助手册:DXF 参考手册: DXF 格式 (autodesk.com) AUTODESK UNIVERSITY:Homepage | Autodesk University 官方博客:AutoCAD DevBlog (typepad.com) Kean Walmsley:Through the Interfac…
1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧.文字和标注等图形对象都是对象. 线型与标注样式等样式设置都是对象. 图层.编组和块等组织结构都是对象. 视图与视口等图形显示都是对象. 甚至图形和 AutoCAD 应用程序本身也是对象. 2.CAD中的容器:对于任何一个DWG文件,都会创建下列容器对像:九个固定的符号表(如下)和有名对像字典(包含…
1.AutoCAD .NET API由不同的DLL文件组成,它们提供用于访问图形文件或AutoCAD应用程序的包含丰富的类.结构.方法和事件.每一个DLL文件都定义不同的使用基于功能的库组织组件的命名空间. 下面是你将频繁地要使用的AutoCAD .NET API 的三个主要的DLL文件: AcDbMgd.dll. 当使用图形文件中的对象时使用这个DLL文件. AcMgd.dll. 当使用AutoCAD应用程序时使用这个DLL文件. AcCui.dll. 当使用自定义文件时使用这个DLL文件.…
思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中. 2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创建的数据库对象中. 3)最后调用Database类的WblockCloneObjects函数将外部的DWG文件中块对象复制到当前数据库中. /// <summary> /// 外部文件导入块, /// </summary> /// <param name="desdb&…
1.块定义与块参照两个概念 块定义类似于模具,而块参照类似于模具浇筑出来的模型,在图形中只需用块定义来保存块的实际几何组成,而仅用插入点和比例因子来存储块定义,因为块参照的几何形状与快参照完全一样,仅大小不同, 好处有: 不需要存储款块参照中的实体,减小了图形文件: 只需要修改块定义,块参照会自动更新,减轻了修改和维护工作. 2 .实例代码 创建一个块并添加到数据库中 /// <summary> /// 插入一个块参照到CAD图形中 /// </summary> /// <p…
在CAD中经常用到停靠或浮动的PaletteSet,比如:特性.图层特性管理器.工具选项板等(以下截图来自AutoCAD2010界面). 特性PaletteSet(停靠) 图层特性管理器PaletteSet(浮动) 工具选项板PaletteSet(浮动.多个Palette) 这些Palette给设计带来了极大方便,灵活的展现形式(浮动和停靠)不禁让人也想给自己定制一个Palette ,下面就开始动手吧! 在CAD的acmgd.dll中我们可以找到名称空间Autodesk.AutoCAD. Win…
基于浩辰CAD2019 需求: 开发线转圆简单命令.命令过程:1) 请选择图中直线(要求支持一次选多个):2) 弹出对话框,输入圆的图层名和半径3) 点对话框中确定按钮,结束命令.命令执行效果:所选每条直线的起点和终点处,自动生成两个圆:同时,所有直线自动整体平移MOVE一个向量AcGeVector3d(1000,1000,0). 代码如下 using System;using GrxCAD.Runtime;using GrxCAD.ApplicationServices;using GrxCA…
前面开了一个头,这里添加几个功能的实现, //添加图层 private void LoadLayer() { Document acDoc = Application.DocumentManager.MdiActiveDocument; using (Transaction tr = acDoc.TransactionManager.StartTransaction()) { //指定点图层 LayerTable lt = (LayerTable)tr.GetObject(acDoc.Datab…
/// <summary> /// 插入一个块参照到CAD图形中 /// </summary> /// <param name="spaceId">模型空间Id</param> /// <param name="layer">要插入的图层名</param> /// <param name="blockName">块名</param> /// <p…
本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的“文件”下拉菜单中,选择“新建”->“项目...”. 在出现的“新建项目”对话框的“项目类型:”树中,单击“ Visual C ++”节点. 在模板列表中选择“ Windows桌面向导”. 在项目名称编辑框中输入所需的项目名称,例如“ Step01”. 将位置设置为要存储项目的文件夹,然后单击“确定”.这将调用“ Windows桌面项目”对话框. 确定后弹出对话框,从应用程序类型下拉选项中选择动态链接库. 项目创建成功之后…
1.说明 可进行缩放性注释的对象有:文字.标注.图案填充.公差.多重引线.块及属性. 2.为图形添加.删除注释比例步骤 1)使用AnnotationScale类(在DatabaseServices命名空间下)构造函数创建注释比例对象并设置相关属性: 2)使用图形的注释比例列表(ObjectContextCollection): 3)使用(ObjectContextCollection类)的AddText函数将新建的注释比例对象添加到注释比例列表中. 2.具体代码 public static An…
1.属性块的定义 属性块是有构成的实体和附加信息(属性)组成的,属性块中块的定义与简单块中块的定义一样,而属性的定义主要是通过属性的AttributeDefinition类的有关属性和函数来实现的.具体实现有: a .AttributeDefinition类的实例并设置对象的属性值: b.由于块的属性定义也可以看做是块中的实体,可以通过块表记录类的成员函数AppendEntity将属性定义附加到块中. 其中,属性定义的属性值主要有: 文字的插入点.高度.旋转角度.对齐方式和宽度: 属性的默认值:…
通过实体名来将实体加入到模型空间 AcDbObjectId PostToModelSpace(AcDbEntity *pEnt){ //打开块表 AcDbBlockTable *pBlockTable = NULL; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead); //打开块表记录 AcDbBlockTabl…
[CommandMethod("CBline")] //对称画线 public void CBline() { Document doc = Application.DocumentManager.MdiActiveDocument; Editor edit = doc.Editor; Database db = doc.Database; using(Transaction trans=doc.TransactionManager.StartTransaction()) { Prom…
主要代码: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using GrxCAD.Runtime;using GrxCAD.ApplicationServices;using GrxCAD.EditorInput;using GrxCAD.Geometry;using GrxCAD.DatabaseServices;us…
Pane pane = new Pane(); pane.Enabled = true; pane.Text = "状态条按钮"; pane.ToolTipText = "新建的状态条按钮"; pane.Visible = true; pane.MouseDown += new StatusBarMouseDownEventHandler((o, e) => { MessageBox.Show("Hello!"); }); CADAPP.S…
ProgressMeter pm = new ProgressMeter(); pm.Start("正在执行..."); pm.SetLimit(100); for (int i = 0; i <= 100; i++) { System.Threading.Thread.Sleep(100);//为了模拟效果,做的延时 pm.MeterProgress(); } pm.Stop();…
http://through-the-interface.typepad.com/through_the_interface/autocad_net/ http://through-the-interface.typepad.com/through_the_interface/about-the-author.html…
Database db=HostApplicationServices.WrokingDatabase; Editor ed=Autodesk.AutoCAD.ApplicationService.Application.DocumentMannger.MdiActiveDocument.Editor;…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; [assembly:CommandClass(typeo…