一条线(Polyline)被另外一条线多次(Polyline)切割,也就是说打断的点有多个,而AE中的IFeatureEdit.Split()只能是一个点一个点的处理,这样就涉及到了循环操作,现在将本人自己写具体的操作函数附上,大家一同学习。

  1   public void LineSplit(IFeature feature, IGeometry other)
  2         {
  3             try
  4             {
  5                 ITopologicalOperator shape = feature.Shape as ITopologicalOperator;
  6                 IPoint point = new PointClass();
  7                 IGeometry geometry2 = shape.Intersect(other, esriGeometryDimension.esriGeometry0Dimension);
  8                 if (!geometry2.IsEmpty)
  9                 {
 10                     IPointCollection points2 = geometry2 as IPointCollection;
 11                     for(int i = 0; i < points2.PointCount; i++)
 12                     {
 13                         point = points2.get_Point(i);
 14                         ISet set = (feature as IFeatureEdit).Split(point);
 15                         set.Reset();
 16                         for (IFeature feature2 = set.Next() as IFeature; feature2 != null; feature2 = set.Next() as IFeature)
 17                         {
 18                             if (!IsSplitOk(feature2,other))
 19                             {
 20                                 feature = feature2;
 21                             }
 22                             else
 23                             {
 24                                 ISimpleLineSymbol symbol = new SimpleLineSymbolClass();
 25                                 IRgbColor color = new RgbColorClass
 26                                 {
 27                                     RGB = Color.FromArgb(0xff, 0, 0).ToArgb()
 28                                 };
 29                                 symbol.Color = color;
 30                                 symbol.Width = 2.0;
 31                                 this.pMapControl.FlashShape(feature2.Shape, 1, 450, symbol as ISymbol);
 32                                 pMapControl.ActiveView.FocusMap.SelectFeature(pCurrentLayer, feature2);
 33                             }
 34
 35                         }
 36
 37                     }
 38                 }
 39             }
 40             catch (Exception)
 41             {
 42                 return ;
 43             }
 44
 45         }
 46
 47         public bool IsSplitOk(IFeature feature, IGeometry splitLine)
 48         {
 49             bool ok = false;
 50             try
 51             {
 52                 ITopologicalOperator shape = feature.Shape as ITopologicalOperator;
 53                 IGeometry geometry = shape.Intersect(splitLine, esriGeometryDimension.esriGeometry0Dimension);
 54                 if (!geometry.IsEmpty)
 55                 {
 56                     IPointCollection points = geometry as IPointCollection;
 57                     if(points.PointCount==1)
 58                     {
 59                         IPoint point = points.get_Point(0);
 60                         if (IsLineStartEndPoint(feature,point))
 61                         {
 62                             ok = true;
 63                         }
 64
 65                     }
 66                     else if (points.PointCount == 2)
 67                     {
 68                         IPoint point1 = points.get_Point(0);
 69                         IPoint point2 = points.get_Point(1);
 70                         if (IsLineStartEndPoint(feature, point1) && IsLineStartEndPoint(feature, point2))
 71                         {
 72                             ok = true;
 73                         }
 74                     }
 75
 76                 }
 77                 return ok;
 78             }
 79             catch (Exception)
 80             {
 81                 return false;
 82             }
 83         }
 84
 85
 86         public bool IsLineStartEndPoint(IFeature feature,IPoint point)
 87         {
 88             bool yes = false;
 89             try
 90             {
 91                 IPolyline line = feature.Shape as IPolyline;
 92                 double len = line.Length;
 93                 IPoint pStart = line.FromPoint;
 94                 if (Math.Abs(pStart.X - point.X) < 0.1 && Math.Abs(pStart.Y - point.Y) < 0.1)
 95                 {
 96                      yes = true;
 97                 }
 98                 else
 99                 {
100                     IPoint pEnd = line.ToPoint;
101                     if (Math.Abs(pEnd.X - point.X) < 0.1 && Math.Abs(pEnd.Y - point.Y) < 0.1)
102                     {
103                         yes = true;
104                     }
105                 }
106                 return yes;
107             }
108             catch (Exception)
109             {
110                 return false;
111             }
112         }

转载于:https://www.cnblogs.com/shizhenkun/p/5556478.html

