我以前只有一点VB的基础,C语言也只是看过,学这个CAD二次开发,也是借工作之余研究下,我到现在已经从事机械行业5年了,中国的工业设计环境区别太大,各行各业的技术现状也不尽相同,但有一点是可以肯定的,那就是自动化,国外都在工业4.0了,我们还在互联网+,哎太out了,我也赶紧进修下,要不就淘汰了。所以我选择了CAD二次开发,主要还是跟专业接近,希望能越学越精吧,未来就让未来的我去面对!

今天主要总结下直线的创建,要想能在CAD中生成直线或者其他图形,都必须遵循几个步骤,那就是:

1.获取当前图形的数据库;

获取图形数据库主要有两种发法:

(1)Database db = HostApplicationServices.WorkingDatabase;

(2)Document doc=Appplication.DocumentManager.MdiActiveDocument;

Database db = acDoc.Database;

才鸟的这本书上主要是采用第一种方法,CAD二次开发人员手册主要是采用第二种方法,我也采用的第一种,因为代码少啊;

2.创建图形对象;

创建所需要的图形,就要用到构造函数或者是扩展函数,譬如圆形、圆弧等等;今天我就总结下直线的创建。在.NET中直线的构造函数有两种形式,这两种构造函数是.NET已经定义好了的,可以直接调用;他们分别是:

(1)public Line();

(2)public Line(Point3d pointer1,Point3d pointer2)

众所周知,直线是有两个点之间的连线构成的,那么要得到一条直线,就必须给出这条直线的两个点,起始点和终止点;由上面的构造函数(Piont3d)可以看出,起始点和终止点需要通过三维坐标来创建,这个在.NET中也有他的构造函数(也可以通过代码中的“查看定义”找到):

Public Point3d(double x,double y,double z);

那么定义一条直线就可以这样写代码:

Line line=new Line(new Point3d(),new Point3d(200,0,0));

New表示要实例化一个对象,Point3d()表示原点,坐标为(0,0,0).

3.打开图形数据库图表;

图形数据中有很多类型的图表,直线就是存在块表下。要创建直线就必须先打开块表,以只读的方式打开块表的代码可以这样写:

BlockTable acBlkTbl;

acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;

4.打开一个存储图形对象的块表记录;

一个块表中可以有很多个块表记录,每个对象都有一个对应的块表记录;以写的方式打开块表记录代码可以这样写:

BlockTableRecord acBlkTblRec;
acBlkTblRec = cTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;

5.将该图形添加到块表记录中;

acBlkTblRec.AppendEntity(acLine);

说实话我现在也不是很理解。

6.通知事务处理管理器,并提交事务处理,这样就可以将创建的图形显示到CAD模型空间中了;在这我感觉步骤3也可以放到步骤4和5后面,我的代码也有这样写的,但是也没出现错误。

将图形添加到事物管理器中的代码这样写:

acTrans.AddNewlyCreatedDBObject(acLine, true);

最后就是提醒事物处理器,我完成了,你可以显示了。

acTrans.Commit();

整体代码:

using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using DotNetARX;
namespace Lines
{public class Lines{[CommandMethod("FirstLine")]public static void FirstLine(){//获取当前活动图形数据库Database db= HostApplicationServices.WorkingDatabase;Point3d startPoint=new Point3d(0, 100, 0);  //直线起点Point3d endPoint=new Point3d(100, 100, 0); //直线终点Line line=new Line(startPoint, endPoint); //新建一直线对象   //定义一个指向当前数据库的事务处理,以添加直线using (Transaction trans=db.TransactionManager.StartTransaction()){BlockTable bt=(BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); //以读方式打开块表.//以写方式打开模型空间块表记录.BlockTableRecord btr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);//将图形对象的信息添加到块表记录中,并返回ObjectId对象.
                btr.AppendEntity(line);trans.AddNewlyCreatedDBObject(line, true); //把对象添加到事务处理中.trans.Commit(); //提交事务处理
            }}}
}

不过我经常是这样写:

using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using DotNetARX;
namespace Lines
{public class Lines{[CommandMethod("FirstLine")]public static void FirstLine(){//获取当前活动图形数据库Database db= HostApplicationServices.WorkingDatabase;//定义一个指向当前数据库的事务处理,以添加直线using (Transaction trans=db.TransactionManager.StartTransaction()){BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable; //以读方式打开块表.//以写方式打开模型空间块表记录.
                BlockTableRecord acBlkTblRec;acBlkTblRec=acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;Point3d startPoint=new Point3d(0, 100, 0);  //直线起点Point3d endPoint=new Point3d(100, 100, 0); //直线终点Line line=new Line(startPoint, endPoint); //新建一直线对象//将图形对象的信息添加到块表记录中,并返回ObjectId对象.
                acBlkTblRec.AppendEntity(line);trans.AddNewlyCreatedDBObject(line, true); //把对象添加到事务处理中.trans.Commit(); //提交事务处理
            }}}
}

