找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2586|回复: 0

[分享] Autocad开发入门学习手记(四)

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-3 08:26:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原帖地址:
http://blog.sina.com.cn/s/blog_4cb57a380101f5gt.html
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.Geometry;
  8. namespace DotNetARX
  9. {
  10.     public static class EntTools
  11.     {      
  12.             public static void Move(this ObjectId id, Point3d sourcePt, Point3d targetPt)
  13.             {
  14.                 //构建用于移动实体的函数
  15.                 Vector3d vector = targetPt.GetVectorTo(sourcePt);//获得一个从起点到终点的向量vector
  16.                 Matrix3d mt = Matrix3d.Displacement(vector);//构建移动矩阵
  17.                 //displacement是matrix3d的一个函数(方法),用于构建一个以vector为向量的矩阵
  18.                 //以写的方式打开ID表示的实体对象
  19.                 Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
  20.                 ent.TransformBy(mt);//对实体实施移动
  21.                 //tranformby是entity的一个函数(方法),用于对矩阵进行操作,移动、旋转、赋值等
  22.                 //pubilc virtual void transformby(matrix3d transform)
  23.                 ent.DowngradeOpen();//为防止错误,切换实体为读的状态
  24.             }
  25.             public static ObjectId Copy(this ObjectId id, Point3d sourcePt, Point3d targetPt)
  26.             {
  27.                 //构建用于复制实体的矩阵
  28.                 Vector3d vector = targetPt.GetVectorTo(sourcePt);//获得一个从起点到终点的向量vector
  29.                 Matrix3d mt = Matrix3d.Displacement(vector);//构建移动矩阵
  30.                 //displacement是matrix3d的一个函数(方法),用于构建一个以vector为向量的矩阵
  31.                 //获取ID表示的实体对象
  32.                 Entity ent = (Entity)id.GetObject(OpenMode.ForRead);
  33.                 Entity entCopy = ent.GetTransformedCopy(mt);//获取实体的复制件
  34.                 //将复制的实体对象添加到模型空间
  35.                 ObjectId copyId = id.Database.AddToModelSpace(entCopy);
  36.                 return copyId;//返回复制的实体的ObjectId
  37.             }
  38.             public static void Rotate(this ObjectId id,Point3d basePt,double angle)
  39.             {
  40.                 Matrix3d mt = Matrix3d.Rotation(angle, Vector3d.ZAxis, basePt);
  41.                 //public static Matrix3d Rotation(double angle,Vertor3d axis,Point3d center)
  42.                 //angle旋转角度,axis旋转轴,center旋转中心
  43.                 Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
  44.                 ent.TransformBy(mt);
  45.                 ent.DowngradeOpen();
  46.             }
  47.             public static void Scale(this ObjectId id, Point3d basePt, double scaleFactor)
  48.             {
  49.                 Matrix3d mt = Matrix3d.Scaling(scaleFactor, basePt);
  50.                 //public static Matrix3d Scaling(double scaleAll,Point3d center)
  51.                 //scaleALL缩放比例,center缩放中心
  52.                 Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
  53.                 ent.TransformBy(mt);
  54.                 ent.DowngradeOpen();           
  55.             }
  56.             public static ObjectId Mirror(this ObjectId id, Point3d mirrorPt1, Point3d mirrorPt2, bool eraseSourceObjec)
  57.             {
  58.                 Line3d miLine = new Line3d(mirrorPt1, mirrorPt2);
  59.                 Matrix3d mt = Matrix3d.Mirroring(miLine);
  60.                 ObjectId mirrorId = id;
  61.                 Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
  62.                 //如果删除源对象,则直线对源对象实行镜像交换
  63.                 if (eraseSourceObjec == true)
  64.                     ent.TransformBy(mt);
  65.                 else
  66.                 {
  67.                     Entity entCopy = ent.GetTransformedCopy(mt);
  68.                     mirrorId = id.Database.AddToModelSpace(entCopy);
  69.                 }
  70.                 return mirrorId;
  71.             }

  72.         public static ObjectIdCollection Offset(this ObjectId id,double dis)
  73.         {
  74.             ObjectIdCollection ids= new ObjectIdCollection();
  75.             Curve cur = id.GetObject(OpenMode.ForWrite) as Curve;
  76.             if (cur != null)
  77.             {
  78.                 try
  79.                 {
  80.                     //获取偏移对象的对象集合
  81.                     DBObjectCollection offsetCurves = cur.GetOffsetCurves(dis);
  82.                     //将对象集合类型转换为实体类的数组,以方便加入实体的操作
  83.                     Entity [] offsetEnts = new Entity[offsetCurves.Count];
  84.                     offsetCurves.CopyTo(offsetEnts, 0);
  85.                     //将偏移的对象加入到数据库
  86.                     ids = id.Database.AddToModelSpace(offsetEnts);
  87.                 }
  88.                 catch
  89.                 {
  90.                     Application.ShowAlertDialog("无法偏移");
  91.                 }
  92.             }
  93.              else
  94.                 Application.ShowAlertDialog("无法偏移");
  95.                     return ids;
  96.       
  97.         }
  98.      }   
  99. }


偏移时用到的addtomodelspace:
  1.   public static ObjectIdCollection AddToModelSpace(this Database db, params Entity[] ents)
  2.         {
  3.             ObjectIdCollection ids = new ObjectIdCollection();
  4.             var trans = db.TransactionManager;
  5.             BlockTableRecord btr = (BlockTableRecord)trans.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite);
  6.             foreach (var ent in ents)
  7.             {
  8.                 ids.Add(btr.AppendEntity(ent));
  9.                 trans.AddNewlyCreatedDBObject(ent, true);
  10.             }
  11.             btr.DowngradeOpen();
  12.             return ids;
  13.         }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-18 23:53 , Processed in 0.387500 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表