繁体   English   中英

Google Map API v3:为编辑的Polygon添加自定义撤消/重做功能

[英]Google map api v3: Adding custom undo/redo function for edited Polygon

我具有一项功能,用户可以在其中在Google地图上绘制多边形。 多边形完成后,他可以对其进行编辑,但不能添加新的多边形。 同样,一旦用户单击任何一个顶点,它就会删除该节点。 通常,在编辑多边形或任何形状时,它会显示默认的撤消按钮。 但就我而言,我已禁用了相同的功能,因为我需要使用自定义的“撤消”和“重做”按钮来执行相同的操作。 但是我不确定该怎么做。 谁能帮我这个忙吗?

我的理论:在完成多边形后,我设置事件insert_at,set_at并单击,在其中设置edits数组,以便可以跟踪所有编辑。 单击撤消按钮后,我将最后一个元素从edits数组中弹出,并将其添加到redo数组中,并将多边形路径设置为弹出元素的路径。 为了使这一点清楚,下面是代码:

google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
    drawingManager.setDrawingMode(null);
    myArea = polygon;
    myArea.setOptions({ editable: true});
    google.maps.event.addListener(polygon.getPath(), 'set_at', function(ind) {

        edits_arr.push(polygon);            
    });

    google.maps.event.addListener(polygon.getPath(), 'insert_at', function(ind) {

        edits_arr.push(polygon);    
    });

    google.maps.event.addListener(polygon, 'click', function(e) {
        polygon.getPath().removeAt(e.vertex);
        edits_arr.push(polygon);    
    });

});

撤消点击:

$('#undo').click(function(){
    if(edits_arr.length > 0){
        var temp = edits_arr.pop();
        redo_arr.push(temp);
        var pathArrayTemp = temp.getPath();
        myArea.setMap(null); 
        myArea.setPaths(pathArrayTemp);
        myArea.setMap(map);

    }   
});

但是,所有这些似乎都不起作用。 我知道我在这里错过了一些东西,但无法弄清楚什么.. :(

有人可以帮我吗?

您必须克隆redo_arr的路径

在您的redo_arr中,一个对象有许多链接


俄语:

Тыдолженклонироватьпутьвисториюсейчасвтвоёмredo_arrкучассылокнаодинитотжеобъект

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM