ThinkGeo.com    |     Documentation    |     Premium Support

Missile moving on a map

Hi,


(see the attachement)


I need to do something specific but I don't know exactly if it's possible to do this and how to do this.


I tried to use the "dragged point style"  sample to do this . I can draw the first line but that's all


Can you help me ?


 



Bezier.pdf (190 KB)

Jerome, 
  
 Thanks for using MapSuite and joining the forum! 
  
 MapSuite doesn’t have the native support for Bezier but you can implement it by yourself. Generally you need: 
  
 First, draw the 2 lines on the map, please check HowDoI Sample->Editing Feature Layers->Track And Edit Shapes to see how to implement it.   
  
 Second, draw the Bezier line on the map. You can generate the Bezier line, get every point of it and create a lineShape, and draw that lineshape out by adding it to an InMemoryFeatureLayer.  
  
 Third, whenever changing the posiition of the 2 lines, regenerate the Bezier line and redraw it on the map.  
  
 Hope that helps. 
  
 Thanks. 
  
 James

hi James 



thank you for your help. The 2 first points are easy.


 



winformsMap1.MapUnit = GeographyUnit.DecimalDegree;

winformsMap1.CurrentExtent = new RectangleShape(0, 100, 100, 0);



InMemoryFeatureLayer inMemoryLayer = new InMemoryFeatureLayer();

inMemoryLayer.InternalFeatures.Add("Line1", new Feature(BaseShape.CreateShapeFromWellKnownData("LINESTRING(60 60, 70 70)")));

inMemoryLayer.InternalFeatures.Add("Line2", new Feature(BaseShape.CreateShapeFromWellKnownData("LINESTRING(85 60,95 80)")));



inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = GeoColor.FromArgb(100, GeoColor.StandardColors.RoyalBlue);

inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Blue;

inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen = new GeoPen(GeoColor.FromArgb(200, GeoColor.StandardColors.Red), 5);

inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolPen = new GeoPen(GeoColor.FromArgb(255, GeoColor.StandardColors.Green), 8);

inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



LayerOverlay staticOverlay = new LayerOverlay();

staticOverlay.Layers.Add("InMemoryFeatureLayer", inMemoryLayer);

winformsMap1.Overlays.Add("InMemoryOverlay", staticOverlay);



winformsMap1.EditOverlay.CanRemoveVertex = false;

winformsMap1.EditOverlay.CanRotate = false;

winformsMap1.EditOverlay.CanResize = false;

winformsMap1.EditOverlay.CanDrag = false;

winformsMap1.EditOverlay.CanAddVertex = false;



staticOverlay.Layers.Clear();

winformsMap1.Refresh(new Overlay[] { winformsMap1.Overlays["InMemoryOverlay"]});



foreach (Feature myfeature in inMemoryLayer.InternalFeatures)

{

  winformsMap1.EditOverlay.EditShapesLayer.InternalFeatures.Add(myfeature);

}

winformsMap1.EditOverlay.CalculateAllControlPoints();

   



winformsMap1.Refresh(new Overlay[] { winformsMap1.EditOverlay });



 






For the third one, I'll try tomorrow but I don't know yet how to know which point has moved. I have 2 fixed point in my curve and the curve is calculate with the 2 other points. Maybe with mouseup/down and mousemove...



Jerome, 
  
 You don’t have to handle MouseUp/MouseDown/MouseMove events yourself, instead you can simply use EditOverlay’s VertexMoved event, which is raised after the control point is moved. The information of the vertex is also passed as MovedVertex property within the event argument. 
  
 Thanks. 
  
 James