c#学习笔记 day-1

163 阅读5分钟

学习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.ApplicationServices
      • Autodesk.AutoCAD.DatabaseServices
      • Autodesk.AutoCAD.EditorInput
  • 学习资源

第二阶段:开发环境与核心API

1. 开发环境搭建

  • 步骤
    1. 安装Visual Studio(推荐2022版)。
    2. 安装AutoCAD(目标版本需与开发环境匹配)。
    3. 配置项目引用:添加acdbmgd.dllacmgd.dll(位于AutoCAD安装目录)。
    4. 设置调试路径,使生成的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的线程限制)。
  • 三维开发
    • 学习三维实体操作(Solid3dRegion)。
  • 与其他软件交互
    • 通过COM与Excel、Revit等交互。

2. 实战项目

  • 项目示例
    1. 批量修改图层:遍历图形中所有实体,修改指定图层的颜色。
    2. 参数化绘图工具:根据用户输入参数自动生成机械零件图。
    3. 数据提取工具:导出CAD图形中的属性到Excel。
  • 开源项目参考

学习资源推荐

  1. 官方资源
  2. 社区与论坛
  3. 视频教程

注意事项

  • 版本兼容性:不同AutoCAD版本的API可能有差异,建议使用较新版本(如AutoCAD 2023)。
  • 调试技巧:使用ed.WriteMessage()输出调试信息,或附加到AutoCAD进程调试。
  • 性能优化:避免在循环中频繁打开/关闭事务,优先使用批量操作。

通过以上路线,你可以在3-6个月内掌握C#进行CAD二次开发的核心技能,逐步实现从简单插件到复杂工具的开发。


(以上为D指导给出的学习路线,好了,下一集,楼主就从c#的语法学习开始吧。当然,对于有编程基础的人来说,这一步会很快。给自己立一个flag,争取将这个学习系列更新完吧~)