上节讲到,将菜单悬浮到地图上面,而且任何操作都不会让地图把菜单盖住。

这节带大家,具体开发一个简单的功能,来了进一步了解,这个框架。

1.想菜单中添加按钮

-上节定义的mainLayout.js文件里,定义按钮,并实例化它。

-将按钮添加到,ZZH.view.MainLayout中。

-运行看一下效果。

2.按钮加事件

-app/control文件夹里创建MainController.js里加上如下代码

-运行,并点击按钮测试,就是如下效果。

3.开发一个,画直线的功能。

-在MainController.js文件最下面加上如下代码。

//创建线对象
var CreateTerrainProfile_Line = null;
function CreateTerrainProfile_DrawLine() { if (sgworld == null) {
sgworld = CreateSGObj();
}
CreateTerrainProfile_Line = null;
sgworld.AttachEvent("OnLButtonDown", CreateTerrainProfile_OnLButtonDown);
sgworld.AttachEvent("OnFrame", CreateTerrainProfile_OnFrame);
sgworld.AttachEvent("OnRButtonDown", CreateTerrainProfile_OnRButtonDown);
sgworld.Window.SetInputMode(1); } //创建线右键事件
function CreateTerrainProfile_OnRButtonDown(Flags, X, Y) { sgworld.DetachEvent("OnFrame", CreateTerrainProfile_OnFrame);
sgworld.DetachEvent("OnLButtonDown", CreateTerrainProfile_OnLButtonDown);
sgworld.DetachEvent("OnRButtonDown", CreateTerrainProfile_OnRButtonDown);
var lineGeometry = CreateTerrainProfile_Line.Geometry;
lineGeometry.Points.DeletePoint(lineGeometry.Points.Count - 1);
sgworld.Window.SetInputMode(0);
CreateTerrainProfile_Line.Geometry.EndEdit();
return true; }
//创建线左键事件
function CreateTerrainProfile_OnLButtonDown(Flags, X, Y) {
var groupid = sgworld.ProjectTree.FindItem("[画图]"); var startPoint = sgworld.Window.PixelToWorld(X, Y); if (startPoint == null) {
return false;
}
else {
if (CreateTerrainProfile_Line == null) {
var lineString = sgworld.Creator.GeometryCreator.CreateLineStringGeometry([startPoint.Position.X, startPoint.Position.Y, 0, startPoint.Position.X, startPoint.Position.Y, 0]); CreateTerrainProfile_Line = sgworld.Creator.CreatePolyline(lineString, sgworld.Creator.CreateColor(255, 0, 255, 155), 0, groupid, "polyline");
CreateTerrainProfile_Line.LineStyle.Width = -2;
CreateTerrainProfile_Line.Geometry.StartEdit(); }
else {
var lineGeometry = CreateTerrainProfile_Line.Geometry;
var endPoint = lineGeometry.EndPoint;
endPoint.X = startPoint.Position.X;
endPoint.Y = startPoint.Position.Y;
endPoint.Z = 0;
lineGeometry.Points.AddPoint(startPoint.Position.X, startPoint.Position.Y, 0);
}
}
return true; }
//画线橡皮筋效果
function CreateTerrainProfile_OnFrame() {
var mouseInfo = sgworld.Window.GetMouseInfo();
var endPoint = sgworld.Window.PixelToWorld(mouseInfo.X, mouseInfo.Y);
if (CreateTerrainProfile_Line != null) {
var lineGeometry = CreateTerrainProfile_Line.Geometry;
var lineEndPoint = lineGeometry.Endpoint;
lineEndPoint.X = endPoint.Position.X;
lineEndPoint.Y = endPoint.Position.Y;
lineEndPoint.Z = 0;
}
}

-并在MainController我们刚添加的测试按钮中,添加CreateTerrainProfile_DrawLine()的调用

-运行看效果(图片上五角星就是我画出来的折线)

-在工程树上可以看到刚画出来折线的对象,这里就不展示了。

4.结束语

  到这里,我们的SkyLine项目的前段Web应用框架就搭好了,具体菜单页的布局,以及菜单的伸缩等等,这都要靠大家的想象力啦。。。