ArcEngine C# 二次开发 PolyLine 多次打断操作相关推荐

  1. c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格

    c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCA ...

  2. CAD二次开发--polyline线宽设置踩坑总结【以转换CASS地形图情况为例】

    今天遇到个需求,就是说将我开发的cad插件绘图成果,转换为南方CASS地形图格式[南方CASS是测绘中最常用的基础性软件].所以说就不可避免的遇到线宽的设置问题,比如"等级公路主线" ...

  3. UG二次开发-加工篇:查询操作所在的几何组

    函数UF_OPER_ask_geom_group用于查询指定操作所在的几何组,包括刀具组.几何体组.程序顺序组.加工方法组. 头文件: #include uf.h #include uf_ui.h # ...

  4. ArcGis二次开发ArcEngine开篇

    ArcGis二次开发ArcEngine开篇 以一款简单GIS软件截图片引入本篇内容 导读 万事开头难,如何利用ArcEngine开发一款GIS产品呢?一款简单的GIS软件基本布局如上图所示,共划分为六 ...

  5. UG/NX10二次开发学习视频目录整理(NXOPEN基础篇)

    为了方便搜索需要的视频资料,整理了唐康林老师发布在B站的视频目录,支持全局目录搜索,点击直达视频. NX10二次开发(NXOPEN基础篇) P1第07章-01-NX10二次开发之与用户界面的结合运用[ ...

  6. Archicad二次开发-模型数据导出

    最近在做AC轻量化导出的事情,可以说开始是焦头烂额,因为相关资料很少,怎么获取当前视图?啥玩意,这么成熟的产品肯定有接口啊?经常出现类似的场景~ 结合网上搜到的一些资料和自己探索的情况,简要总结下 一 ...

  7. UG/NX10二次开发学习视频目录整理(NXOPEN制图篇)

    为了方便搜索需要的视频资料,整理了唐康林老师发布在B站的视频目录,支持全局目录搜索,点击直达视频. NX10二次开发(NXOPEN制图篇) P1第17章-01-NX10二次开发之制图模块相关操作专题( ...

  8. ArcEngine二次开发

    ArcEngine二次开发 初识ArcEngine,个人笔记留档 引入主程序 //表示绑定的arcgis产品类型,即绑定arcgis engine. ESRI.ArcGIS.RuntimeManage ...

  9. Arcgis ArcEngine二次开发: 输出宗地图、宗地草图、权属协议书附图、房产分层分户图、公示图、三调土地利用图、行政区划图、标准分幅图等各种图件

    1.Arcgis  ArcEngine二次开发: 输出宗地图.宗地草图.权属协议书附图.房产分层分户图.公示图.三调土地利用图.行政区划图.标准分幅图等各种图件 有需要联系QQ:185242573. ...

  10. Revit二次开发 如何获得链接CAD中所有的多段线PolyLine?

    项目场景: 最近做的这个项目,涉及到提取链接CAD中的所有多段线,并根据这些多段线的几何信息做一些分析,但是产生了一些意想不到的问题. 问题描述 通过网上流传的提取手段,并不能完全提取CAD中的所有多 ...

最新文章

  1. linux服务之drbd
  2. mysql 5.6.34.rpm_离线安装mysql5.6及依赖_centos7离线安装mysql5.6.34
  3. javaSE各阶段练习题--面向对象-StringBuilder-继承-包和访问权限
  4. U3D-FSM有限状态机的简单设计
  5. [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题
  6. 为什么C语言仍然占据统治地位?
  7. 人脸识别_云端人脸识别-人脸识别SDK+API-人脸识别闸机解决方案
  8. Ubuntu把iso写入U盘
  9. junit.framework.AssertionFailedError: No tests found in错误解决办法
  10. numpy : numpy.random
  11. vb.net操作excel文件
  12. 19-离线词典生成原理、图像描述子用BoW转化为BoW向量和FeatureVe
  13. 熊猫直播显示连接服务器失败,熊猫直播提示加载失败,请按“菜单键”刷新解决办法...
  14. Eclipse安装好后快捷方式无法在桌面上打开,在Eclipse文件夹里可以正常打开。
  15. channel.QueueDeclare各个参数详解
  16. java刮刮乐_大众学开发——59秒学习编写刮刮乐游戏
  17. h5 字体加粗_HTML中如何将字体加粗
  18. fishtank 测试 linux,Fishtank fitts:a desktop VR testbed for evaluating 3D pointing techniques
  19. mkdir -p的含义
  20. 微信智慧支付日系统服务器崩溃,微信支付大面积出现故障 微信支付系统繁忙怎么解决 微信支付崩溃原因是什么...

热门文章

  1. 性能测试--jmeter结合charles,以及charles的基本使用【11】
  2. delphi ado 连接mysql_delphi mysql ado连接
  3. linux apache 配置视频教程,《Linux服务器配置视频教程》ubuntu centos apache iptables 后盾网向军老师主讲[WMV]...
  4. 帆软参数面板根据选择项type显示和隐藏参数项(或${if()}在SQL中的用法)根据条件动态显示参数控件
  5. FR模板参数在SQL中或单元格过滤的写法
  6. react前端封装接口弹出错误_react+ts打包发布后报Minified React error ..这种错误
  7. vscode 左侧图标_分钟将vscode撸成小霸王
  8. 原生js实现form表单序列化
  9. Man vs. AI – Six Fields Where Artificial Intelligence Are Surpassing Human Intelligence
  10. Vue2.0七——生命周期