Пример #1
0
        public void SplitPolygons()        //分割面
        {
            m_pLineFeed = (INewLineFeedback)m_pFeedback;

            if (m_pLineFeed == null)
            {
                Reset();
                return;
            }

            IPolyline pFeatureScissors = m_pLineFeed.Stop();             //结束绘制切割线

            if (pFeatureScissors.Length == 0)
            {
                Reset();
                return;
            }

            ILayer pFeatureLayer;

            pFeatureLayer = m_App.CurrentEditLayer;
            IGeometry pOldGeometry;
            IFeature  pOldFeature;

            IWorkspaceEdit pWorkspaceEdit;

            pWorkspaceEdit = (IWorkspaceEdit)CommonFunction.GetLayerWorkspace(pFeatureLayer);
            if (pWorkspaceEdit == null)
            {
                return;
            }
            pWorkspaceEdit.StartEditOperation();

            for (int i = 0; i < m_OriginFeatureArray.Count; i++)         //遍历每个选中的要素
            {
                IArray pArrGeo = new ArrayClass();
                pOldFeature  = (IFeature)m_OriginFeatureArray.get_Element(i);
                pOldGeometry = (IGeometry)pOldFeature.Shape;

                if ((pOldGeometry == null) || (pFeatureScissors == null))
                {
                    return;
                }
                if (pOldGeometry.GeometryType != esriGeometryType.esriGeometryPolygon)
                {
                    return;
                }

                ITopologicalOperator pTopologim_CalOperator = (ITopologicalOperator)pOldGeometry;
                IGeometry            oRsGeo_1 = null, oRsGeo_2 = null;
                try
                {
                    pTopologim_CalOperator.Simplify();
                    pTopologim_CalOperator.Cut(pFeatureScissors, out oRsGeo_1, out oRsGeo_2);

                    IGeometryCollection oGeoCol = (IGeometryCollection)oRsGeo_1;
                    for (int j = 0; j < oGeoCol.GeometryCount; j++)
                    {
                        ISegmentCollection oNewPoly = new PolygonClass();
                        oNewPoly.AddSegmentCollection((ISegmentCollection)oGeoCol.get_Geometry(j));
                        pArrGeo.Add(oNewPoly);
                    }
                    oGeoCol = (IGeometryCollection)oRsGeo_2;
                    for (int j = 0; j < oGeoCol.GeometryCount; j++)
                    {
                        ISegmentCollection oNewPoly = new PolygonClass();
                        oNewPoly.AddSegmentCollection((ISegmentCollection)oGeoCol.get_Geometry(j));
                        pArrGeo.Add(oNewPoly);
                    }

                    for (int j = 0; j < pArrGeo.Count; j++)
                    {
                        CommonFunction.AddFeature0(m_MapControl, (IGeometry)pArrGeo.get_Element(j), m_App.CurrentEditLayer, pOldFeature);
                    }
                    pOldFeature.Delete();
                }
                catch
                {
                    //MessageBox.Show(Ex.ToString());
                }
            }
            m_App.Workbench.CommandBarManager.Tools["2dmap.DFEditorTool.Undo"].SharedProps.Enabled = true;

            pWorkspaceEdit.StopEditOperation();

            Reset();
        }