public override void OnMouseDown(int Button, int Shift, int X, int Y)
{
// TODO: Add Cut.OnMouseDown implementation
if(Button==1)//左键按下
{
//拿到hook
IMapControl3 pMapControlx = (IMapControl3)m_hookHelper.Hook; IFeatureLayer pFeatureLayer = pMapControlx.get_Layer(0) as IFeatureLayer; //划线
IGeometry pline = (IGeometry)pMapControlx.TrackLine(); //拿到划线范围内的所有feature
IGeometry pGeometry = pline as IGeometry;
IMap pMap = pMapControlx.Map;
pMap.SelectByShape(pGeometry, null, false);
//转成IRealtionOperator接口,以便在遍历时判断几何位置关系。
IRelationalOperator rela = (pline as IPolyline) as IRelationalOperator; //拿到切割目标集合
IEnumFeature pEnumFeature = (IEnumFeature)pMap.FeatureSelection;
IFeature pFeature = pEnumFeature.Next();
//依次遍历
while (pFeature != null)
{ if(rela.Crosses(pFeature.Shape))//判断是否Cross
{
try
{
//把面转成ITopologicalOperator,使用Cut函数
ITopologicalOperator topo = (pFeature.Shape as IPolygon) as ITopologicalOperator; //新建两个面,作为切割函数的参数,切割后的两个对象保存于这两个面之中
IGeometry pLeftGeometry = new PolygonClass();
IGeometry pRightGeometry = new PolygonClass();
topo.Cut((pline as IPolyline), out pLeftGeometry, out pRightGeometry); //由FeatureClass新建Feature
IFeature pFeatureLeft = pFeatureLayer.FeatureClass.CreateFeature();
IFeature pFeatureRight = pFeatureLayer.FeatureClass.CreateFeature(); //保存
pFeatureLeft.Shape = pLeftGeometry;
pFeatureRight.Shape = pRightGeometry;
pFeatureLeft.Store();
pFeatureRight.Store(); //删除
pFeature.Delete(); }
catch
{ }
} pFeature = pEnumFeature.Next();
} //清除选择
IFeatureSelection pFeatureSelectionClear= pMapControlx.get_Layer(0) as IFeatureSelection;
pFeatureSelectionClear.Clear(); pMapControlx.Refresh();
}
}

  

Arcgis Engine 切割图斑(ITool)的更多相关文章

  1. ArcGIS Engine开发前基础知识(1)

    ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...

  2. ArcGIS Engine开发之旅04---ARCGIS接口详细说明

    原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.    ...

  3. ArcGIS Engine开发之旅03--ArcGIS Engine中的控件

    原文:ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的 ...

  4. ArcGIS Engine开发之旅02--ArcGIS Engine中的类库

    原文:ArcGIS Engine开发之旅02--ArcGIS Engine中的类库 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他 ...

  5. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

  6. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

    原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和Layo ...

  7. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  8. C#,ArcGIS Engine开发入门教程

    C#,ArcGIS Engine开发入门教程 转自:http://blog.csdn.net/yanleigis/article/details/2233674  目录(?)[+] 五实现 一 加载A ...

  9. ArcGIS Engine开发基础总结(一)

    标准Engine功能 地图浏览    地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...

随机推荐

  1. 记一次上传文件到七牛云存储的经历(Plupload & UEditor)(.net)

    七牛 配置ACCESS_KEY和SECRET_KEY Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY"; Qiniu.Conf.Config. ...

  2. 网络通信之Socket与LocalSocket的比较

    Socket与LocalSocket都可以实现网络通信,两个有什么区别呢? LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界. 于是,思考到一个问题:a ...

  3. C# Socket系列二 简单的创建 socket 通信

    看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...

  4. CSS魔法堂:Reset CSS

    下列样式规则可用于最小化各浏览器标签样式的不一致性.注意:实际使用时应该对其进行适当的调整,以适应项目要求. /* http://meyerweb.com/eric/tools/css/reset/ ...

  5. OpenJudge4980:拯救行动//stl优先队列

    总时间限制:  10000ms 内存限制:  65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@). ...

  6. mvc 对一个或者多个实体验证失败

    为了解决“对一个或者多个实体验证失败”,关闭调用SaveChanges() 的实体属性合法性验证(谨慎使用) db.Configuration.ValidateOnSaveEnabled = fals ...

  7. QT TableWidget 应用笔记

    QT TableWidget应用笔记 分类: QT2013-05-21 16:22 2561人阅读 评论(0) 收藏 举报 1.设置表头及大小 QStringList header; header&l ...

  8. C#-INotifyPropertyChanged(解决数据绑定的界面刷新问题)

    最近做项目用到DataGridView,用它绑定数据源后,如果数据源中的数据修改无法及时刷新到控件上,必须切换单元格的焦点才能导致刷新显示新数值,通过查官方文档,用INotifyPropertyCha ...

  9. 新平台,新版本,ComponentOne 持续发力

    我们很高兴宣布2016年 V1 版本发布了,可免费下载试用. 今年ComponentOne 将聚焦WinForm.WPF.MVC.UWP平台和核心控件Flex家族. 本次发布主要包括UWP平台:Win ...

  10. linux下搭建php的集成环境

    一个偶然的机会,在项目中需要搭建PHP的环境,由于PHP开发需要的东西比较多,像apache.mysql.PHP环境等,如果一个一个装很可能会有安装不全的问题,为此选择了安装集成环境,这里选择的是xa ...