Skyline 代码实现画线操作_橡皮筋效果

前面文章写了个简单的画线方法,其中绘制是通过鼠标事件不断组合坐标数组了创建新的线。这样的方式思路比较简单,但是想实现鼠标拖拽线的效果基本不可能。要想实现拖拽效果首先要加入OnFrame事件来完成实时改变的操作,在通过修改对象的Geometry属性的来实现对线的重绘。

注意:请用IE内核浏览器查看运行结果(Result)。  经测试 运行无问题。DOME

/*
画线方案2-修改Geometry 属性 实现橡皮筋效果。
*/
function LoadFly() {
    var flyPath = "http://bcs.duapp.com/wordprees-bk/fly/wp0.FLY";
    sgworld.Project.Open(flyPath);
}

window.load = LoadFly();

function CreatePolyLine() {
    sgworld.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
    sgworld.AttachEvent("OnRButtonUp", EndPolyLine);
    sgworld.AttachEvent("OnFrame", DrawPolyLOnFrame);
    sgworld.Window.SetInputMode(1);
}

function EndPolyLine(Flags, X, Y) {
    sgworld.ProjectTree.DeleteItem(sgworld.ProjectTree.FindItem("线"));
    sgworld.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
    sgworld.DetachEvent("OnRButtonUp", EndPolyLine);
    sgworld.DetachEvent("OnFrame", DrawPolyLOnFrame);
    PolyLine = null;
    sgworld.Window.SetInputMode(0);
}

var PolyLine = null;

function DrawPolyLButtonDown(Flags, X, Y) {
    var linecolor = sgworld.Creator.CreateColor(255, 0, 0, 125);
    try {
        var cpos = sgworld.Window.pixelToWorld(X, Y);
        if (cpos == null) return false;
        var pos = cpos.Position;
        if (!PolyLine) {
            var geometry = sgworld.Creator.GeometryCreator.CreateLineStringGeometry([pos.X, pos.Y, 0, pos.X, pos.Y, 0])
            PolyLine = sgworld.Creator.CreatePolyline(geometry, linecolor, 2, 0, "线");
            PolyLine.Geometry.StartEdit();
        } else {
            PolyLine.Geometry.Points.AddPoint(pos.X, pos.Y, 0);
        }
    } catch (e) {
        alert(e.description);
    }
}

function DrawPolyLOnFrame() {
    var minfo = sgworld.Window.GetMouseInfo();
    var mpos = sgworld.Window.pixelToWorld(minfo.X, minfo.Y);
    if (mpos == null) return false;
    var pos = mpos.Position;
    try {
        if (PolyLine) {
            var lpoints = PolyLine.Geometry.Points;
            lpoints.Item(lpoints.count - 1).X = pos.X;
            lpoints.Item(lpoints.count - 1).Y = pos.Y;
            lpoints.Item(lpoints.count - 1).Z = 0;
        }
    } catch (e) {
        alert(e.description);
    }
}


你可能感兴趣的:(Skyline综合)