以下将列举几个简单的二、三维开发的小例子:

//定位
public void Zoom()
{Document doc =     Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Point2d pt1 = new Point2d(0, 0);Point2d pt2 = new Point2d(2, 2);string cmd = string.Format("Zoom {0},{1} {2},{3} ", pt1.X, pt1.Y, pt2.X, pt2.Y);doc.SendStringToExecute(cmd, true, false, false);
}
//画线、文字、圆
private void DrawLine_Click(object sender, EventArgs e){//这句话和m_DocumentLock.Dispose();不加有时候会报错DocumentLock m_DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();Point3d startPoint = new Point3d(0, 0, 0);  //直线起点  Point3d endPoint = new Point3d(300, 300,300); //直线终点  Line line;// = new Line(startPoint, endPoint); //新建一直线对象//DBText acText;//新建文字对象//Circle circle; //圆BlockTableRecord btr;//要加入直线,我们必须打开模型空间BlockTable bt; //要打开模型空间,我们必须通过块表(BlockTable)来访问它//我们使用一个名为‘Transaction’的对象,把函数中有关数据库的操作封装起来Transaction trans;//使用 TransactionManager 的 StartTransaction()成员来开始事务处理trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();//现在创建直线line = new Line(startPoint, endPoint);//acText = new DBText();//acText.Position = new Point3d(0, 0, 0);//acText.Height = 50;//acText.TextString = "Test show text";//circle = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 50);bt = (BlockTable)trans.GetObject(HostApplicationServices.WorkingDatabase.BlockTableId, OpenMode.ForRead);//使用当前的空间 Id 来获取块表记录——注意我们是打开它用来写入btr = (BlockTableRecord)trans.GetObject(HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite);//现在使用 btr 对象来加入直线btr.AppendEntity(line);trans.AddNewlyCreatedDBObject(line, true); //并确定事务处理知道要加入直线!//一旦完成以上操作,我们就提交事务处理,这样以上所做的改变就被保存了……trans.Commit();//…然后销毁事务处理,因为我们已经完成了相关的操作(事务处理不是数据库驻留对象,可以销毁)trans.Dispose();m_DocumentLock.Dispose();}

三维图形实例

private void button4_Click(object sender, EventArgs e){DocumentLock m_DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();Solid3d t = Torus(200,30);Move(t,new Point3d(100,100,0));ToModelSpace(t);Solid3d b = Box(100,300,100);Move(b, new Point3d(-300,-300,0));ToModelSpace(b);m_DocumentLock.Dispose();}/// <summary>/// 添加实体到模型空间/// </summary>/// <param name="entity">要添加的实体</param>/// <returns>实体ObjectId</returns>private ObjectId ToModelSpace(Entity entity) {Database db = HostApplicationServices.WorkingDatabase;ObjectId id;using(Transaction trans=db.TransactionManager.StartTransaction()){BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);BlockTableRecord modelSpace = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);id = modelSpace.AppendEntity(entity);trans.AddNewlyCreatedDBObject(entity,true);trans.Commit();trans.Dispose();}return id;}/// <summary>/// 创建圆环体/// </summary>/// <param name="majorRadius">主圆半径</param>/// <param name="minorRadius">圆环半径</param>/// <returns>圆环体</returns>private Solid3d Torus(double majorRadius,int minorRadius) {Solid3d solid = new Solid3d();solid.CreateTorus(majorRadius,minorRadius);return solid;}/// <summary>/// 创建长方体/// </summary>/// <param name="x">长</param>/// <param name="y">宽</param>/// <param name="z">高</param>/// <returns></returns>private Solid3d Box(double x,double y, double z) {Solid3d solid = new Solid3d();solid.CreateBox(x,y,z);return solid;}/// <summary>/// 以原点为基点,指定目标点移动实体/// </summary>/// <param name="entity">实体对象</param>/// <param name="point">目标点</param>private void Move(Entity entity,Point3d point) {Matrix3d matrix = Matrix3d.Displacement(point-new Point3d());entity.TransformBy(matrix);        }

选择图形、删除图形

//选择图形private void chooseObj_Click(object sender, EventArgs e){DocumentLock m_DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();PromptEntityOptions pEntityOptions = new PromptEntityOptions("Select a Entity");PromptEntityResult pEntityResult;Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;pEntityResult = ed.GetEntity(pEntityOptions);if (pEntityResult.Status != PromptStatus.OK){ed.WriteMessage("没有选中!请重新选择!");}else{ed.WriteMessage("你选择的图形ID是: " + pEntityResult.ObjectId);Entity entity = (Entity)trans.GetObject(pEntityResult.ObjectId, OpenMode.ForRead, true);if (!entityList.Equals(entity)) { entityList.Add(entity); }if (ids.IndexOf(pEntityResult.ObjectId) == -1){this.textBox1.Text += pEntityResult.ObjectId + ",";ids.Add(pEntityResult.ObjectId);}else { ed.WriteMessage("已选择该图形!"); }}trans.Commit();trans.Dispose();m_DocumentLock.Dispose();}//删除选中图形private void button1_Click(object sender, EventArgs e){DocumentLock m_DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();//Database db = null;foreach (ObjectId id in ids){Entity entity = (Entity)trans.GetObject(id, OpenMode.ForWrite, true);if (entity == null || entity.IsErased == true || entity is ProxyEntity){continue;}entity.Erase(true);}trans.Commit();trans.Dispose();this.textBox1.Text = "";ids.Clear();entityList.Clear();m_DocumentLock.Dispose();}

在开发过程和本篇文章中参考了《[深入浅出AutoCAD.NET二次开发]》李冠亿著这本书,讲的很详细,很适合入门,大家如果有兴趣可以找来看看。

CAD二次开发c#(三)简单的二、三维开发实例相关推荐

  1. 微信公众平台开发(三)——微信二维码生成扫码关注

    微信二维码生成是指后端发送请求向微信服务器申请公众号的二维码,用户如果未关注,进行扫描改二维码后即跳转道公众号的关注页面:如果已经关注,扫描二维码后直接进入该微信公众号.当用户扫码时,微信服务器会向后 ...

  2. Unity编辑器开发(三):实战、开发一个AB包编辑器工具

    前言 本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的: 界面详解: 1.Create:创建一个新的空的 ...

  3. 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  4. python 二维强度图_Python简单做二维统计图

    先上一张效果图: 以上图是一段时间内黄金价格的波动图. 代码如下: importdatetime as DTfrom matplotlib importpyplot as pltfrom matplo ...

  5. php获取二维数组前三条,php二维数组排序后获取最大值

    PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 自定义: [code lang=" [/code] 最近在做一个数据分析 ...

  6. Nutch开发(三)

    Nutch开发(三) 文章目录 Nutch开发(三) 开发环境 1.Nutch url过滤 2.示例 3.在Solr建立index 关于solr字段的配置 4.关于Nutch plugin 5.关于N ...

  7. javaweb学习总结(二十五):jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  8. 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁

    上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...

  9. 微信开发学习二 -- 微信开发入门(简单demo)

    一.微信公众平台的基本原理 在开始做之前,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器 ...

最新文章

  1. 又一名逃犯在张学友演唱会被 AI 捕获,人送绰号“热心歌神张先生”
  2. 实训23 2018.4.27
  3. 【数据竞赛】5行代码提升GBDT,提升巨大!
  4. 面试也需要刷题?你至少需要知道这些……
  5. RxSwift之深入解析Subject的使用和实现原理
  6. 阿里技术大神:你没做错啥,你错在啥都没做
  7. angular实现select的ng-options
  8. 类的扩充 js中面向对象的技术
  9. python读取csv文件忽略空值_如何跳过/忽略csv文件中的空字节pd.read_csv?
  10. mysql 增加建表权限,mysql_基本权限模型建表结构
  11. h5+js调取相机做取景框_iPhone 12 相机操作指南,用好了随手一拍就是大片!
  12. .Net MVC中SelectList绑定默认值失效的解决办法
  13. 《图解算法》学习笔记之快速排序
  14. 3D打印自动支撑算法
  15. 人工智能算法(一)进化算法
  16. java excel 导出加密
  17. 阿里云上实现DDNS公网解析
  18. 关于阅读理解,我们学的,都是错的
  19. 自己实现Lock(独享锁)
  20. OpenGL 开始学习指南

热门文章

  1. 教你用 Spring Boot 表白女神,撒一波高技术狗粮
  2. minecraft简易服务器搭建
  3. 马云计算机图片大全集,五福图片扫福字原图最新图片 马云的福字特殊福字图片大全...
  4. 小虎电商浏览器:淘数据要如何去监控店铺?
  5. elasticsearch基本操作之--使用java操作elasticsearch
  6. signal二次开发
  7. 2021-11-10手持红外测温枪方案
  8. c语言撩妹程序,C语言撩妹法则
  9. 考试考试~~ 再考试
  10. 团队合作 职业素养课 体会