[地图SkyLine二次开发]框架(5)完结篇

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

 

这节带你们,具体开发一个简单的功能,来了进一步了解,这个框架。算法

 

1.想菜单中添加按钮前端框架

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

 

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

 

-运行看一下效果。布局

 

2.按钮加事件测试

-app/control文件夹里建立MainController.js里加上以下代码spa

 

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

 

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的这种前端框架。

 

框架部分就更新到这里,但愿对你们有所帮助。

但愿你们多多推荐,顶起来。^^

相关文章
相关标签/搜索