2017-01-26 7 views
0

J'ai le code suivant que je suis en train de lire lorsqu'un graphique est déplacé (la mise à l'échelle et la rotation utilisent un code similaire).Impossible d'ajouter une opération d'annulation/de restauration correcte pour déplacer/mettre à l'échelle/faire pivoter avec arcgis

//Obtaining the graphic before it is moved 
moveToolbar.on("graphic-move-start", function (evt) { 
oldGraphicMove = evt.graphic; 
}); 

//Updating the graphic on move end 
moveToolbar.on("graphic-move-stop", function (evt) { 

    //Creating the operation to add to the undomanager 
    var operation = new Update({ 
    featureLayer: evt.graphic._graphicsLayer, //The layer that will contain the modified graphic 
    preUpdatedGraphics: [oldGraphicMove], //The graphic before the changes are created 
    postUpdatedGraphics: [evt.graphic] //The graphic after the changes are made 
}); 

//Adding the undo/redo operation 
undoManager.add(operation); 
//Updating the graphic 
evt.graphic._graphicsLayer.applyEdits(null, [evt.graphic], null); 

});

Pour une raison inconnue, l'ancien graphique reste toujours égal au nouveau graphique. Après l'ajout de l'opération, il n'y a rien à annuler/rétablir car le graphique est marqué comme égal avant et après.

Je n'ai aucune idée de ce que je pourrais faire de mal, des indices à ce sujet?

+0

Pourriez-vous partager un échantillon chez JSBIN? Ce serait plus facile d'aider. Je suppose que moveToolbar est une couche graphique, mais plus d'informations serait bien. En passant, vous utilisez evt hors de la portée, n'est-ce pas? BTW: Je suppose que vous connaissez [cet exemple] (https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=graphics_undoredo), non? – hhkaos

+0

JSBIN? moveToolbar est une barre d'outils d'Esri, elle affecte la couche sur la carte en fonction des opérations assignées à la barre d'outils et de la couche assignée: moveToolbar.activate (esri.toolbars.Edit.MOVE | esri.toolbars.Edit.SCALE | esri.toolbars .Edit.ROTATE, tempMoveLayer.graphics [graphicNum]) Ouais, je le sais, et pour l'ajout, l'édition et la suppression de graphiques, je n'ai pas de problèmes aussi bien que pour annuler et refaire des mouvements de vertex. Le problème est avec le mouvement, l'échelle et la rotation – Maeglin77

Répondre

0

Apparemment, la variable oldGraphicMove au début de l'édition était remplacée par evt.graphic à la fin de l'édition. Cela a été résolu en créant un nouveau graphique avec les spécifications du graphique avant qu'il ne soit modifié plutôt que d'attribuer le graphique directement à la variable:

//Obtaining the graphic before it is scaled 
moveToolbar.on("scale-first-move", function (evt) { 
    oldGraphicScale = new esri.Graphic(evt.graphic.geometry,evt.graphic.symbol,evt.graphic.attributes); 
                }); 

//Updating the graphic on scale end 
moveToolbar.on("scale-stop", function (evt) { 

    newGraphicScale = new esri.Graphic(evt.graphic.geometry, evt.graphic.symbol, evt.graphic.attributes); 

    //Creating the operation to add to the undomanager 
    var operation = new Update({ 
     featureLayer: evt.graphic._graphicsLayer, //The layer that will contain the modified graphic 
     preUpdatedGraphics: [oldGraphicScale], //The graphic before the changes are created 
     postUpdatedGraphics: [newGraphicScale] //The graphic after the changes are made 
                 }); 

//Adding the undo/redo operation 
undoManager.add(operation); 

//Updating the graphic 
evt.graphic._graphicsLayer.applyEdits(null, [evt.graphic], null); 
                }); 

Il y a encore quelques problèmes avec défaisant/mouvement refaire les, mais cette méthode fonctionne pour défaire/refaire l'échelle et la rotation.