CAD二次开发c#(三)简单的二、三维开发实例
以下将列举几个简单的二、三维开发的小例子:
//定位
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#(三)简单的二、三维开发实例相关推荐
- 微信公众平台开发(三)——微信二维码生成扫码关注
微信二维码生成是指后端发送请求向微信服务器申请公众号的二维码,用户如果未关注,进行扫描改二维码后即跳转道公众号的关注页面:如果已经关注,扫描二维码后直接进入该微信公众号.当用户扫码时,微信服务器会向后 ...
- Unity编辑器开发(三):实战、开发一个AB包编辑器工具
前言 本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的: 界面详解: 1.Create:创建一个新的空的 ...
- 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- python 二维强度图_Python简单做二维统计图
先上一张效果图: 以上图是一段时间内黄金价格的波动图. 代码如下: importdatetime as DTfrom matplotlib importpyplot as pltfrom matplo ...
- php获取二维数组前三条,php二维数组排序后获取最大值
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 自定义: [code lang=" [/code] 最近在做一个数据分析 ...
- Nutch开发(三)
Nutch开发(三) 文章目录 Nutch开发(三) 开发环境 1.Nutch url过滤 2.示例 3.在Solr建立index 关于solr字段的配置 4.关于Nutch plugin 5.关于N ...
- javaweb学习总结(二十五):jsp简单标签开发(一)
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...
- 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁
上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...
- 微信开发学习二 -- 微信开发入门(简单demo)
一.微信公众平台的基本原理 在开始做之前,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器 ...
最新文章
- getter 和 setter方法
- error LNK2001: unresolved external symbol public: virtual void *__thiscall
- 设定行车路线实验matlab,桥式吊车小车运动控制系统的建模及MATLAB仿真讲解.doc...
- SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,
- Android GridView 分页加载数据
- 制作可保存配置的U盘版BT4(BackTrack4 )
- Android MQTT客户端
- Windows环境下JDK安装与环境变量配置
- 防火墙阻止了IE服务器未响应,ie防火墙如何禁用
- windowslive站点源码里的学问
- mce:style或者mcs:script是什么意思
- python注释是什么意思_python中注释的意思是什么
- 94、基于51单片机的无线调频对讲机系统设计
- JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
- 中国大学生计算机设计大赛英语,中国大学生计算机设计大赛
- 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码
- WeakHashMap相关
- 论文管理工具:Zotero使用心得
- 三十二楼层选几层最好_一般买房买几楼比较好 1一32高楼层选最佳楼层
- Python pip 安装、使用与升级