c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形

前面一篇文章讲述了如何加载fly地图到WPF窗口里面,接下来就是在里面这张地图里进行各种操作,创建坐标,创建图形,创建标签,获取坐标等等,这一篇就先研究如何创建这些基本的东西。(其实这些玩意在文档里面都有,但是就是看着难受,有些函数又不说清楚,只能慢慢摸索),这里我就一步一步地操作,很简单的,相信各位道友一定看得懂。

话不多说,先画一个圆,圆有什么用呢?比如你点一个地方,要匹配这个地方方圆一公里的资源什么的,就用上了。
还是一样,先创建一个项目
c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形_第1张图片

然后简单写一下界面,不用太花哨,教程嘛,你懂的。
c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形_第2张图片

ok,接下来,加载fly地图的操作我就不多说了,不清楚的哥们,去前一篇文章看看,上图
c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形_第3张图片

接下来就在点击事件里面调用画圆函数即可
画圆的具体细节我写在注释里了,下面我会贴上画圆的代码
c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形_第4张图片
好,下面画圆的函数:

public void DrawCir(SGWorld701 SGW701)
        {
            string tMsg = String.Empty;
            IPosition701 cPos = null;
            IColor701 cFillColor = null;
            ITerrainRegularPolygon701 cCircle = null;
            ITerraExplorerMessage701 cMessage = null;

            try
            {
                //第一步,先实例化一个TerraExplorer Globe 也就是上面的SGWorld701
                //第二步:为圆创造坐标
                //2-1,先设置坐标输入参数
                //经纬度,高程
                double dXCoord = -122.49460;
                double dYCoord = 37.78816;
                double dAltitude = 100.0;
                //下面这个是圆是以什么为参照来定义高度的,比如基于地面30米,基于3DML 5米等
                AltitudeTypeCode ealtitudeTypeCode = AltitudeTypeCode.ATC_TERRAIN_RELATIVE;
                double dYaw = 0.0;
                double dPitch = 0.0;
                double dRoll = 0.0;
                double dDistance = 5000;

                //2-2参数有了 现在创造坐标对象
                cPos = SGW701.Creator.CreatePosition(dXCoord, dYCoord, dAltitude, ealtitudeTypeCode, dYaw, dPitch, dRoll, dDistance);
                //3.给圆创造一个填充颜色
                //3-1 设置填充颜色输入参数 -RGB 和Alpha(透明度)
                int nRed = 0;
                int nGreen = 255;
                int nBlue = 0;
                int nAlpha = 0x7F;//百分之50透明度
                                  //3-2 创造填充颜色对象
                cFillColor = SGW701.Creator.CreateColor(nRed, nGreen, nBlue, nAlpha);

                //4下面创造一个使用坐标和颜色的圆
                //4-1设置圆输入参数
                uint nLineColor = 0xFFFF0000;//Abgr 值  实体蓝色
                double dCircleRadius = 200;  //半径  米
                //4-2创建圆
                cCircle = SGW701.Creator.CreateCircle(cPos, dCircleRadius, nLineColor, cFillColor, string.Empty, "My_newCircle");

                //这样一个圆就造出来了
                //5下面是获取和更改圆的属性

                {
                    //5-1 获取和设置圆的半径
                    double dNewCircleRadius = 300;
                    double dCurrentCircleRadius = cCircle.Radius;
                    cCircle.Radius = dNewCircleRadius;

                    //5-2获取填充样式并改变其属性
                    uint nRGB_Red = 0xFF0000; //uint Rgb -red color
                    double dAlpha = 0.2; //百分之80透明
                    var cFillstyle = cCircle.FillStyle;
                    cFillstyle.Color.FromRGBColor(nRGB_Red);
                    cFillstyle.Color.SetAlpha(dAlpha);

                }
                //造出来的东西肯定要与用户进行交互  不然创出来干什么
                //6接下来向创建的圆 添加消息

                {
                    //6-1  一样的 什么都要参数  消息输入一样是要参数的
                    MsgTargetPosition msgTarget = MsgTargetPosition.MTP_POPUP;
                    string tMessage = "Hello Circle";
                    MsgType eMsgType = MsgType.TYPE_TEXT;
                    bool bIsBringToFront = true;
                    //6-2现在只是有参数咯,还没有消息对象,也还没加到圆里,现在创建消息并且把消息加到圆里面
                    cMessage = SGW701.Creator.CreateMessage(msgTarget, tMessage, eMsgType, bIsBringToFront);
                    cCircle.Message.MessageID = cMessage.ID;
                }


                //最后咱们要去看看创建的圆,就用flyto
                {
                    var cFlyToPos = cPos.Copy();
                    cFlyToPos.Pitch = -89.0; //设置摄像机在圆圈上向下看
                    SGW701.Navigate.FlyTo(cFlyToPos, ActionCode.AC_FLYTO);
                }

            }
            catch (Exception ex)
            {
                tMsg = String.Format("CreateCircleButton_Click Exception: {0}", ex.Message);

                MessageBox.Show(tMsg);


            }
        }

好吧,如果看过帮助文档的兄弟一定很熟悉,对,这就是文档里面的,只不过注释是我自己写的。其实可以写得很简单,但是,我想我当时看文档跟着文档一个一个也是这样先敲的,各位道友也敲一下这种原版清新的吧。
最后效果如下:
c# WPF+skyline二次开发学习笔记(二)------在fly中画一个圆形_第5张图片
好了,这就是在fly里面画圆,后面还有一些操作,慢慢来。

你可能感兴趣的:(WPF+skyline学习笔记)