zoukankan      html  css  js  c++  java
  • 使用AO创建平头buffer

    http://www.gisall.com/html/47/122747-2960.html 我们平常使用ITopologicalOperator的buffer是圆角的图形。如下图 但实有时候我们也需要像下面那样的平头buffer的效果。 如何做到这种效果?说一下思路。 下面是使用线去生成这种平头的buffer图形 1.分别使用线的图形向正方向和负方向平移一定的距离,使用IConstructCurve接口可以实现等距偏移 这样可以很好的支持曲线和折线 2.分别把偏移后的两条线的所有节点添加到一个IPointCollection里面 3.用一个PolygonClass去初始化一个IPointCollection,把刚才的所有节点注入此IPointCollection 4.重排IPointCollection的节点次序,将其转换为Polygon。 具体代码如下: /// <summary> /// 平头buffer /// </summary> /// <param name="myLine">用做buffer的线图形</param> /// <param name="bufferDis">buffer的距离</param> /// <returns></returns> /// private IPolygon FlatBuffer(IPolyline myLine, double bufferDis) { object o = System.Type.Missing; //分别对输入的线平移两次(正方向和负方向) IConstructCurve mycurve = new PolylineClass(); mycurve.ConstructOffset(myLine, bufferDis, ref o, ref o); IPointCollection pCol = mycurve as IPointCollection; IConstructCurve mycurve2 = new PolylineClass(); mycurve2.ConstructOffset(myLine, -1 * bufferDis, ref o, ref o); //把第二次平移的线的所有节点翻转 IPolyline addline = mycurve2 as IPolyline; addline.ReverseOrientation(); //把第二条的所有节点放到第一条线的IPointCollection里面 IPointCollection pCol2 = addline as IPointCollection; pCol.AddPointCollection(pCol2); //用面去初始化一个IPointCollection IPointCollection myPCol = new PolygonClass(); myPCol.AddPointCollection(pCol); //把IPointCollection转换为面 IPolygon myPolygon = myPCol as IPolygon; //简化节点次序 myPolygon.SimplifyPreserveFromTo(); return myPolygon; }
  • 相关阅读:
    导航属性
    提笔忘字
    JavaScript学习总结(一)——闭包、对象、函数
    CSS3新特性(阴影、动画、渐变)
    图片轮播(也可以通过点击下标播放对应的图片)
    CSS3与页面布局学习总结——多种页面布局
    多种居中方法
    二级菜单
    无间隙轮播图片
    模块和程序处理
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328080.html
Copyright © 2011-2022 走看看