Jake,
Thanks for your reporting!
I have to say that in order to implement this functionality, you have to wait next public release or ask our support for a temporary version(3.0.405) with a bug fixed.
Then you can use following code to see its effect. If use the last public release , it will not compile for the ControlPointType property in the EditInteractiveOverlay are not exposed to public.
private void Form1_Load(object sender, EventArgs e)
{
winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
ShapeFileFeatureLayer austinStreet = new ShapeFileFeatureLayer(@"..\..\SampleData\Countries02.shp");
austinStreet.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
austinStreet.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay staticOverlay = new LayerOverlay();
staticOverlay.Layers.Add("austin", austinStreet);
winformsMap1.Overlays.Add(staticOverlay);
austinStreet.Open();
winformsMap1.CurrentExtent = new RectangleShape(-143.4, 109.3, 116.7, -76.3);
austinStreet.Close();
winformsMap1.EditOverlay = new CustomDragEditInteractiveOverlay();
winformsMap1.EditOverlay.CanAddVertex = false;
winformsMap1.EditOverlay.CanRemoveVertex = false;
winformsMap1.EditOverlay.CanReshape = false;
winformsMap1.EditOverlay.CanResize = false;
winformsMap1.EditOverlay.CanRotate = false;
winformsMap1.EditOverlay.DragControlPointsLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle();
InMemoryFeatureLayer shapeLayer = new InMemoryFeatureLayer();
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Collection<Vertex> vertexes = new Collection<Vertex>();
vertexes.Add(new Vertex(150, 150));
vertexes.Add(new Vertex(150, 100));
vertexes.Add(new Vertex(170, 100));
vertexes.Add(new Vertex(150, 150));
RingShape outRing = new RingShape(vertexes);
PolygonShape polyGon = new PolygonShape(outRing);
Feature polygonFeature = new Feature(polyGon);
winformsMap1.EditOverlay.EditLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
winformsMap1.EditOverlay.EditLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
winformsMap1.EditOverlay.Lock.EnterWriteLock();
try
{
winformsMap1.EditOverlay.EditLayer.InternalFeatures.Add(polygonFeature);
winformsMap1.EditOverlay.CalculateAllControlPoints();
}
finally
{
winformsMap1.EditOverlay.Lock.ExitWriteLock();
}
winformsMap1.Refresh();
}
public class CustomDragEditInteractiveOverlay : EditInteractiveOverlay
{
public CustomDragEditInteractiveOverlay() : base()
{ }
protected override Feature SetSelectedControlPointCore(PointShape targetPointShape, double searchingTolerance)
{
foreach (var item in EditShapesLayer.InternalFeatures)
{
// Check if the point user click is in the EditOverlay,and select the first feature to move
if (item.GetShape().Contains(targetPointShape))
{
ControlPointType = ControlPointType.Drag;
return new Feature(targetPointShape.GetWellKnownBinary(), item.Id);
}
}
return new Feature();
}
}
Any more questions please feel free to let me know.
Thanks.
Yale