yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2007回复:5

[讨论]AO怎样实现画一条线将一个多边形切割成两个多边形?

楼主#
更多 发布于:2005-03-21 15:36
<FONT size=5>请教一下:AO怎样实现画一条线将一个多边形切割成两个多边形啊?谢谢!</FONT>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-03-21 20:56
<P><b><FONT color=#dd2222 size=6>果然是高手!多谢!我试试先。</FONT></b></P>
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-03-22 17:51
我找到了帮助里面切割的例子,发现都是切割线的例子。多边形实体也能切吗?请问!<img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
Eppla
路人甲
路人甲
  • 注册日期2003-08-21
  • 发帖数56
  • QQ
  • 铜币345枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-04-30 16:23
可以试试 IToplogicalOperator.cut
good good study,day day up!
举报 回复(0) 喜欢(0)     评分
游客

返回顶部