zoukankan      html  css  js  c++  java
  • AE开发中ICircularArc接口的图形要素保存与形状简化--原创

    在AE开发中,开发编辑 shapefile功能 时需要有时候需要绘制椭圆和圆弧功能。

    绘制椭圆使用的时接口IEllipticArc的 PutcoordsByAngle方法,其参数见下图

    绘制圆弧功能使用的是 ICircularArc 的 PutCoords()方法

    使用上面两个方法生成形状如何保存到Feature呢? 具体代码见下

    1 ICircularArc circularArc = new CircularArcClass();
    2 circularArc.PutCoords(输入参数);
    3 IPolyline circularFeatPolyline = new PolylineClass();
    4 ISegmentCollection segementColl = (ISegmentCollection)circularFeatPolyline;
    5 ISegment segment = (ISegment)circularArc ;
    6 segementColl.AddSegment(segment);

    之后再将Polyline的Goemetry赋给Feature即可。IEllipticArc的形状保存方法类似

    这样生成的Polyline的点在编辑状态是非常多的,但是在代码获得Polyline节点的时候只有FromPoint和ToPoint两个点。 如果要继续由Polyline转成TIN效率非常慢。于是需要简化形状。算法主要使用的是IPolyline接口的QueryPoint方法

     1         /// <summary>
     2         /// 查询曲线上离起点固定距离的点位坐标
     3         /// </summary>
     4         /// <param name="polyline"></param>
     5         /// <param name="distance"></param>
     6         /// <returns></returns>
     7         private IPoint queryPointByDistance(IPolyline polyline, double distance)
     8         {
     9             IPoint outPoint = new PointClass();
    10             polyline.QueryPoint(esriSegmentExtension.esriNoExtension, distance, false, outPoint);
    11             return outPoint;
    12         }        
    13        /// <summary>
    14         /// 简化系统CiurlarArc曲线上的点个数,提高生成TIN的效率
    15         /// </summary>
    16         /// <param name="inputPolyline">输入的Poyline</param>
    17         /// <param name="pointCount">加上线两个断点在内的一共平分成的端点的个数</param>
    18         /// <returns>新生成的Polyline</returns>
    19         private IPolyline simplifyPolyline(IPolyline inputPolyline, int pointCount)
    20         {
    21             IPolyline outPolyline = new PolylineClass();
    22             IPointCollection pointCollection = (IPointCollection)outPolyline;
    23             double distance = inputPolyline.Length / (pointCount - 1);
    24             for (int i = 0; i < pointCount; i++)
    25             {
    26                 IPoint point = queryPointByDistance(inputPolyline, distance * i);
    27                 pointCollection.AddPoint(point);
    28             }
    29             return outPolyline;
    30         }        
  • 相关阅读:
    火炬之光使用了哪些技术
    计算机相关,性能开销,统计数据集锦
    IOS打开应用商店应用的几种方式
    IOS怎么获取plist文件里的属性
    IOS正则表达式的用法简介
    log4net学习
    技术之外
    百度面试题[转自CSDN]
    微软.NET开发认证基础技术知识大局观——核心篇
    基于ASP.NET 2.0 实现WEB打印方法的探讨
  • 原文地址:https://www.cnblogs.com/niudieyi/p/8891391.html
Copyright © 2011-2022 走看看