Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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;
            }
        }
Example #3
0
        /// <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;
            }
        }
Example #4
0
        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);
        }
Example #5
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;
        }
Example #6
0
        /// <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);
        }
Example #7
0
        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();
            }
        }
Example #8
0
        /// <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;
        }
Example #9
0
        /// <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();
        }