ThinkGeo.com    |     Documentation    |     Premium Support

Reset EditInteractiveOverlay so that OriginalEditingFeature() returns default value

Hello,


I am using OriginalEditingFeature() method of EditInteractiveOverlay to track the manipulation steps of the feature that is edited in EditInteractiveOverlay.


But if I end editing by setting all the CanReshape, CanRotate, etc. properties to false and call refresh() the OriginalEditingFeature()still returns a feature. Also clearing the EditShapesLayer and calling clearAllControlPoints() did not help.


How can I reset my EditOverlay so that OriginalEditingFeature()  method returns the default value - an invalid feature.


Thomas


 


 



Thomas, 
  
 I am sorry to say that in current version , the property OriginalEditingFeature is only protected Get, so we have no way to set it, just curious why you want to set it , is there any special reason for this? 
  
 Thanks. 
  
 Yale 


Yale, 
  
 when I create a new instance of EditInteractiveOverlay I get an invalid feature from OriginalEditingFeature property. While I do not make any changes to the feature in EditInteractiveOverlay I get this invalid feature. So I can check if the user has made any changes to the feature when the user leaves the edit mode and I can decide if I have to refresh the feature in the original layer or if I can drop it. While OriginalEditingFeature property return invalid feature I can drop it. 
  
 If the user decides to edit another feature I load it in the EditInteractiveOverlay and want to get an invalid featurefrom OriginalEditingFeature property until the user has made any changes to this new feature. But the OriginalEditingFeature property unfortunately return the feature the user edited before. 
  
 Thomas

Thomas,


Just let you know that the OriginalEditingFeature will only be set to Invalid value in the SetSelectedControlPoint API, so probably we could try to go around this problem in following way:
 

 

class MyEditInterativeOverlay : EditInteractiveOverlay
    {
        private bool isFeatureEdited;
 
        public bool IsFeatureEdited
        {
            get
            {
                return isFeatureEdited;
            }
        }
 
        protected override Feature SetSelectedControlPointCore(PointShape targetPointShape, double searchingTolerance)
        {
            Feature feature = base.SetSelectedControlPointCore(targetPointShape, searchingTolerance);
 
            // Judge the feature is Invalid
            if (OriginalEditingFeature.GetWellKnownBinary() == null)
            {
                isFeatureEdited = false;
            }
            else
            {
                isFeatureEdited = true;
            }
 
            return feature;
        }
    }

 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale
 

Hello, 
  
 your code did not work at all. The users first attempt to drag a control point calls the SetSelectedControlPointCore and the OriginalEditingFeature returns null. This mean the code above only sets the  isFeatureEdited  property to ‘true’ if the SetSelectedControlPointCore is called again. 
  
 But your information “OriginalEditingFeature will only be set to Invalid value in the SetSelectedControlPoint API” put me in the right way. 
 So I have implemented my own logic. 
  
 Thanks Thomas

Thomas, 
  
 I think Yale just put the part of code which is enough to show how to go around this problem, the rest of code need to write by yourself,  and I think you make it becuase you say from his information you implement your own logic. 
  
 I am glad that you can find the right way, and please let us know if you have more questions. 
  
 Thanks 
 James