学习c#的念头由来已久。
楼主大学的专业不是计算机,而是传统工科专业,工作之后去了房地产相关行业,错付了两三年,之后痛定思痛耗费接近一年的时间转行入了java,属于是从一个坑跳到另一个坑了。
以前在设计行业天天用CAD,那时候有过想学习编程的念头,只不过当时的愿望是由开发CAD插件驱动的,工作中会经常碰到一些场景,非常适合用CAD插件来自动化的解决问题。然而,正如上边所说,楼主不是计算机专业,在大学时对编程也是一塌糊涂,就连开课内容最简单的C++,简单到背题就能过的课程,都补考了一次才过。
当然这中间由楼主先入为主,觉得编程很难,殊不知那么多自学成才的人,楼主自认为还是属于学习能力较强的一批人,当然也可以自学成才。但是,作为一个上了大学才学会用office,成年之前对计算机的认知仅限于到网吧上网打游戏的人来说,先入为主的观念让楼主对编程敬而远之。
总之,错过了。现在回过头来看,编程真的不难。所以,当现在java行情堪忧的时候,楼主想逼自己自律一把,让自己能有耐下心来自学一下一门当前可能用不上的技术。
为什么是c#?因为楼主还是想从相对熟悉的领域入手-CAD二次开发。CAD二次开发目前主流有两种,CAD的原生语言auto-lisp,再者就是c#。当然c/cpp也是常见的开发语言,但是使用量上还是差了很多,而且学习成本相对更高一些。再加上楼主这么多年都是用的windows主机,对windows算熟悉,也算不熟悉,如果选择一款语言用来开发桌面软件或者桌面软件的插件,那么楼主首选的就是能在windows系统上运行的。
纵然autolisp和系统无关,只要是有cad就能运行,但是这种语言毕竟有些局限了,也有些过时了,不如学习一下c#,除了开发cad插件,还能有其他更多的作用。
那么话不多说,让我们开始吧。
最近AI气势汹汹,蒸蒸日上,楼主也懒得从网上shi里淘金,直接让国内最强AI(个人看法)——Deepseek——D指导,给出一个使用C#进行CAD二次开发的学习路线,D指导的回复如下:
(从分割线开始,后续内容为D指导给出的学习路线)
以下是针对C#进行CAD二次开发的学习路线,分为基础、进阶和实战三个阶段,帮助你系统掌握相关技能:
第一阶段:基础准备
1. C#语言基础
- 核心内容:
- 基本语法(变量、循环、条件判断)
- 面向对象编程(类、继承、接口、多态)
- 异常处理(
try-catch-finally) - 文件操作(
System.IO) - 集合与泛型(
List<T>,Dictionary<TKey, TValue>)
- 学习资源:
- 书籍:《C#入门经典》《C#高级编程》
- 在线教程:菜鸟教程C#
2. CAD二次开发基础
- 核心内容:
- 了解CAD二次开发的基本概念(如ObjectARX、AutoCAD .NET API)。
- 学习AutoCAD对象模型(Application、Document、Database、Entity等)。
- 掌握常用命名空间:
Autodesk.AutoCAD.ApplicationServicesAutodesk.AutoCAD.DatabaseServicesAutodesk.AutoCAD.EditorInput
- 学习资源:
- AutoCAD .NET开发者文档
- 书籍:《AutoCAD .NET开发指南》
第二阶段:开发环境与核心API
1. 开发环境搭建
- 步骤:
- 安装Visual Studio(推荐2022版)。
- 安装AutoCAD(目标版本需与开发环境匹配)。
- 配置项目引用:添加
acdbmgd.dll和acmgd.dll(位于AutoCAD安装目录)。 - 设置调试路径,使生成的DLL能被AutoCAD加载。
2. 核心API学习
- 关键知识点:
- 应用程序与文档对象:
var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; - 数据库操作:
- 事务(
Transaction)的使用。 - 创建实体(直线、圆、多段线等)并添加到模型空间。
using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; Line line = new Line(new Point3d(0,0,0), new Point3d(100,100,0)); btr.AppendEntity(line); tr.AddNewlyCreatedDBObject(line, true); tr.Commit(); } - 事务(
- 用户交互:
- 使用
Editor.GetXXX()方法获取用户输入(如点、字符串、选择集)。
PromptPointResult ppr = ed.GetPoint("请选择一个点:"); if (ppr.Status == PromptStatus.OK) { Point3d selectedPoint = ppr.Value; } - 使用
- 事件与回调:
- 注册命令(
CommandMethod)和响应事件(如文档打开、保存)。
- 注册命令(
- 应用程序与文档对象:
第三阶段:进阶与实战
1. 进阶技能
- 自定义实体与对象:
- 继承
DBObject创建自定义CAD对象。
- 继承
- 界面开发:
- 使用WPF或WinForm创建自定义面板(PaletteSet)。
- 批量处理与效率优化:
- 使用LINQ处理大量数据。
- 多线程优化(注意AutoCAD API的线程限制)。
- 三维开发:
- 学习三维实体操作(
Solid3d、Region)。
- 学习三维实体操作(
- 与其他软件交互:
- 通过COM与Excel、Revit等交互。
2. 实战项目
- 项目示例:
- 批量修改图层:遍历图形中所有实体,修改指定图层的颜色。
- 参数化绘图工具:根据用户输入参数自动生成机械零件图。
- 数据提取工具:导出CAD图形中的属性到Excel。
- 开源项目参考:
- GitHub:AutoCAD.NET Samples
- AutoCAD .NET Wizard(快速生成项目模板)
学习资源推荐
- 官方资源:
- 社区与论坛:
- 视频教程:
- B站搜索“AutoCAD二次开发 C#”系列教程。
- Udemy课程:AutoCAD .NET Programming Using C#
注意事项
- 版本兼容性:不同AutoCAD版本的API可能有差异,建议使用较新版本(如AutoCAD 2023)。
- 调试技巧:使用
ed.WriteMessage()输出调试信息,或附加到AutoCAD进程调试。 - 性能优化:避免在循环中频繁打开/关闭事务,优先使用批量操作。
通过以上路线,你可以在3-6个月内掌握C#进行CAD二次开发的核心技能,逐步实现从简单插件到复杂工具的开发。
(以上为D指导给出的学习路线,好了,下一集,楼主就从c#的语法学习开始吧。当然,对于有编程基础的人来说,这一步会很快。给自己立一个flag,争取将这个学习系列更新完吧~)