簡體   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