用C#来开发CAD插件,含源代码

CAD插件看起来很神秘,其实一个合格码农经过几天就能快速掌握。没什么秘密,开发CAD插件和winform一样简单学几个类库用法就是(只是太多人不喜欢知识分享),在CAD里展现界面和winform略有不同(整个项目工程在文章的最后有下载)。

 

学习CAD插件开发的动机是为了薪水,由于公司是做显示屏和触摸屏的,养了一堆CAD的设计工程师拿着8K以上的薪水,当时我做为信息系统开发人员才拿4K,4个人要开发维护整个公司(2万人,几十个部门)的系统,感觉严重不平衡,便挑战一下设计工程师,借此提高自身价值。

适用案例,公司做手机屏要放UV胶来贴合,用CAD画一个边框加一些线条。看着设计工程师们画画CAD也有那么多薪水,心里不平衡就搞出一个按照参数自动出图的东西。当然实际的项目比我放出的复杂得多,这里只是讲讲CAD插件技术,不涉及实际项目。总之无论多复杂,凡是根据参数生成固定图形的,CAD插件程序都可以胜任。

效果展示:

1,命令行:

2,右键菜单:

3,工具条,CAD内嵌界面,和winform一样简单

闲话少说,直接上原理和代码:

0,
项目效果查看:
a:在CAD2006的命令行输入netload,加载Test.dll
b1:在命令行输入helloworld可以看到命令功能
b2:右键可以看到右键菜单,画一个红色的圆
b3:左边工具面板多了一个工具条,有个界面可以输入各种参数来画一个组合图形


1,建一个xindows窗体程序项目,设置输出为类库
2,引用acdbmgd.dll和acmgd.dll
3,引用如下命名空间
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Windows.ToolPalette;
using Autodesk.AutoCAD.Windows;


4,在Form1上规划界面和后台代码。重点看代码如何实现

5,计划是CAD上增加一个面板按钮,点击按钮就打开Form1来自动画图。
   这里我们加一个用户控件,拖一个按钮,按钮方法写:
Form1 modalForm = new Form1();          
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(modalForm);
注意这里仅仅是打开的窗体的方式选择了AutoCAD的方式。  
想建立一整套工具栏,就多拉几个按钮。按4的方法写好每个按钮执行的代码(可以要个Form1这样的界面,也可以不要,自由选择)

6,把这个项目导出还需要一个类来辅助
先看初始化Initialize()和Terminate()方法。这里给CAD加了一个面板工具栏和右键菜单,以及一些命令行

1,这个class1类分别演示了命令行、右键菜单、工具条的实现。注释得非常清楚了,就不做多解释。 

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using Autodesk.AutoCAD.EditorInput;
  6 using Autodesk.AutoCAD.ApplicationServices;
  7 using Autodesk.AutoCAD.Runtime;
  8 using Autodesk.AutoCAD.DatabaseServices;
  9 using Autodesk.AutoCAD.Geometry;
 10 using Autodesk.AutoCAD.Windows.ToolPalette;
 11 using Autodesk.AutoCAD.Windows;
 12 
 13 namespace Test
 14 {
 15     public class Class1 : Autodesk.AutoCAD.Runtime.IExtensionApplication
 16     {
 17         ContextMenuExtension m_ContextMenu;//定义右键菜单 
 18         PaletteSet palSet;//定义工具栏按钮
 19 
 20         //初始化方法,这里加了一个面板工具栏和右键菜单。如果不要右键菜单,注释即可
 21         public void Initialize()
 22         {
 23             AddContextMenu();//添加面板工具栏
 24             AddPalette();//添加右键菜单
 25         }
 26 
 27         //卸载方法
 28         public void Terminate()
 29         {
 30             Remove
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用region对象分割多段线的C#代码示例: ```csharp using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; public void SplitPolylineByRegion(Polyline polyline, Region region) { Database db = HostApplicationServices.WorkingDatabase; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); bool isInsideRegion = false; Point3dCollection points = new Point3dCollection(); for (int i = 0; i < polyline.NumberOfVertices; i++) { Point3d point = polyline.GetPoint3dAt(i); if (region.IsPointInside(point, Vector3d.ZAxis)) { if (!isInsideRegion) { if (points.Count > 1) { Polyline newPolyline = new Polyline(points.Count); for (int j = 0; j < points.Count; j++) { newPolyline.AddVertexAt(j, points[j], 0, 0, 0); } btr.AppendEntity(newPolyline); tr.AddNewlyCreatedDBObject(newPolyline, true); } points = new Point3dCollection(); } isInsideRegion = true; } else { if (isInsideRegion) { points.Add(point); } isInsideRegion = false; } } if (points.Count > 1) { Polyline newPolyline = new Polyline(points.Count); for (int j = 0; j < points.Count; j++) { newPolyline.AddVertexAt(j, points[j], 0, 0, 0); } btr.AppendEntity(newPolyline); tr.AddNewlyCreatedDBObject(newPolyline, true); } tr.Commit(); } } ``` 这个方法接受两个参数,一个是多段线对象,另一个是region对象。方法会遍历多段线的所有顶点,判断每个顶点是否在region内部。如果顶点在region内部,就将其添加到新的多段线中;如果顶点不在region内部,就将之前的顶点组成的多段线添加到图形数据库中,并开始新的多段线。 注意,此代码示例仅供参考,并不保证在所有情况下都能正常工作。您需要根据具体的项目需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值