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;
    }
}

最新文章

  1. java程序设计之反弹高度
  2. react native TextInput
  3. 使用nodejs调用微信发送红包
  4. datatable group by
  5. MySQL 利用SQL线程对Binlog操作
  6. favicon的制作
  7. 学习笔记——Maven实战(十)Maven 3,是时候升级了
  8. JqueryUI
  9. poj 3180 The Cow Prom(强联通分量)
  10. localstorage 使用
  11. js中运算符的优先级
  12. spring-data-mongodb必须了解的操作
  13. 为效率而生:开源Mac版Google Authenticator认证客户端GoldenPassport
  14. css知识点
  15. yii2之GridView小部件
  16. Kafka笔记7(构建数据管道)
  17. python绘图工具matplotlib在linux下安装和使用
  18. 鸟哥的 Linux 私房菜Shell Scripts篇(三)
  19. [微软]The latest version of Windows is Windows Sandbox
  20. jenkins系列(11)-自动打tag升级篇

热门文章

  1. 模板singleton模式的C++实现
  2. mysql无法启动,一直处于启动状态解决【Mac osx 】
  3. UVALive 2520 Holedox Moving(BFS+状态压缩)
  4. memcached + php 扩展 for ubuntu
  5. Chapter 1 First Sight——34
  6. LD_LIBRARY_PATH vs LIBRARY_PATH
  7. Memcached缓存
  8. Bother
  9. psql 命令总结
  10. perl的package和module