开发了3-4个月左右,感觉Skyline项目不是那么太难,涉及到的算法或技术,在帮助文档里面也都能找到。

问题就在前端美工,用Skyline自带的弹出式HTML页,有很多不便,所以才采用了Iframe配合Extjs的这种前端框架。

框架部分就更新到这里,希望对大家有所帮助。

希望大家多多推荐,顶起来。^^

[地图SkyLine二次开发]框架(5)完结篇的更多相关文章

  1. [地图SkyLine二次开发]框架(1)

    项目介绍: 项目是三维地理信息系统的开发,框架MVC4.0 + EF5.0 + Extjs4.2 + SkyLine + Arcgis,是对SkyLine的二次开发. 项目快结束了,先给大家看一眼效果 ...

  2. [地图SkyLine二次开发]框架(2)

    上节讲到,地图加载. 但我们可以发现,当没有页面布局的情况下,<OBJECT>控件,没有占满整个屏幕,这里我们就要用到Extjs的功能了. 这节要讲的是用Extjs为<OBJECT& ...

  3. [地图SkyLine二次开发]框架(4)

    继续上一节... 1.Extjs5.0版Menu. -将Extjs包引入MenuPage.html页. 2.前段用Extjs的MVC框架 -在根目录下创建app文件夹,文件夹下分别创建controll ...

  4. [地图SkyLine二次开发]框架(3)

    上节将显示我们地图的OBJECT控件,布了一下局,但地图没有进行加载. 这是因为我们要在另一个页面,对OBJECT控件进行地图加载,并且得到该控件的sgworld,以便对其进行我们想要的开发. 这里, ...

  5. [地图SkyLine二次开发]关于IE内存限制问题(1G)

    相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Sk ...

  6. Skyline 7 版本TerraExplorer Pro二次开发快速入门

    年底了,给大家整理了一下Skyline 7版本的二次开发学习初级入门教程,献给那些喜欢学习的年轻朋友. 我这整理的是Web控件版本的开发示例,里面页面代码保存成html,都可以直接运行的. 测试使用的 ...

  7. C#基于AE组件二次开发常见问题

    由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...

  8. [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用

    目       录 第十二章     二次开发及应用... 2 12.1        项目配制... 3 12.2        引用相关组件... 4 12.3        构建主程序... 5 ...

  9. php后台开发(二)Laravel框架

    php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常 ...

随机推荐

  1. My family No.1

    Ok, in my family, there are seven people including my father, mother, three sisters, one brother and ...

  2. Java工程师三大框架面试题汇总

    1. Hibernate3 提供了属性的延迟加载功能? 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内 ...

  3. linux通过ntp设置系统时间

    1.查看本机时间 date 2.安装ntp并且设置开机启动 sudo yum -y install ntp chkconfig ntp on 3.立即更新系统时间 sudo ntpdate time. ...

  4. Good Bye 2015 D. New Year and Ancient Prophecy

    D. New Year and Ancient Prophecy time limit per test 2.5 seconds memory limit per test 512 megabytes ...

  5. Linux部署Apache ActiveMQ 5.14.1

    简单记一下,下载地址 http://activemq.apache.org/download.html 一.安装JDK7以上,官方说明:http://activemq.apache.org/versi ...

  6. 漫谈单点登录(SSO)(淘宝天猫)

    1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...

  7. Solution for Error FRM-92095: Oracle Jnitiator version too low

    Solution for Error FRM-92095: Oracle Jnitiator version too low By Pan.Tian on 六月 04, 2013 Symtom: Af ...

  8. github开发

    从0开始学习 GitHub 系列之「初识 GitHub」 从0开始学习 GitHub 系列之「加入 GitHub」 从0开始学习 GitHub 系列之「Git 速成」 从0开始学习 GitHub 系列 ...

  9. 山东省第七届ACM省赛------Triple Nim

    Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds o ...

  10. Computed read-only property vs function in Swift

    In the Introduction to Swift WWDC session, a read-only property description is demonstrated: class V ...