AutoCAD/Civil 3D 学习笔记
Civil学习笔记
1.环境配置
1、添加引用:
Civil二次开发需要5个基本的AutoCAD的dll引用-acdbmgd.dll, acmgd.dll, accoremgd.dll, AecBaseMgd.dll, AeccDbMgd.dll。以后的开发的话可以根据需求来添加dll(需要下载Autodesk ObjectARX开发包,dll都在inc文件夹中)。
2、调试配置:
项目->属性->调试
启动操作->启动外部程序->选择Civil安装路径(包含acad.exe)
启动选项->命令行参数->填写如下:
/ld "C:\Program Files\AutoCAD Civil 3D 2013\AecBase.dbx"
http://blog.sina.com.cn/s/blog_6848608101017v4w.html
其中,AecBase.dbx:dbx是AutoCAD数据库扩展如下图
<<C3D_Imperial>>:应该是Civil3D环境的配置信息,其中Imperial(英制)与它相对的还有Metric(公制)
http://www.cnblogs.com/fsjohnhuang/articles/2540440.html
http://bbs.csdn.net/topics/390509308
打开Civil3D,在命令栏中输入NETLOAD命令,这时会弹出个文件选择框,接着选择你开发dll的路径点击确认就可以了,然后在命令栏中输入你开发的dll命令的方法名称就会执行了。
4、调试开发的dll
打开VS,设置断点按F5调试运行,因为上面调试的配置,所以Civil3D也会跟着启动。Civil3D开发后执行上面3的步骤就可以了。
2. 在.NET中使用COM API
有些功能.NET API还没有/完全实现,这时就需要用到COM API了
1、添加引用
找到Civil 3D安装目录找到下面的dll。
Autodesk.AEC.Interop.Base
Autodesk.AEC.Interop.UiBase
Autodesk.AutoCAD.Interop
Autodesk.AutoCAD.Interop.Common
Autodesk.AECC.Interop.<Civil方面的对象>
Autodesk.AECC.Interop.Ui< Civil方面的对象>
选择上面的引用后,将引用的“复制本地(Copy Local)”属性设为true
http://www.cnblogs.com/pnljs/archive/2012/02/20/2359313.html
3. 自定义实体
现在还没有提供.NET API自定义实体接口只能通过ObjectARX的方式来实现。ObjectARX用C++/CLI语言来开发。C++/CLI(Common Language Infrastructure)是C++在.NET平台上的扩展。C++/CLI即可以操作本地堆也可以操作托管堆。
注意:自定义实体只能做一些与实体有关的事儿,如果想执行CAD命令或与实体无关的操作请用ObjectARX C++编写然后用P/Invoke在.NET中调用。否则会出现难以预料的问题。
4. 获得/设置系统变量
AutoCAD
获得Application. GetSystemVariable(string name) ,设置Application.SetSystemVariable(string name,object val) 。或这样db.系统变量名称=值
设置AutoCAD单位
Application.DocumentManager.MdiActiveDocument.Database.Insunits=UnitsValue.Feet;
5.AutoCAD Civil3D系统设定
SettingsDrawing—图纸设定
AbbreviationsSettings---缩写设定
ObjectLayerSettings--对象图层设定
TransformationSettings--变换设定
UnitZoneSettings--单位和分带设定
AmbientSettings--环境设定
6.AutoCAD .NET API执行COM方法
如果你想在AutoCAD .NET API执行ObjectARX C++中的方法(ads_queueexpr、acedPostCommand、acedCmd)的话就需要使用P/Invoke技术了。例如
[System.Security.SuppressUnmanagedCodeSecurity] [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode, EntryPoint = "?acedPostCommand@@YAHPEB_W@Z")] private static extern int acedPostCommand(string strExpr);其中DllImport函数中第一个参数是dll/exe名称,不同CAD版本的话这个名称是不一样的。反正2014用的是accore.dll,其他版是acad.exe。ps:我没有仔细验证过。有的函数需要入口点也就是EntryPoint属性,它的值可以通过dumpbin命令、Depends工具和LordPE工具来反汇编找到。下面附上完整的代码
[System.Security.SuppressUnmanagedCodeSecurity][DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode, EntryPoint = "?acedPostCommand@@YAHPEB_W@Z")]private static extern int acedPostCommand(string strExpr);public static void PostCommand(string cmdStr){try {acedPostCommand(cmdStr);}catch (System.Exception ex) {Console.WriteLine(ex.Message);}}
7.Jig(即时绘图)
8.放大/缩小当前视口或实体
9.过滤/查找实体
10.取消正在执行的命令(模拟ESC键)
11.在.NET中使用COM对象
var acadApp = (AcadApplication)Application.AcadApplication;var acadDoc = acadApp.ActiveDocument;var acadDB = acadDoc.Database;acadDoc.SendCommand("cmdName");
12.利用面域计算面积
13.更新当前文档视口
很简单利用Editor的UpdateScreen方法就可以了
ed.UpdateScreen();
14.引线
cad中引线在数据库中为Leader类,这里需要注意一点的是引线的坐标高度为0,具体原因后面补充。
*.坑
1、AutoCAD命令提示“未知命令**……”的原因:在Initialize方法内报出异常就会导致这种情况。O__O”…(或是少加了dll引用)
还有一种情况就是CommandClass特性位置写错了,它必须放在命名空间上面,否则在CAD 2010中就会出现“未知命令”的情况,CAD 2014没有这种情况
2、Civil 3D 工具空间(Toolspace)不见了怎么办?在命令行上输入ShowTS。
3、使用netload命令加载程序集抛出“System.BadImageFormatException”异常解决方案。
http://www.cnblogs.com/sly-tongtong/p/3569321.html
4、ObjectARX的SDK里的acdbmgd.dll、acmgd.dll与安装目录下的acdbmgd.dll、acmgd.dll这两组对应的dll是有区别的,一般调试时候用第一组,开发时候用第二组
5、.net framework版本号AutoCAD版本号是有对应关系的。比如,.net framework 3.5对应AutoCAD 2010做二次开发,如果对应错了就会出现1中描述的情况。还有调试时有可能和Visual Studio版本号有关,我就遇到过这种情况,用VS 2012+AutoCAD 2010开发时加入断点没有反应,但VS换成2010的话就有反应了。╮(╯_╰)╭
http://www.cnblogs.com/junqilian/archive/2011/03/18/1988327.html
http://www.cnblogs.com/junqilian/archive/2011/03/18/1988327.html
7、自定义实体(C++)-关于弹出“未能找到***.dll或…………”提示框的问题
8、在使用netload加载dll时,命令行输出一行异常的信息-“在………………”而且还没完整输出O__O”…。造成这个原因有可能是命令的名称重复
9、用Editor捕获到的东东不一定是你想要的,再操作之前一定要进行判断。比如Armadillo项目的RCheckConnectivity命令
11、自定义AutoCAD实体出现下面错误的原因是ObjectArx安装目录改变或者不存在导致的。
解决方案:找到自定实体项目的目录下的Autodesk.arx-2014.props文件,打开并编辑ArxSdkDir节点的值,改为安装ObjectArx的路径。就OK了。
Polyline线用Explode方法打散后,子项弧线的起点和终点不一定和画线时的起终点一样,以下是测试数据:
可以看到有时候一致,有时候相反,这是非常操蛋的地方,用时谨记。
错误1-http://www.cnblogs.com/junqilian/archive/2011/08/21/2148630.html
如果按上面改正后还有错误那么原因有两个:1是ProgID值与当前CAD系统版本号不一样,2是打开多个CAD导致的
平常我们都是用AutoCAD注册机来激活Autodesk产品,但是如果操作不当就会出现激活不成功的显现。出现这种现象的原因有:1、序列号重复,即两款产品用的是同一个序列号。2、没有断网。
1、打开“我的电脑”进入C盘找到\ProgramData\FLEXnet文件夹,把它删除
2、卸载之前安装过的Autodesk产品(这个比较费时间,但木办法╮(╯_╰)╭)
转载于:https://www.cnblogs.com/Khadron/p/3853780.html
AutoCAD/Civil 3D 学习笔记相关推荐
- AutoCAD Civil 3D中的对象和标签
前面在Civil3D学习方法中也有提过: 在学习AutoCAD Civil 3D 的过程中,首先要充分的理解一下几个概念: 对象和对象样式 标签和标签样式 对象和对象 对象和标签. 这几个词看似很相近 ...
- DirectX 3D学习笔记(一)
DirectX 3D学习笔记(一) Ⅰ.渲染状态 设备的渲染状态控制Direct3D设备的光栅化组件的行为.通过改变光栅渲染状态属性,可以设置使用何种方式来进行渲染着色,以及如何进行雾化等. 在Dir ...
- 支持Windows 7的CAD—AutoCAD Civil 3D 2010
Windows 7终于千呼万唤的出来后,紧跟着的就是应用软件了.有没有支持Windows 7的 CAD软件呢?好消息,现在已经有了,AutoCAD Civil 3D 2010!峻祁连在前面的文章中介绍 ...
- Direct 3D学习笔记(三)——光照与材质
Direct 3D学习笔记(三)--光照与材质 现实世界中物体的颜色是一个复杂的系统,物体在不同的光照下,可能呈现在我们面前的就是不同的颜色.根据物理中的光学知识,物体在各种环境光照下,根据物体自身特 ...
- AutoCAD Civil 3D 介绍
Autodesk真是疯了,跳楼大甩卖,原先要n万一套的AutoCAD Civil 3D ,现在竟然只要6000块 :)我不做销售,只是趁这个机会介绍一下AutoCAD Civil 3D这个产品而已. ...
- AutoCAD Civil 3D中将CASS地形图中地形点转换成CAD点实体
使用AutoCAD Civil 3D打开CASS生成的地形图,由于CASS地形图中的地形点是以块形式存在的,虽然我们可以使用CAD的图元对象中的块进行曲面定义,但这样做的结果就是虽有曲面但没有对应的地 ...
- FME对Autodesk AutoCAD Civil 3D的支持
原文发布时间:2013-06-18 翻译文章链接:http://fmepedia.safe.com/articles/FAQ/Autodesk-AutoCAD-Civil-3D 翻译:毛毛虫 目前FM ...
- 初级php工程师考试,Autodesk AutoCAD Civil 3D初级工程师
试题说明: 考题数量:共 50 道,考试通过答对题目数:30 题 考试时间:180 分钟 试题种类:单选题和多选题 考试内容: [考试知识点] (10%)概述 (5 题) (20%)基本操作 (10 ...
- AutoCAD Civil 3D笔记
本文纯属笔记,年纪大了备忘而已.不喜勿入,不懂速出! 1.块编辑及定义 块编辑命令:BE 块定义命令:BM 添加属性:ATTDEF 管理块属性:BATTMAN 创建块:BLOCK 写块:WBLOCK ...
最新文章
- data-参数说明(模态弹出窗的使用)
- ContentObserver类的使用
- ASP.NET 4.0 新特性--Web.Config Transformation(原创)
- 梦断代码阅读笔记之一
- 海思前几帧图像不正常_电视有声音没有图像要怎么维修
- php+条件限定符,const 限定符
- mysql操作数据库
- idea存在包但是运行项目一直报java.lang.NoClassDefFoundError的问题
- python 中主线程结束 子线程还在运行么_「干货」python线程笔记
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据...
- 修改网页代码_利用网页监控优势,做百度自动推送
- shell训练营Day30
- opencv成员函数data,step,at的使用
- Camshift算法
- 2022/3/25 阿里笔试ACM模式下Scanner的坑
- 35岁开发转测试,能度过中年危机吗?
- (附源码)springboot电影院售票与管理系统 毕业设计 011449
- 二层与三层交换机我知道,四层交换机是什么东西?
- vim简单用法-配合pycharm
- 文本分类实战—— Bi-LSTM模型
热门文章
- 吞吐量达到瓶颈后下降_TD-HSDPA空口吞吐量或成瓶颈-通信/网络-与非网
- Office-Microsoft365-家庭和个人版下载和安装
- 什么软件可以测试自己王者本命英雄,王者荣耀本命英雄测试入口在哪2021
- 233网校计算机三级ppt,计算机系统课件.ppt
- 【个人网站】常见顶级域名大全(持续更新)
- ENSP连接vm虚拟机
- spoj 2916. Can you answer these queries V(线段树)
- .c文件生成.cgi文件
- 解决bugfree不能发邮件的问题!!
- iOS开发中利用AFNetWorking判读网络是否连接