qq25469005 发表于 2023-2-22 15:41:23

框选的时候只选择边界线

本帖最后由 qq25469005 于 2023-2-27 15:11 编辑

选择的时候有没有办法选择最外的边界线,也就是图中所示的没有被其他闭合曲线包围的曲线,或者换个思路选择被包围的图元


qq25469005 发表于 2023-2-27 14:53:23

本帖最后由 qq25469005 于 2023-2-27 14:56 编辑

paulpipi 发表于 2023-2-27 08:53
大神,有试出来吗?
通过咨询上面的大佬
自己做了个勉强能用的,贴出来你看看

/// <summary>
    /// 判断两个曲线的包围关系,如果是被包围的曲线就改变颜色为黄色
    /// </summary>
    /// <param name="curve1">曲线1</param>
    /// <param name="curve2">曲线2</param>
    public static void IsPolygonInsideAnotherPolygon(Curve curve1, Curve curve2)
    {

      
      Point3d point1;
      Point3d point2;

      MPolygon mPolygon1 = new MPolygon();
      MPolygon mPolygon2 = new MPolygon();
      if (curve1.GetType() == typeof(Polyline))
      {
            Polyline polyline1 = (Polyline)curve1;
            mPolygon1.AppendLoopFromBoundary(polyline1, false, Tolerance.Global.EqualPoint);
         
            point1 = polyline1.GetPoints().ToList();
      }
      else
      {
            Circle c1 = (Circle)curve1;
            mPolygon1.AppendLoopFromBoundary(c1, false, Tolerance.Global.EqualPoint);
            point1 = c1.StartPoint;
      }

      if (curve2.GetType() == typeof(Polyline))
      {
            Polyline polyline2 = (Polyline)curve2;
            mPolygon2.AppendLoopFromBoundary(polyline2, false, Tolerance.Global.EqualPoint);
         
            point2 = polyline2.GetPoints().ToList();
      }
      else
      {
            Circle c2 = (Circle)curve2;
            mPolygon2.AppendLoopFromBoundary(c2, false, Tolerance.Global.EqualPoint);
            point2 = c2.StartPoint;
      }

      
      




      if (mPolygon1.IsPointInsideMPolygon(point2, Tolerance.Global.EqualPoint).Count == 1)
      {
            
            curve2.ForWrite(e => e.ColorIndex = 2);
      }
      else if (mPolygon2.IsPointInsideMPolygon(point1, Tolerance.Global.EqualPoint).Count == 1)
      {
            
            curve1.ForWrite(e => e.ColorIndex = 2);
      }
      else return;

qq25469005 发表于 2023-2-28 11:29:07

本帖最后由 qq25469005 于 2023-2-28 13:30 编辑

paulpipi 发表于 2023-2-27 20:54
试了一下,出现:错误: no function definition: CURVE,大神能搞个完整的出来吗?谢谢分享!
这个要使用ifoxcad开发
/// <summary>
    /// 改变被包围的图元颜色为黄色
    /// </summary>
   
    public void WaiKuang()
    {
      using DBTrans tr = new();
      var ents = Env.Editor.SSGet().Value.GetEntities<Curve>().ToList();
      //ents.ForEach(t=>t.ForWrite(e => e.CloseCurve(tr)));
      for(var i = 0; i < ents.Count-1; i++)
      {
            for(var j = i+1;j<ents.Count;j++)
            {
                Q_EntityEx.IsPolygonInsideAnotherPolygon(ents, ents);
            }
      }
    }

qq25469005 发表于 2023-2-27 14:54:43

qq25469005 发表于 2023-2-27 14:53
通过咨询
自己做了个勉强能用的,贴出来你看看

内部图元改为黄色后,选择的时候用选择过滤器过滤黄色的图元,大概就差不多实现了这个效果,就是图元太多的时候效率稍慢一点

闻人南131 发表于 2023-2-22 16:25:25

选择完再判断倒是可以,如果是要加选择过滤器感觉没法加

qq25469005 发表于 2023-2-22 16:27:00

闻人南131 发表于 2023-2-22 16:25
选择完再判断倒是可以,如果是要加选择过滤器感觉没法加

也可以,本意就是想要区分开来,比如改变颜色之类的,能否请教一下

闻人南131 发表于 2023-2-22 16:40:22

Extents3d extents3D = polyline.Bounds.Value;
Extents3d 有左下角点和右上角点的属性

qq25469005 发表于 2023-2-22 17:02:31

闻人南131 发表于 2023-2-22 16:40
Extents3d extents3D = polyline.Bounds.Value;
Extents3d 有左下角点和右上角点的属性

"C:\Users\25469\Desktop\例子.jpg"像这种情况下就用这个无法判断吧

qq25469005 发表于 2023-2-22 17:04:25

qq25469005 发表于 2023-2-22 17:02
像这种情况下就用这个无法判断吧
C:\Users\25469\Desktop\例子.jpg

tiancao100 发表于 2023-2-22 18:49:16

SelectWindowPolygon 的结果,就可以判断是否有内部对象

qq25469005 发表于 2023-2-22 22:33:03

tiancao100 发表于 2023-2-22 18:49
SelectWindowPolygon 的结果,就可以判断是否有内部对象

好的,我试试

paulpipi 发表于 2023-2-23 13:57:16

请高手帮忙写个码,这个很有用

paulpipi 发表于 2023-2-27 08:53:38

qq25469005 发表于 2023-2-22 22:33
好的,我试试

大神,有试出来吗?
页: [1] 2
查看完整版本: 框选的时候只选择边界线