`
rocye
  • 浏览: 119924 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ArcEngine将线符号化为立方体状

阅读更多

对于二三维同步中的三维视图肯定是需要通过二维元素来符号化成三维元素的,之前项目测试临时采用这个自代的圆管状:

esriSimple3DLineStyle AxisStyle = esriSimple3DLineStyle.esriS3DLSTube; 进行符号化,但是这个自带样式不能做更多的扩展,仍然需要对它进行手动graphic,今天花了半天时间看了下官方的例子,总算是捣鼓出了将指定坐标的两个点连成的线符号化成正方体状,中间也碰到一些问题。本以为arcengine提供了相当好的API,我只用传入两个点或是一根线,再给它一个Polygon,它就能帮我沿着这个线的方向画成正方体了,可是弄来弄去,不是位置不对,就是角度有问题,官方的例子过于简单,拿到我的应用中根本不能使用,于是分析了一下原因,采用以下三步:

 

第一步: 空间有根线,起点和终点肯定可以得到,我要沿这个线符号化成立方体,那么两点的长度肯定要用到。我们就在坐标原点沿Z坐标画一个立方体,高就是上面提到的线长。

第二步: 我们假定这根线的起点为(0,0,0),即我自定义的原点,通过IVector3D接口很容易得到这根线的偏移角度。这样就在原点把上面那个立方体给进行两次旋转得到正确的线段走向。

第三步: 将第二步的立方体平移到起点位置,完工。

 

public static IGeometry getCubeTubeByLinePoint(IPoint fPoint, IPoint tPoint, double width, double height)
        {
            //IPoint fPoint = GeometryUtilities.ConstructPoint3D(5, 6, 3);
            //IPoint tPoint = GeometryUtilities.ConstructPoint3D(15, 13, 13);
            //计算走向-->移动坐标原点
            IVector3D tarPointV3D = GeometryUtilities.ConstructVector3D(tPoint.X - fPoint.X, tPoint.Y - fPoint.Y, tPoint.Z - fPoint.Z);
            //定义两次旋转的轴线
            IVector3D axisOfRotationVector3D_Y = GeometryUtilities.ConstructVector3D(0, 10, 0);
            IVector3D axisOfRotationVector3D_Z = GeometryUtilities.ConstructVector3D(0, 0, 10);

            //定义走向线段
            ILine extrusionLine = new LineClass();
            extrusionLine.FromPoint = fPoint;
            extrusionLine.ToPoint = tPoint;
            double myToZ = extrusionLine.Length;        //线段长度


            //初始化截面形状
            IPointCollection polygonPointCollection = new PolygonClass();
            polygonPointCollection.AddPoint(GeometryUtilities.ConstructPoint2D(-(height / 2), (width / 2)),ref _missing, ref _missing);
            polygonPointCollection.AddPoint(GeometryUtilities.ConstructPoint2D((height / 2), (width / 2)), ref _missing, ref _missing);
            polygonPointCollection.AddPoint(GeometryUtilities.ConstructPoint2D((height / 2), -(width / 2)), ref _missing, ref _missing);
            polygonPointCollection.AddPoint(GeometryUtilities.ConstructPoint2D(-(height / 2), -(width / 2)), ref _missing, ref _missing);

            IPolygon polygon = polygonPointCollection as IPolygon;
            polygon.Close();

            IGeometry polygonGeometry = polygonPointCollection as IGeometry;

            ITopologicalOperator topologicalOperator = polygonGeometry as ITopologicalOperator;
            topologicalOperator.Simplify();


            //Perform Extrusion
            IConstructMultiPatch constructMultiPatch = new MultiPatchClass();
            constructMultiPatch.ConstructExtrudeFromTo(0, myToZ, polygonGeometry);

            //旋转角度
            ITransform3D transform3D = constructMultiPatch as ITransform3D;
            transform3D.RotateVector3D(axisOfRotationVector3D_Y, tarPointV3D.Inclination);
            transform3D.RotateVector3D(axisOfRotationVector3D_Z, GeometryUtilities.GetRadians(90) - tarPointV3D.Azimuth);

            //移动到起点
            transform3D.Move3D(fPoint.X, fPoint.Y, fPoint.Z);

            return constructMultiPatch as IGeometry;
        }

 

 

分享到:
评论

相关推荐

    C# ArcEngine矢量栅格符号化渲染

    本文将深入探讨“C# ArcEngine矢量栅格符号化渲染”这一主题,详细介绍如何利用C#语言在ArcEngine环境下对矢量和栅格数据进行丰富多彩的符号化渲染。 首先,我们要理解什么是符号化渲染。在GIS中,符号化是将地理...

    ARCENGINE地图符号编程

    本主题将深入探讨“ARCENGINE地图符号编程”,这是一个关键的子领域,涉及到如何在地图上美观、准确地表示地理数据。 地图符号是GIS中的核心元素,它们将抽象的数据转化为视觉可理解的形式。ARCENGINE提供了丰富的...

    ArcEngine实现符号自动化显示

    程序是基于ArcEngine9.3开发的,开发平台为Visual Studio 2008,开发语言为c#,数据为china文件夹下的数据,使用的符号为ArcGIS自带的符号库ESRI.ServerStyle中的符号。 所以安装了ArcEngine9.3和vs2008的可以直接...

    ArcEngine 地图符号化

    ArcEngine 地图符号化总结 是否新手入门

    arcengine+c#右键符号选择器实现

    本文将深入探讨如何在ArcEngine+C#环境中实现右键符号选择器的功能。 首先,理解“符号选择器”是关键。在ArcGIS中,符号选择器是一个工具,用于选择和定制地图上的图层、特征或几何对象的显示样式。它提供了丰富的...

    arcengine符号文件转换

    本篇文章将深入讲解如何将ArcMap的符号文件(style)转换为ArcEngine使用的serverstyle文件。 1. **ArcMap的符号文件(style)** ArcMap中的符号文件是`.sld`或`.style`格式,用于定义地图图层上各种要素的外观,...

    Arcengine获取指定名称的符号

    该代码实现了根据指定的符号名称获取ArcGIS,serverstyle中的符号,并使得图层以该符号显示

    基于ArcEngine符号系统的实现与扩展

    ### 基于ArcEngine符号系统的实现与扩展 #### 引言 地图符号与符号管理在计算机地图制图和空间数据可视化中扮演着核心角色。无论是GIS还是专业地图制图软件,地图符号的设计都是关键功能模块之一。随着GIS技术在...

    ArcEngine绘制椭圆,带箭头的线,并且进行渲染

    在ArcEngine开发中,我们经常会遇到需要在MapControl上绘制各种几何对象的需求,例如椭圆和带有箭头的线。这些元素在地理信息系统(GIS)应用中非常常见,用于表示地理特征、范围、方向等信息。ArcEngine是Esri公司...

    用AE arcengine画点画线画面(代码)

    本教程将深入探讨如何使用ArcEngine API在Visual Studio 2010环境下绘制点、线和面。 首先,ArcEngine提供了一系列的接口和类,用于创建和操作地图对象,包括点(IGeometry)、线(IPolyline)和面(IPolygon)。在...

    ArcEngine基于C#的开发(相交联合)

    本文将深入探讨ArcEngine基于C#的开发,尤其是如何实现“相交”和“联合”这两种重要的空间分析操作。 首先,ArcEngine的核心是其丰富的API,提供了对地图数据、图层、几何对象等的全面访问。在C#环境中,我们可以...

    ArcEngine空间分析实现

    本文将深入探讨如何使用ArcEngine实现各种空间分析功能,包括并集、交集、差集以及缓冲区分析。 首先,我们来了解什么是空间分析。空间分析是GIS的核心组成部分,它通过对地理数据进行数学运算,揭示地理事物之间的...

    利用ARCENGINE生成等值线

    本主题将深入探讨如何利用ARCENGINE生成等值线,这是一种将连续数值数据(如地形高程、温度或降雨量)转化为可视化的线条或区域,以展示地理空间数据分布的重要技术。 1. **等值线概念**:等值线是连接地表上具有...

    ArcEngine 可加载的数据的几种方法

    下面我们将详细介绍 ArcEngine 可加载的数据的几种方法。 加载 Shapefile 数据 Shapefile 是一种常用的矢量数据格式,ArcEngine 可以通过 IWorkspaceFactory 和 IFeatureWorkspace 两个接口来加载 Shapefile 数据...

    基于ArcEngine符号系统的实现与扩展.pdf

    基于ArcEngine符号系统的实现与扩展

    arcengine 唯一值渲染符号化源码

    本主题将深入探讨“arcengine 唯一值渲染符号化源码”,这是一种用于地图视觉表现的重要技术,特别是在处理分类数据时。ArcEngine结合了C#编程语言和DevExpress控件库,提供了丰富的开发工具和界面元素。 唯一值...

    ArcEngine测量地图上两点距离

    在ArcGIS平台上,ArcEngine是一个强大的开发工具,用于构建地理信息系统(GIS)应用程序。这篇教程主要针对ArcEngine初学者,讲解如何实现一个功能——测量地图上任意两点之间的距离。这个功能在很多领域都非常实用...

    ArcEngine空间查询统计

    ArcEngine提供了多种统计方法,如计算平均值、中位数、标准差等统计量,还可以进行汇总统计,如计算区域内点的总数、线的总长度或面的总面积。这通常通过IFeatureClass的CalculateStatistics方法或使用统计分析类...

    arcengine二次开发说明文档

    本篇将详细阐述ArcEngine的二次开发过程,以帮助开发者充分利用其功能进行定制化应用。 一、ArcEngine基础 ArcEngine的核心是其丰富的API,它提供了C#、VB.NET、VC++等多种语言接口,让开发者可以灵活选择编程环境...

Global site tag (gtag.js) - Google Analytics