035集——BOUNDARY获取图形外轮廓(CAD—C#二次开发入门)

通过使用类似命令行输入boundary的方法获取图形外轮廓,使用函数如下:

var pls = Z.ed.TraceBoundary(new Point3d(box0 - 100, box1-100,0),true);

效果如下:

cs 复制代码
 public void XX()
 {
     Point3d pt = new Point3d(0, 0, 0);
     List<Curve> ents = Z.db.SelectEntities<Curve>();
     //Z.DrawBigBox<Curve>(ents);
     List<double> box = Z.Getbox<Curve>(ents);
     if (ents == null || ents.Count == 0) return;
     Entity temp=  Z.DrawBigBoxAdd(ents);
     List<Entity> plr = new List<Entity>();  //   
     var pls = Z.ed.TraceBoundary(new Point3d(box[0] - 100, box[1]-100,0),true);
     foreach (Entity item in pls)//不能var,否则没bounds属性
     {
         if (item.Bounds.Value.MinPoint.X != box[0]-1000)
         {
             item.Color = Color.FromRgb(255, 0, 0);
             plr.Add(item);
         }
     }
     Z.db.AddEntityToModeSpace(plr.ToArray());
     Z.db.Erase(temp);
 }
cs 复制代码
 public static List<double> Getbox<T>(List<T> entities)where T : Entity
 {
     List<double> lis = new List<double>();
     if (entities.Count == 0)
     {
         return lis;
     }
     double minx = entities.Min(x => x.Bounds.Value.MinPoint.X);
     double miny = entities.Min(x => x.Bounds.Value.MinPoint.Y);
     double maxx = entities.Max(x => x.Bounds.Value.MaxPoint.X);
     double maxy = entities.Max(x => x.Bounds.Value.MaxPoint.Y);
     lis.Add(minx);
     lis.Add(miny);
     lis.Add(maxx);
     lis.Add(maxy);
     return lis;
 }

  public static Entity DrawBigBoxAdd(List<Curve> entities)
  {//传进来一个list,画list的总包围盒
      List<double> lis = new List<double>();
      if (entities.Count == 0)
      {
          return null;
      }
      double minx = entities.Min(x => x.Bounds.Value.MinPoint.X - 1000);
      double miny = entities.Min(x => x.Bounds.Value.MinPoint.Y - 1000);
      double maxx = entities.Max(x => x.Bounds.Value.MaxPoint.X + 1000);
      double maxy = entities.Max(x => x.Bounds.Value.MaxPoint.Y + 1000);
      lis.Add(minx);
      lis.Add(miny);
      lis.Add(maxx);
      lis.Add(maxy);
      Autodesk.AutoCAD.DatabaseServices.Polyline pl = new Autodesk.AutoCAD.DatabaseServices.Polyline();
      pl.AddVertexAt(0, new Point2d(minx, miny), 0, 0, 0);
      pl.AddVertexAt(0, new Point2d(maxx, miny), 0, 0, 0);
      pl.AddVertexAt(0, new Point2d(maxx, maxy), 0, 0, 0);
      pl.AddVertexAt(0, new Point2d(minx, maxy), 0, 0, 0);
      pl.Closed = true;
      pl.ColorIndex = 1;
      db.AddEntityToModeSpace(pl);
      return pl;
  }
相关推荐
JeffongTan2 小时前
在LWC中镶嵌VF Page获取用户IP
前端·javascript·salesforce
点心的游戏开发世界2 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
不cong明的亚子4 小时前
web live多屏互动平台
javascript·经验分享·音视频
事圆则缓4 小时前
Kotlin 协程完全指南
开发语言·kotlin
我爱写代码i5 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路5 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
统计学小王子6 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研6 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴6 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
dsyyyyy11016 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript