ThinkGeo.com    |     Documentation    |     Premium Support

How to prevent the user to drag polygon in EditOverlay

Hi



I want to prevent the user to drag a polygon in EditOverlay. I have implemented a CustomInteractiveEditOverlay (attached). In this I have set CanDrag = false and

DragControlPointsLayer.IsVisible = false.



It works almost. But when the polygon in the CustomInteractiveEditOverlay has a shape, where one of the vertices is near to the centroid of the polygon, then it is posible to drag the polygon even though the dragging-cursor isn’t displayed. 


Do you have any suggestions?


Best regards

Lars



CustomEditInteractiveOverlay.cs (2.58 KB)

Hi Lars,



I tested the codes but I didn’t reproduce your issue no matter how I play to draw a polygon and then edit it. Would you please send us your edit polygon for us? Just one should be enough to recreate it, you can send its wkt for us.



Waiting for your feedback.

Thanks,

Troy

Lars,



Maybe you can try to call the Clear method at first in the AddFeaturesToEditShapesLayer method, it will make sure all the possible editing vertexes are clear completely.


private void AddFeaturesToEditShapesLayer()
        {
            Clear();
            EditShapesLayer.FeatureSource.Open();
            //foreach (var fieldPolygonFeatureSourceColumn in MapSuiteUtil.FieldPolygonFeatureSourceColumns)
            //{
            //    EditShapesLayer.Columns.Add(fieldPolygonFeatureSourceColumn);
            //}
            EditShapesLayer.FeatureSource.Close();
 
            foreach (var selectedFeature in m_OriginalFeatures)
            {
                EditShapesLayer.InternalFeatures.Add(selectedFeature.Id, selectedFeature);
            }
            CalculateAllControlPoints();
        }

Thanks,

Troy

Hi Troy



Thanks for your reply. - Meanwhile I have found out that a way to solve the problem is to call CalculateVertexControlPoints() instead of CalculateAllControlPoints(). It seems that after calling CalculateAllControlPoints() you can drag the feature (polygon) (if you manage to make the mouse hit the invisible DragControlPoint) even if CanDrag and DragControlPointsLayer.IsVisible is set to false.



Calling Clear() was a good idea - Now I am also calling it in the  methods below. This made the editlayer work perfectly - also when shifting the projection of the map.



Thanks Again

Lars

 



public void ConvertToInternalProjection(Proj4Projection currentProjection)
{
    List<Feature> internalFeatures = EditShapesLayer.InternalFeatures.Select(currentProjection.ConvertToInternalProjection).ToList();
    Clear();
    foreach (var feature in internalFeatures)
    {
        EditShapesLayer.InternalFeatures.Add(feature.Id, feature);
    }
     
    internalFeatures = m_OriginalFeatures.Select(currentProjection.ConvertToInternalProjection).ToList();
    m_OriginalFeatures.Clear();
    foreach (var feature in internalFeatures)
    {
        m_OriginalFeatures.Add(feature);
    }
}
 
public void ConvertToExternalProjection(Proj4Projection currentProjection)
{
    List<Feature> externalFeatures = EditShapesLayer.InternalFeatures.Select(currentProjection.ConvertToExternalProjection).ToList();
    Clear();
    foreach (var feature in externalFeatures)
    {
        EditShapesLayer.InternalFeatures.Add(feature.Id, feature);
    }
    CalculateVertexControlPoints();
     
    externalFeatures = m_OriginalFeatures.Select(currentProjection.ConvertToExternalProjection).ToList();
    m_OriginalFeatures.Clear();
    foreach (var feature in externalFeatures)
    {
        m_OriginalFeatures.Add(feature);
    }
}

}



Hi Lars,



You are welcome and good to hear you also figure it out. Any other questions, don’t hesitate to let us know.



Thanks,



Troy