阅读:2007回复:5
[讨论]AO怎样实现画一条线将一个多边形切割成两个多边形?
<FONT size=5>请教一下:AO怎样实现画一条线将一个多边形切割成两个多边形啊?谢谢!</FONT>
|
|
1楼#
发布于:2005-03-21 18:30
<P>这是连接了sde数据后的分割操作,你可能需要修改才能用,但可以看到一种分割的方法,和使用的接口,希望有帮助</P><P>'**********************************************************
'功能:分割实体 '参数:pFeature 被分割的实体 ' pSplitPoints 分割点的集合 '输出: '********************************************************** Public Function SplitLineByPoint(pFeature As IFeature, pSplitPoints As IPointCollection) As Boolean On Error GoTo ErrorHandler Dim pEnumVertex As IEnumVertex Dim pGeoColl As IGeometryCollection Dim pPolycurve As IPolycurve2 Dim pEnumSplitPoint As IEnumSplitPoint Dim pNewFeature As IFeature Dim PartCount As Integer Dim pFClass As IFeatureClass Dim posStartTime As Long Dim posEndTime As Long Set pFClass = pFeature.Table posStartTime = pFeature.Fields.FindField("starttime") posEndTime = pFeature.Fields.FindField("endtime") Set pEnumVertex = pSplitPoints.EnumVertices Set pPolycurve = pFeature.ShapeCopy Set pGeoColl = pPolycurve Set pEnumSplitPoint = pPolycurve.SplitAtPoints(pEnumVertex, True, True, GetMapSizeFromPix(5)) Set pGeoColl = pPolycurve If Not pEnumSplitPoint.SplitHappened Then Exit Function If pGeoColl.GeometryCount < 2 Then Exit Function SetBusy True g_pWorkSpaceEdit.StartEditOperation For PartCount = 0 To pGeoColl.GeometryCount - 1 Set pNewFeature = pFClass.CreateFeature Set pNewFeature.Shape = BuildPolyline(pGeoColl.Geometry(PartCount)) CopyAttributes pFeature, pNewFeature SetStartTimeAttri pNewFeature, g_EditStartTime pNewFeature.Store FlashShape pNewFeature.Shape Next PartCount If posEndTime = -1 Then pFeature.Delete Else If IsNull(pFeature.Value(posStartTime)) Or _ pFeature.Value(posStartTime) <> g_EditStartTime Then SetEndTimeAttri pFeature, g_EditStartTime pFeature.Store Else pFeature.Delete End If End If Set g_cllSelFeatures = New Collection g_cllSelFeatures.Add pNewFeature SetUndoEnable True g_pActiveView.PartialRefresh esriViewGeoSelection + esriViewGeography, _ Nothing, pFeature.Shape.Envelope g_pWorkSpaceEdit.StopEditOperation SplitLineByPoint = True SetBusy False Exit Function ErrorHandler: g_pWorkSpaceEdit.AbortEditOperation SetBusy False End Function</P> |
|
|
2楼#
发布于:2005-03-21 20:56
<P><b><FONT color=#dd2222 size=6>果然是高手!多谢!我试试先。</FONT></b></P>
|
|
3楼#
发布于:2005-03-21 21:03
<P>请问:</P><P>For PartCount = 0 To pGeoColl.GeometryCount - 1
Set pNewFeature = pFClass.CreateFeature Set pNewFeature.Shape = BuildPolyline(pGeoColl.Geometry(PartCount)) CopyAttributes pFeature, pNewFeature SetStartTimeAttri pNewFeature, g_EditStartTime pNewFeature.Store FlashShape pNewFeature.Shape Next PartCount 中 BuildPolyline(pGeoColl.Geometry(PartCount)) 是个什么功能的函数呢?实现什么功能啊? </P> |
|
4楼#
发布于:2005-03-22 17:51
我找到了帮助里面切割的例子,发现都是切割线的例子。多边形实体也能切吗?请问!<img src="images/post/smile/dvbbs/em02.gif" />
|
|
5楼#
发布于:2005-04-30 16:23
可以试试 IToplogicalOperator.cut
|
|
|