阅读:4182回复:10
[讨论]谁能帮我该错,切割的问题。
<P>谁能帮我该错?谢谢!</P>
<P>'//功能切割多边形</P> <P>'//输入参数:被切割的面Feature,切割面的线 '=======================================</P> <P>Sub TopIntesect(ByVal pFeature As IFeature, ByVal pPolyLine As IPolyline) Dim pTopOperator As ITopologicalOperator2 Dim pGeom As IGeometry Dim pGeomReasult As IGeometry Set pGeom = pPolyLine Set pTopOperator = pFeature.Shape Set pGeomReasult = pTopOperator.IntersectMultidimension(pGeom )</P> <P>End Sub</P> <P>运行到Set pGeomReasult = pTopOperator.IntersectMultidimension(pGeom )时报错:操作不能在非简单实体中进行。可AO帮助中说:ITopologicalOperator2的<FONT size=2>IntersectMultidimension 方法可以实现多边形和线之间的操作啊-------When using this method to intersect a Polygon with a Polyline (or vice versa) the geometry returned will be a GeometryBag.请问我错在哪里呢?</FONT></P> |
|
1楼#
发布于:2005-03-23 15:16
<P>没有你要的,找了个函数,大概有点关系,看看有没帮助</P><P>'‖=================================================
'‖功能:多边形联合形成新的多边形 '‖参数:pFromPolygon 原多边形 '‖ pToPolygon 加入的多边形 '‖输出:构成的多边形 '‖================================================= Public Function UnionPolygon(ByVal pFromPolygon As IPolygon, ByVal pToPolygon As IPolygon) As IPolygon Dim pTopoOperator As ITopologicalOperator On Error GoTo ErrLabel Set UnionPolygon = Nothing If pToPolygon Is Nothing Then Set UnionPolygon = pFromPolygon Set pTopoOperator = UnionPolygon pTopoOperator.Simplify Exit Function ElseIf pToPolygon.IsEmpty Then Set UnionPolygon = pFromPolygon Set pTopoOperator = UnionPolygon pTopoOperator.Simplify Exit Function End If If pFromPolygon Is Nothing Then Set UnionPolygon = pToPolygon Set pTopoOperator = UnionPolygon pTopoOperator.Simplify Exit Function ElseIf pFromPolygon.IsEmpty Then Set UnionPolygon = pToPolygon Set pTopoOperator = UnionPolygon pTopoOperator.Simplify Exit Function End If Set pTopoOperator = pFromPolygon pTopoOperator.Simplify Set pTopoOperator = pToPolygon pTopoOperator.Simplify Set UnionPolygon = pTopoOperator.Union(pFromPolygon) Set pTopoOperator = UnionPolygon pTopoOperator.Simplify ErrLabel: End Function</P> |
|
|
2楼#
发布于:2005-03-23 15:50
感谢小谢斑竹的回答。
感谢小谢斑竹的回答。这个合并多边形的例子可能以后对我有帮助。可是现在让我焦头烂额的是 用线切割多边形的问题。我都搞了好几天了,还是没有结果。晕了。不过还是感谢<FONT color=#cc3333 size=5><b>小谢兄</b></FONT>的答复。<img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" /> |
|
3楼#
发布于:2005-03-23 16:02
<P>pPolyLine线应该已经是简单实体了。不能进行Simplify。难道AO不支持线和面的拓扑操作吗?没有道理不支持啊!?</P>
|
|
4楼#
发布于:2005-03-23 16:06
<P>看看这个有没用了</P><P>'‖=================================================
'‖功能:分割实体 '‖参数:pFeature 被分割的实体 '‖ pSplitPoints 分割点的集合 '‖输出: '‖================================================= Public Sub SplitFeature(pFeature As iFeature, pSplitPoints As IPointCollection) 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 Set pFClass = pFeature.Table ' If m_pEditLayerType = 1 Then ModiSelFeature pfeature Set pEnumVertex = pSplitPoints.EnumVertices Set pPolycurve = pFeature.ShapeCopy Set pGeoColl = pPolycurve Set pEnumSplitPoint = pPolycurve.SplitAtPoints(pEnumVertex, True, True, -1) If Not pEnumSplitPoint.SplitHappened Then Exit Sub Set pGeoColl = pPolycurve For PartCount = 0 To pGeoColl.GeometryCount - 1 Set pNewFeature = pFClass.CreateFeature Set pNewFeature.Shape = BuildPolyline(pGeoColl.Geometry(PartCount)) CopyAttributes pFeature, pNewFeature AddTimeAttri pNewFeature pNewFeature.Store AddToUndoStack g_lngCurrentCode, m_pCurrentEditTime, pNewFeature Next PartCount UpdateTimeAttri pFeature pFeature.Store AddToUndoStack g_lngCurrentCode, m_pCurrentEditTime, pFeature Exit Sub</P><P>ErrorHandler:</P><P>End Sub</P> |
|
|
5楼#
发布于:2005-03-23 18:49
<P> Dim pTopOperator1 As ITopologicalOperator2
Set pTopOperator1 = pPolyLine</P><P>if(pTopOperator1.IsSimplify = false) pTopOperator1.Simplify </P> |
|
6楼#
发布于:2005-03-24 12:58
<P>这个我试过了,如果是线割线的话,很成功,可以将一根线割成两段。但如果是用线割面的话,就不成功了,面没有任何变化,也就是说</P><P>Set pEnumSplitPoint = pPolycurve.SplitAtPoints(pEnumVertex, True, True, -1)
Set pGeoColl = pPolycurve 后 pGeoColl.GeometryCount没有变化,还是1个。 </P> |
|
7楼#
发布于:2005-03-24 15:25
返回GeometryBay类型,不是Geometry
|
|
8楼#
发布于:2005-03-24 15:26
<P>帮助中说:</P><P>When using this method to intersect a Polygon with a Polyline (or vice versa) the geometry returned will be a GeometryBag.</P><P>When using this method to intersect a Multipoint with a Polygon (or vice versa) or Multipoint with a Polyline (or vice versa) the geometry returned will be a Multipoint. </P>
|
|
9楼#
发布于:2005-03-25 11:07
<P>你们说的没错。我试过了。可是结果令人意外,返回的结果GeometryBag中的Geometry的类型居然是Multipoint,我再将Multipoint赋给一个PointCollection,发现点集里面只有两个点,就是线和面外轮廓的两个交点。而不是我想要的线的左右两个polygon。唉,郁闷,切割又失败。</P>
|
|
上一页
下一页