zoukankan      html  css  js  c++  java
  • Envelope几何对象 Curve对象几何对象 Multipatch几何对象 Geometry集合接口 IGeometryCollection接口

        Envelope是所有几何对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象都有一
    个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取几何对象的
    XMax,XMin,YMax,YMin,Height,Width属性。通过IEnvelope的Expand方法还可以按比例缩放Envelope对
    象的范围,如下图所示:

    Curve对象几何对象

        除去Point,MultiPoint和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。
    Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲线的一种,它们
    都实现了ICurve接口。
    ICurve接口的Length属性用于返回一个Curve对象的长度。
    ICurve接口的FromPoint和ToPoint属性可以获得Curve对象的起止点。
    ICurve接口的Reverseorientation方法可以改变一个Curve对象的节点次序即调动Curve对象的起
    始点和终止点互相调换。
    ICurve接口的IsClosed属性则可以判断一个Curve对象起始点和终止点是否在一个位置上。
    ICurve接口的GetSubcurve方法可以复制一条Curve对象的特定部分,例如一条10千米公路的Curve
    对象,获取2-5千米处的公路的曲线代码片段如下所示:
    //QI到ICurve接口
    ICurve pCurve = pPolyline as ICurve;
    //创建一个Polyline对象
    ICurve pNewCurve = new PolylineClass();
    bool btrue= true;
    //获取-5千米间的曲线对象pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);
    此外ICurve的QueryTangent和QueryNormal方法分别用于获取Curve对象上某一点的曲线的切线

    和法线

    Multipatch几何对象

    Multipatch几何对象用于描述3D图形,可以由TriangleStrip, TriangleFan, Triangle和ring对
    象组合构成组成。Multipatch可以通过多种方式创建,一种是通过导入外部3D格式数据文件(3D Studio
    Max .3ds files, OpenFlight .flt files, COLLADA .dae files, Sketchup .skp files, VRML .wrl files),
    另外ArcGIS Engine提供了多种创建Multipatch几何对象的方法:
    如果创建没有贴图纹理,没有法向,没有组成部分信息的Multipatch时,只需创建好组成的
    Multipatch的各个部分即可,然后通过MultiPatch的IGeometryCollection接口添加各个组成部分即可。
    如果要为Multipatch每个组成部分添加纹理信息,法向信息,属性信息就必须使用
    GeneralMultiPatchCreator对象来创建,通过其IGeneralMultiPatchInfo接口来为MultiPatch各个组成
    部分定义法向,材质,属性信息。通过IGeneralMultiPatchInfo接口可以获取这些MultiPatch的各个组
    成部分的信息。

    通过IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment对象可以通过拉伸
    Polyline对象(拉伸为墙)和Polygon对象(拉伸为多面体)来创建MultiPatch.
    通过访问3D符号库,获取3DSymbol来渲染点,把三维符号放置在点的位置从而生成Multipatch.


    Geometry集合接口
    通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,其他几何对象都是通过其他
    几何对象集合构建而成。如MultiPoint对象是点的集合,Path对象是Segment对象的集合,Polyline对
    象是Path对象的集合,Polygon对象是Ring对象的集合,Multipatch对象是Triangle Strip和Trangle
    Fan, Trangle,Ring对象的集合。
    ArcGIS Engine提供了三个主要的几何图形集合接口用于对几何对象的操作,分别是
    IPointCollection,ISegmentCollection和IGeometryCollection,这些接口揭示出ArcGIS Engine的几何
    模型的实质——它们是一种组合构成的模式,这种组合并不一定按照严格的层次结构组织。
    在前面介绍一些几何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中经常使
    用到,接下来简单阐述以下这三个接口的使用方法。
    IGeometryCollection接口被Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle
    Strip,Trangle Fan和GeometryBag所实现。IGeometryCollection接口提供的方法可以让开发者对一个几

    何对象的组成元素即子对象进行添加,改变和移除。例如:
    组成Polyline对象的子对象是Path对象。
    组成Polygon对象的子对象是Ring对象。
    组成Multipoint对象的子对象是Point对象。
    组成MultiPatch对象的子对象是TrangleFan TrangleStrip,Triangle或Ring对象。
    组成GeometryBag对象的是任何类型的几何体对象,实际上GeometryBag是一个可以容纳任何类型
    几何对象的容器。
    IGeometryCollection的Geometry 属性可以通过一个索引值返回一个组成该几何对象的某个子对象,
    而GeometryCount返回组成该几何对象的子对象的数目。
    IGeometry的AddGeometry和AddGeometries方法都用于向一个几何对象添加子对象,它们的区别是
    前者一次只能添加一个几何对象,而后者可以一次添加一个几何对象数组。除此之外,AddGeometry方法

    可以将子对象添加到几何的指定索引值的位置,而AddGeometries方法将子对象数组添加到集合的最后。
    在使用AddGeometry方法添加子对象到Polygon对象的过程中,如果子对象即Ring出现覆盖现象,
    那么多边形就没有封闭或出现了包含关系,那么这个Polygon就不是简单Polygon,因此通过
    IGometryCollection来创建一个Polygon时,需要使用ITopologicalOperator 的Simplify方法保证其有
    效性。

      IGeometryCollection接口

    通过IGeometryCollection创建一个Polygon对象的代码片段如下:
    private IPolygon ConstructorPolygon(List<IRing> pRingList)
            {
                try
                {
     
                    IGeometryCollection pGCollection = new PolygonClass();
                    object o = Type.Missing;
     
                    for (int i = 0; i < pRingList.Count; i++)
                    {
                        //通过IGeometryCollection接口的AddGeometry方法向Polygon对象
    对象
                        pGCollection.AddGeometry(pRingList[i], ref o, ref o);
                    }
                    //QI至ITopologicalOperator
                    ITopologicalOperator pTopological = pGCollection as ITopologic
                    //执行Simplify操作
                    pTopological.Simplify();
                    IPolygon pPolygon = pGCollection as IPolygon;
                    //返回Polygon对象
                    return pPolygon;
                }
                catch (Exception Err)
                {
     
                    return null;
                }
            }

    private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon)
            {
                try
                {
                    //创建一个Polygon对象
                    IGeometryCollection pGCollection1 = new PolygonClass();
                    IGeometryCollection pGCollection2 = firstPolygon as IGeometryCollection;
                    IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;
                    //添加firstPolygon
                    pGCollection1.AddGeometryCollection(pGCollection2);
                    //添加SecondPolygon
                    pGCollection1.AddGeometryCollection(pGCollection3);
                    //QI至ITopologicalOperator
                    ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;

            //执行Simplify操作
            pTopological.Simplify();
            IPolygon pPolygon = pGCollection1 as IPolygon;
            //返回Polygon对象
            return pPolygon;
        }
        catch (Exception Err)
        {
            return null;
        }
    }

  • 相关阅读:
    Topic model的变种及其应用[1]
    关于LDA的文章
    优秀的基于VUE移动端UI框架合集
    uwsgi部署django,里的request调用的接口响应慢解决方法
    vue部署到nginx服务下,非根目录,刷新页面404怎么解决?
    vue 项目部署到nginx
    CentOS7.2安装nginx失败
    vue-router总结
    vuerouter
    django1
  • 原文地址:https://www.cnblogs.com/qiushuixizhao/p/3248229.html
Copyright © 2011-2022 走看看