/// <summary> /// Selects a polygon on the map /// </summary> /// <param name="p"></param> private void SelectPolygon(Polygon p) { ClearSelection(); p.Stroke = _selectedStrokeClr; p.Fill = _selecteFillClr; CurrentPolygon = p; CurrentPolygon.IsSelected = true; if (_readOnly) { return; } // Create rect markers for (var i = 0; i < p.Points.Count; i++) { var mBorders = new RectMarker(p.Points[i]) { Tag = i }; _polygonRects.Markers.Add(mBorders); } }
/// <summary> /// Occurs when the cursor leaves a Rectangle marker /// </summary> /// <param name="item"></param> private void Map_OnMarkerLeave(GMapMarker item) { if (IsDrawingPolygon) { return; } if (item is RectMarker marker) { marker.Pen.Color = Color.Blue; _currentRectMarker = null; } }
/// <summary> /// Occurs when the cursor moves over a Rectangle marker /// </summary> /// <param name="item"></param> private void Map_OnMarkerEnter(GMapMarker item) { if (IsDrawingPolygon) { return; } if (item is RectMarker marker && !_isMouseDown) { marker.Pen.Color = Color.Red; _currentRectMarker = marker; } }
private long inner_IdentifiedWriteXml(XmlWriter writer) { MARKERTYPE type = m_Marker_ref.p_Type; switch (type) { case MARKERTYPE.RECTANGLE: RectMarker rectMarker = (RectMarker)m_Marker_ref; rectMarker.WriteXml(writer); break; default: return(-2); } return(0); }
protected virtual void Dispose(bool isDisposing) { // 여러 번 dipose를 수행하지 않도록 한다. if (m_alreadyDisposed) { return; } if (isDisposing) { // 해야할 일: managed(GC가관리되는) 리소스를 해제한다. RectMarker rectMarker = (RectMarker)m_PicBoxObj.marker_ref; rectMarker.p_SizeConrects.Clear(); //rectMarker.p_SizeConrects = null; m_PicBoxObj = null; } // 해야할일: unmanaged(GC가 관리되지않는) 리소스를 해제한다. // disposed 플래그를 설정한다. m_alreadyDisposed = false; }
/// <summary> /// Gets called when a new polygon is about to be drawn on the GUI /// Aka. Draw mode start /// </summary> public void BeginDrawPolygon() { if (_readOnly) { return; } var points = new List <GMap.NET.PointLatLng> { _pointer.Position }; _currentDrawingPolygon = new Polygon(points, "New polygon") { IsHitTestVisible = true }; _polygons.Polygons.Add(_currentDrawingPolygon); IsDrawingPolygon = true; _currentNewRectMaker = new RectMarker(new GMap.NET.PointLatLng(0, 0)); _topLayer.Markers.Add(_currentNewRectMaker); }
public void ReadXml(XmlReader reader) { if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "OutLineMarkers") { m_Name = reader["Name"]; m_Width = double.Parse(reader["Width"]); m_Height = double.Parse(reader["Height"]); m_Top = double.Parse(reader["Top"]); m_Left = double.Parse(reader["Left"]); m_ImgHash = UInt32.Parse(reader["ImgHash"]); m_ImgFileName = reader["ImgFileName"]; if (reader.ReadToDescendant("Marker_ref")) { RectMarker marker = new RectMarker(); marker.ReadXml(reader); m_Marker_ref = marker; } /*LDH8282 사용안함 * if (reader.LocalName == "SizeConMakers") * { * //m_Tools * m_SizeConRects_ref.Clear(); * Direction key = Direction.None; * String strKey = null; * while (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "SizeConMakers") * { * strKey = reader.GetAttribute("Key"); * key = inner_GetDirectionStrToEnum(strKey); * SizeConRectangleItem evt = new SizeConRectangleItem(); * evt.ReadXml(reader); * m_SizeConRects_ref.Add(key, evt);//<- 여기서 터짐 * } * }*/ reader.Read(); } }
/// <summary> /// Clears the selected polygon on the map /// </summary> private void ClearSelection() { if (CurrentPolygon == null) { return; } var polygonColor = ColorTranslator.FromHtml(((PolyZone)CurrentPolygon.Tag).Color); CurrentPolygon.Stroke = new Pen(polygonColor) { Width = 2 }; CurrentPolygon.Fill = new SolidBrush(Color.FromArgb(ZoneOpacity, polygonColor)); CurrentPolygon.IsSelected = false; _currentRectMarker = null; // Clear rect markers _polygonRects.Markers.Clear(); CurrentPolygon = null; }
/// <summary> /// Gets called when a new polygon has been drawn or discarded /// Aka. Draw mode end /// <param name="save">Indicates whether to save or discard the current drawing polygon</param> /// </summary> private void EndDrawPolygonAsync(bool save) { IsDrawingPolygon = false; if (save && _currentDrawingPolygon.LocalPoints.Count - 1 > 1 && _currentDrawingPolygon.GetArea(true) > 0d) { // Remove "ghost" point marker _currentDrawingPolygon.Points.Remove(_currentNewRectMaker.Position); UpdatePolygonLocalPosition(_currentDrawingPolygon); var newZone = new PolyZone { Geometry = new List <Geometry>(), Id = "", Zoneid = "", ServiceNa = "Service provider", Description = "New zone", Timetable = "", Color = ColorTranslator.ToHtml((_currentDrawingPolygon.Fill as SolidBrush)?.Color ?? Color.Black) }; var editZoneForm = new EditZoneForm(newZone); if (editZoneForm.ShowDialog() == DialogResult.OK) { newZone = editZoneForm.GetZone(); newZone.Geometry.AddRange( _currentDrawingPolygon.Points.Select(x => x.ToGeometry(0)) ); var zoneSeriliazed = JsonConvert.SerializeObject(newZone, Converter.Settings); Client.Instance.Send(new InsertZoneReq() { Zone = zoneSeriliazed }); StartWaiting(); Client.Instance.OnZoneInsertAck += (ack) => { newZone.Id = ack.ZoneId.ToString(); // Set newly inserted zone's point ids for (var i = 0; i < newZone.Geometry.Count; i++) { newZone.Geometry[i].Id = ack.PointIds[i]; } StopWaiting(); }; _currentDrawingPolygon.Tag = newZone; _dtoObject.Zones.Add(newZone); } else { _polygons.Polygons.Remove(_currentDrawingPolygon); } Map_OnPolygonClick(_polygons.Polygons.FirstOrDefault(polygon => polygon == _currentDrawingPolygon), null); } else { _polygons.Polygons.Remove(_currentDrawingPolygon); } OnDrawPolygonEnd?.Invoke(_currentDrawingPolygon); _currentDrawingPolygon = null; _topLayer.Markers.Remove(_currentNewRectMaker); _currentNewRectMaker = null; UpdateVerticlesCount(); }