注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

naigeer的知识库

不断学习,用知识武装头脑,用头脑创造未来!

 
 
 

日志

 
 

Interpolate Polygon to Multipatch  

2007-12-27 14:46:54|  分类: ArcGIS开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

困扰了我好几天的一个问题不经意之间就这么解决了,兴奋……

目的:将给定的一条线要素(polyline类型)通过某种法则构造出一个面要素(polygon类型)之后,再将此面要素转换成Multipatch类型

问题:产生的面要素无法转换成Multipatch类型

解决办法:问题产生的原因是我在生成面状要素时,各节点是按照顺时针方向记录的,此时生成的多边形无法转换成Multipatch类型;经过实验,当我将构建多边形的节点按逆时针方向记录之后,再次生成的多边形就可以转换成Multipatch类型了!

具体实现代码如下(VB+AE,部分变量的定义省略):
    Dim pGeo As IGeometry
    Dim pPolyline As IPolyline     
    Dim pPointCol As IPointCollection
    Dim pConstructPoint As IConstructPoint  
    Dim pPolygonPoint1 As IPoint    
    Dim pPolygonPoint2 As IPoint    
    Dim pPolygonPointCol As IPointCollection 
    Dim pCurve As ICurve

Set pPolyline = pGeo
       Set pPointCol = pPolyline
       Set pPolygonPointCol = New Polygon
        ’注意:生成多边形的节点必须按照逆时针方向记录,否则无法生成multipatch
            pPolygonPointCol.AddPoint pPolyline.FromPoint   '首先记录起始节点
            Set pCurve = pPolyline
            Dim i As Integer
            '首先进行正向偏移
            For i = 1 To pPointCol.PointCount - 2 '首尾两点保持不动
                Set pConstructPoint = pPointCol.Point(i)
                pConstructPoint.ConstructOffset pCurve, esriExtendEmbedded, i / pPointCol.PointCount, True, -10
                Set pPolygonPoint1 = pConstructPoint    '记录偏移后的点用于构建多边形
                pPolygonPointCol.AddPoint pPolygonPoint1
            Next i
            pPolygonPointCol.AddPoint pPolyline.ToPoint     '记录尾节点
            '其次进行负向偏移
            For i = pPointCol.PointCount - 2 To 1 Step -1
                Set pConstructPoint = pPointCol.Point(i)
                pConstructPoint.ConstructOffset pCurve, esriExtendEmbedded, i / pPointCol.PointCount, True, 10
                Set pPolygonPoint2 = pConstructPoint
                pPolygonPointCol.AddPoint pPolygonPoint2
            Next i

     Set pPolygon = pPolygonPointCol
            pPolygon.Close  '此处必须close,否则显示不正确!
    
            Set pZaware = pPolygon
            pZaware.ZAware = True   'set the ZAware flag so the polygon can store Z's
            Set pPolygonFeature = pPolygonFeaturecls.CreateFeature
            Set pPolygonFeature.Shape = pPolygon
            pPolygonFeature.Store

  评论这张
 
阅读(619)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017