我也是刚学,如有不对的地方,望大家及时指正,我将感激不尽!

.NET AutoCAD二次开发之路(二、直线篇)相关推荐

  1. catia二维图坐标如何表示_【二次开发】CATIA二维图一键标注投影点信息

    原标题:[二次开发]CATIA二维图一键标注投影点信息 CATIA软件不仅可以用来建立三维模型,用它来出二维图纸也是个不错的选择.且相对于传统的铅笔橡皮丁字尺和AutoCAD来说,CATIA二维图中的 ...

  2. lisp 圆柱螺旋线_Auto LISP对AutoCAD2002进行二次开发实例——绘制二维函数曲线

    Auto LISP 对 AutoCAD 2002 进行二次开发实例 ---绘制二维函数曲线Ξ李旭荣 ,任奕玲 ,梁秀英 ,刘梅英 (华中农业大学 工程技术学院 ,湖南 武汉 430070) 摘 要:主 ...

  3. pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...

    二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...

  4. tekla二次开发用C语言,Tekla能够进行哪些二次开发?Tekla二次开发功能详解

    我们话不多说,这次小编来给你讲一些搜罗而来的Tekla软件二次开发的功能.虽然是科普,不过这些二次开发功能有的还真的是很好用的,帮了大忙. 一.桥梁功能 如果向Tekla插件中加入了桥梁模块的功能,通 ...

  5. 基于C#进行AutoCAD二次开发初探(二)——C#编写代码直接打开AutoCAD并显示图形

    AutoCAD 2006 Type Library   //我用的是CAD2006版 AutoCAD/ObiectDBX Common 16.0 Type Library 把这两个引用的命名空间引进来 ...

  6. 我的.Subtext二次开发之路系列:引言

    话说2007年10月,因为陈诺帮助朋友学校开发一套适用于校园的社区系统,所以在经过多方搜寻.对比的基础上,最后选择了.subtext,一是因为.subtext为.text的后续版本,第二原因是.sub ...

  7. 我的.Subtext二次开发之路系列:兵马未动,粮草先行

    <引言>得到众多群友的关注,让我感觉压力甚大,不知是否能够回报给大家尽可能高质量的完整系列.同时从反馈获知希望能够共同交流.subtext研究心得的群友不少.所以,我干脆架设了一个相关站点 ...

  8. C#CAD二次开发学习 两条直线求交点的方法IntersectWith的一点整理

    求两条直线交点时可以使用IntersectWith方法,但对于我这种初学者有点摸不清该怎么使用. 直接上代码吧 [CommandMethod("GTest")]public sta ...

  9. android系统二次开发,Andorid系统二次开发界面

    Andorid系统二次开发界面 给大家介绍完外观,下面我们一起再来看下魅族MX的系统界面.本次魅族MX仍然采用的是Andorid操作系统,并且加入了二次开发界面.UI界面整体上保持了和M9的特色,不过 ...

最新文章

  1. 删除取消 excel 2007 自动生成的超链接
  2. Spring实战(第3版)
  3. Nginx + PHP/PHP-FPM安装配置示例
  4. 【Linux】【服务器】 CentOS7下远程访问mysql数据库_创建用户及授予权限_查看用户、修改密码详细步骤
  5. NumPy基础入门学习
  6. How is product data bound in Opportunity Edit page
  7. 【C++学习笔记三】C++多态、抽象(接口)
  8. 快速幂运算 《挑战程序设计竞赛》
  9. linux 下 c++ 实现 netstat_Linux下基于签名技术的软件保护之实现流程
  10. HBase(2) Java 操作 HBase 教程
  11. 自动化测试--封装getDriver的方法
  12. hdfs里的文件下载HDFS之fsimage、metadata、edits、fstime(二十七)
  13. vue设置列表数据添加
  14. 防SQL注入(转载)
  15. hg更新下载指定版本
  16. 春招面试的总结与自我反省
  17. 《太极张三丰》原声音乐 320/mp3打包下载
  18. vscode下载慢、安装、插件和使用(七七)
  19. web网站搭建(nginx优化)二
  20. CHM格式 打开后不显示内容的解决办法

热门文章

  1. LCD1602与DHT11温湿度的使用
  2. 逆向工程核心原理 小结
  3. Sketch Nyquist plot 徒手绘制Nyquist 曲线
  4. 手机4k屏幕测试软件,索尼Z5 Premium 4K屏幕测试:1080p屏是王道!
  5. 2019年南京大学计算机研究生复试分数线,2019年南京大学研究生复试分数线
  6. Debian10自签CA证书
  7. 广西首届网络安全选拔赛 MISC Wirteup
  8. 打不开 /dev/vmmon: 无此文件或目录。请确保已载入内核模块 ’vmmon’”。
  9. navicat 表合并查询_数据库两个表合并命令
  10. 芯昇,XS5013,ISP+TX,模拟高清,AHD