雪山飞狐_lzh 发表于 2010-11-2 10:31:00

扩展函数之图元操作

VS2008提供的扩展方法可以让我们简单的给Autodesk补漏(汗)
下面是些简单的例子,注释有时间再加哈

using System.Collections;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

namespace TlsCad.ExtendMethods
{
    public static class EntityEx
    {
      public static IEnumerable<Vertex> GetVertexs<T>(this T ent, Transaction tr) where T : Entity, IEnumerable
      {
            
            foreach (ObjectId id in ent)
            {
                yield return (Vertex)tr.GetObject(id, OpenMode.ForRead);
            }
      }
      public static IEnumerable<Vertex> GetVertexs<T>(this T ent, Transaction tr, OpenMode mode) where T : Entity, IEnumerable
      {
            foreach (ObjectId id in ent)
            {
                yield return (Vertex)tr.GetObject(id, mode);
            }
      }
      public static Extents3d GetExtents(this IEnumerable<Entity> ents)
      {
            Extents3d ext = new Extents3d();
            foreach (Entity ent in ents)
            {
                ext.AddExtents(ent.GeometricExtents);
            }
            return ext;
      }
      public static void Move(this Entity ent, Point3d from, Point3d to)
      {
            ent.TransformBy(Matrix3d.Displacement(to - from));
      }
      public static void Rotation(this Entity ent, Point3d center, double angle, Vector3d normal)
      {
            ent.TransformBy(Matrix3d.Rotation(angle, normal, center));
      }
      public static void Rotation(this Entity ent, Point3d center, double angle)
      {
            ent.TransformBy(Matrix3d.Rotation(angle, Vector3d.ZAxis.TransformBy(ent.Ecs) , center));
      }
      public static void Mirror(this Entity ent, Point3d pt1, Point3d pt2)
      {
            ent.TransformBy(Matrix3d.Mirroring(new Line3d(pt1, pt2)));
      }
      public static void Mirror(this Entity ent, Plane plane)
      {
            ent.TransformBy(Matrix3d.Mirroring(plane));
      }
      public static void Mirror(this Entity ent, Point3d ptBase)
      {
            ent.TransformBy(Matrix3d.Mirroring(ptBase));
      }
      public static void ValidateMirror(this DBText txt)
      {
            if (!txt.Database.Mirrtext)
            {
                txt.IsMirroredInX = false;
                txt.IsMirroredInY = false;
            }
      }

    }
}


鱼与熊掌 发表于 2015-7-28 10:07:13

赞..   学习
页: [1]
查看完整版本: 扩展函数之图元操作