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

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

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. 为什么Pojo类没有注解也没有spring中配置<bean>也能够被加载到容器中。

    Spring的注入机制其实就是代替了new的这个过程(称为解耦). 写了一个Thread类,没有加注解@Component,但是可以正常运行,开始为了自圆其说,打通逻辑,猜测是StartThread中 ...

  2. Ubuntu16.04 802.1x 有线连接 输入账号密码,为什么连接不上?

    ubuntu16.04,在网络配置下找到802.1x安全性,输入账号密码,为什么连接不上?   这是系统的一个bug解决办法:假设你有一定的ubuntu基础,首先你先建立好一个不能用的协议,就是按照之 ...

  3. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

  4. PHP $_SERVER详解

    $_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 $_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] ...

  5. CentOS双网卡绑定bond0

    a)拷⻉并配置vim /etc/sysconfig/network-scripts/ifcfg-bond0配置⽂件(会自动创建文件) DEVICE=bond0 TYPE=Ethernet ONBOOT ...

  6. python学习笔记系列----(七)类

    7.1 python类和相关术语的简介 Python 通过最小的新语法和语义在语言中实现了类. 它是 C++ 或者 Modula-3 语言中类机制的混合.类的大多数重要特性都被完整的保留下来:类继承机 ...

  7. 使用MacBook Air的4项基本技巧

    MacBook Air可以说是笔记本电脑中的翘楚:性能优异.拥有超长的电池使用时间的同时保持了轻盈的体态.纤薄的外形,这几乎满足了人们对笔记本的所有要求.如果你也是一个MacBook Air用户,不妨 ...

  8. IDEA 搭建自己的第一个 SpringMvc Hello Word

    1.首先 安装IDEA 2.配置nexus ,来实现 Maven对项目 包的引用,发布. 在配置过程中 http://192.168.10.38:8081/nexus/content/groups/p ...

  9. Masonry 创建Button的简单使用

    代码创建控制器,控件在实际开发中很实用,方便快捷,而Masonry第三方框架更是将代码创建效率提高了很多! 如何代码创建?如何使用第三方框架? 1.首先删除系统自带的SB,详见下图 2.在AppDel ...

  10. 【金】nginx+uwsgi+django+python 应用架构部署

    网上有很多这种配置,但就是没一个靠普的,费了好大的力气才完成架构部署.顺便记录一下. 一.部署前的说明 先安装好 python,django,uwsgi,nginx软件后.后配置运行的软件是分先后的. ...