示例#1
0
        public static void GetLocation(Wire wire1, Wire wire2, out PointEx start, out PointEx end)
        {
            var line1 = wire1.Line as ILine;
            var start1 = wire1.Start;
            var end1 = wire1.End;
            var line2 = wire2.Line as ILine;
            var start2 = wire2.Start;
            var end2 = wire2.End;

            start = null;
            end = null;

            if (start1 != null)
            {
                var margin = line1.GetMargin();
                start = new PointEx(margin.Left, margin.Top);
            }

            if (end1 != null)
                end = new PointEx(line1.GetX2(), line1.GetY2());

            if (start2 != null)
            {
                var margin = line2.GetMargin();
                start = new PointEx(margin.Left,  margin.Top);
            }

            if (end2 != null)
                end = new PointEx(line2.GetX2(), line2.GetY2());
        }
        private void EditPaste_Click(object sender, RoutedEventArgs e)
        {
            var point = new PointEx(Editor.Context.RightClick.X, Editor.Context.RightClick.Y);

            Editor.Paste(point, true);
            Editor.Context.SkipLeftClick = false;
        }
示例#3
0
        public static void GetLocation(Wire wire1, Wire wire2, out PointEx start, out PointEx end)
        {
            var line1  = wire1.Line as ILine;
            var start1 = wire1.Start;
            var end1   = wire1.End;
            var line2  = wire2.Line as ILine;
            var start2 = wire2.Start;
            var end2   = wire2.End;

            start = null;
            end   = null;

            if (start1 != null)
            {
                var margin = line1.GetMargin();
                start = new PointEx(margin.Left, margin.Top);
            }

            if (end1 != null)
            {
                end = new PointEx(line1.GetX2(), line1.GetY2());
            }

            if (start2 != null)
            {
                var margin = line2.GetMargin();
                start = new PointEx(margin.Left, margin.Top);
            }

            if (end2 != null)
            {
                end = new PointEx(line2.GetX2(), line2.GetY2());
            }
        }
示例#4
0
        private void InsertAndGate(ICanvas canvas, PointEx point)
        {
            Editor.Snapshot(canvas, true);

            var element = Insert.AndGate(canvas,
                                         point != null ? point : InsertPointGate, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);

            Editor.SelectOneElement(element, true);
        }
        public YuGiStructure()
        {
            CardSize = new PointEx(50, 72);

            CardSize.PropertyChanged         += ValueChanged;
            WindowSizeOffset.PropertyChanged += ValueChanged;
            DuelField.PropertyChanged        += ValueChanged;
            DeckEditor.PropertyChanged       += ValueChanged;
        }
示例#6
0
        /// <summary>
        /// Saves path to the OSMDB
        /// </summary>
        /// <param name="path">The list of polylines that represent matched path</param>
        /// <returns>OSMDB with path converted to the OSM format</returns>
        public OSMDB SaveToOSM(IList <Polyline <IPointGeo> > path)
        {
            _db        = new OSMDB();
            _dbCounter = -1;

            IPointGeo lastPoint = null;
            OSMNode   node      = null;

            foreach (var line in path)
            {
                if (line.Nodes.Count == 0)
                {
                    continue;
                }

                if (line.Nodes.Count == 1)
                {
                    throw new Exception();
                }

                OSMWay way = new OSMWay(_dbCounter--);
                way.Tags.Add(new OSMTag("way-id", ((PolylineID)line).WayID.ToString()));
                way.Tags.Add(new OSMTag("order", (_db.Ways.Count + 1).ToString()));
                _db.Ways.Add(way);
                foreach (var point in line.Nodes)
                {
                    if (point != lastPoint)
                    {
                        lastPoint = point;
                        PointEx pt = (PointEx)point;

                        node = new OSMNode(_dbCounter--, pt.Latitude, pt.Longitude);
                        if (pt.NodeID != 0)
                        {
                            node.Tags.Add(new OSMTag("node-id", pt.NodeID.ToString()));
                        }
                        if (pt.Time != DateTime.MinValue)
                        {
                            node.Tags.Add(new OSMTag("time", pt.Time.ToString()));
                        }
                        if (pt.Crossroad)
                        {
                            node.Tags.Add(new OSMTag("crossroad", "yes"));
                        }

                        _db.Nodes.Add(node);
                    }
                    way.Nodes.Add(node.ID);
                }
            }

            return(_db);
        }
        private void DiagramCanvas_Drop(object sender, DragEventArgs e)
        {
            // Tag
            if (e.Data.GetDataPresent("Tag"))
            {
                var tag = e.Data.GetData("Tag") as Tag;
                if (tag != null)
                {
                    var point       = e.GetPosition(DiagramCanvas);
                    var insertPoint = new PointEx(point.X, point.Y);
                    var canvas      = Editor.Context.CurrentCanvas;
                    var type        = IsTagInputOrOutput(canvas, insertPoint);

                    if (type == TagDragAndDropType.Input)
                    {
                        Editor.Snapshot(canvas, true);

                        var element = Insert.Input(DiagramCanvas, insertPoint, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);
                        element.SetData(tag);

                        e.Handled = true;
                    }
                    else if (type == TagDragAndDropType.Output)
                    {
                        Editor.Snapshot(canvas, true);

                        var element = Insert.Output(DiagramCanvas, insertPoint, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);
                        element.SetData(tag);

                        e.Handled = true;
                    }
                }
            }

            // Table
            else if (e.Data.GetDataPresent("Table"))
            {
                var table = e.Data.GetData("Table") as DiagramTable;
                if (table != null)
                {
                    var canvas = Editor.Context.CurrentCanvas;

                    Editor.Snapshot(canvas, true);

                    canvas.SetData(table);

                    // TODO:
                    TableGrid.SetData(this, table);

                    e.Handled = true;
                }
            }
        }
        private void CreateAdorner(Canvas canvas, PointEx origin, PointEx point)
        {
            Adorner                     = new SelectionAdorner(canvas);
            Adorner.Zoom                = GetZoomScaleTransform().ScaleX;
            Adorner.SelectionOrigin     = new Point(origin.X, origin.Y);
            Adorner.SelectionRect       = new RectEx(origin.X, origin.Y, point.X, point.Y);
            Adorner.SnapsToDevicePixels = false;

            RenderOptions.SetEdgeMode(Adorner, EdgeMode.Aliased);
            AdornerLayer.GetAdornerLayer(canvas).Add(Adorner);
            Adorner.InvalidateVisual();
        }
示例#9
0
        private void btnRegret_Click(object sender, EventArgs e)
        {
            if (regret.Count == 0)
            {
                return;
            }
            PointEx p = regret.Pop();

            board[p.x, p.y] = 0;
            intStatus       = p.state;
            DrawBoard(pic, false);
        }
        private void InsertOrGate_Click(object sender, RoutedEventArgs e)
        {
            var canvas = Editor.Context.CurrentCanvas;

            Editor.Snapshot(canvas, true);

            var point = new PointEx(Editor.Context.RightClick.X, Editor.Context.RightClick.Y);

            Insert.OrGate(canvas, point, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);

            Editor.Context.LastInsert    = Constants.TagElementOrGate;
            Editor.Context.SkipLeftClick = false;
        }
示例#11
0
        public WndEmojiInputer()
        {
            _showingIndex = -1;
            InitializeComponent();
            Point point = new Point(30.0, 30.0);

            point           = PointEx.xConvertPhisicalToLogical(point);
            rect.Width      = point.X;
            rect.Height     = point.Y;
            rect.RadiusX    = 5.0;
            rect.RadiusY    = 5.0;
            rect.Stroke     = Brushes.Gray;
            tblk.Background = Brushes.Wheat;
        }
        /// <summary>
        /// 查找控件内指定坐标的子控件,按 Z 轴可见序查找
        /// </summary>
        /// <param name="control">控件</param>
        /// <param name="p">控件坐标系内的点</param>
        /// <returns>查找到返回子控件,否则返回 null</returns>
        internal static UIControl FindUIChildInternal(IUIControl control, Point p)
        {
            UIControl child;

            for (int i = control.UIControls.Count - 1; i >= 0; i--)//按 Z 轴顺序遍历
            {
                child = control.UIControls[i];
                if (child.Visible && child.Bounds.Contains(p) && (child.Region == null || child.Region.IsVisible(PointEx.Offset(p, -child.Left, -child.Top))))
                {
                    return(FindUIChildInternal(child, PointEx.Offset(p, -child.Left, -child.Top)) ?? child);
                }
            }
            return(null);
        }
示例#13
0
        /// <summary>
        /// Gets PointEx from the internal storage or creates a new one (for given point)
        /// </summary>
        /// <param name="point"></param>
        /// <returns></returns>
        PointEx GetOrCreatePointEx(IPointGeo point, DateTime time)
        {
            if (_points.ContainsKey(point))
            {
                if (_points[point].Time == DateTime.MinValue || _points[point].Time == time)
                {
                    _points[point].Time = time;
                    return(_points[point]);
                }
                else
                {
                    PointEx result = new PointEx()
                    {
                        Latitude = point.Latitude, Longitude = point.Longitude, Elevation = point.Elevation, Time = time
                    };
                    _points[point] = result;

                    OSMNode pointOSM = point as OSMNode;
                    if (pointOSM != null)
                    {
                        result.NodeID = pointOSM.ID;
                        if (pointOSM.Tags.ContainsTag("crossroad"))
                        {
                            result.Crossroad = true;
                        }
                    }
                    return(result);
                }
            }
            else
            {
                PointEx result = new PointEx()
                {
                    Latitude = point.Latitude, Longitude = point.Longitude, Elevation = point.Elevation, Time = time
                };
                _points.Add(point, result);

                OSMNode pointOSM = point as OSMNode;
                if (pointOSM != null)
                {
                    result.NodeID = pointOSM.ID;
                    if (pointOSM.Tags.ContainsTag("crossroad"))
                    {
                        result.Crossroad = true;
                    }
                }
                return(result);
            }
        }
示例#14
0
        private static void TryAddVertex(List <PointEx> points, Vector3 vertex, int index)
        {
            foreach (PointEx point in points)
            {
                if (IsSameVector(point.Vertex, vertex))
                {
                    point.indices.Add(index);
                    return;
                }
            }
            PointEx pointEx = new PointEx();

            pointEx.Vertex = vertex;
            pointEx.indices.Add(index);
            points.Add(pointEx);
        }
示例#15
0
        private PointEx GetInsertionPoint()
        {
            PointEx insertionPoint = null;

            var    relativeTo = DiagramControl.DiagramCanvas;
            var    point      = Mouse.GetPosition(relativeTo);
            double x          = point.X;
            double y          = point.Y;
            double width      = relativeTo.Width;
            double height     = relativeTo.Height;

            if (x >= 0.0 && x <= width &&
                y >= 0.0 && y <= height)
            {
                insertionPoint = new PointEx(x, y);
            }

            return(insertionPoint);
        }
示例#16
0
 private void DrawLine(MapPointEx[] arrPoint)
 {
     if (arrPoint != null && arrPoint.Length > 1)
     {
         mapLayer.DrawPolyLine(arrPoint.ToList(), new I_GS_MapBase.Portal.SymbolElement("track")
         {
             ControlTemplate = Obj.screenMap.MainMap.Resources["TrackLine"],
             DataSources = new List<KeyValuePair<string, object>>{ 
                 new KeyValuePair<string,object>("Visibled","Visible"),
             }                   
         });
         ClientUtile client = ClientUtile.Create();
         double angle = client.GetAzimuthAngle(arrPoint[1].X, arrPoint[1].Y, arrPoint[0].X, arrPoint[0].Y);
         PointEx pNew = client.GetRelativePoint(new PointEx(arrPoint[1].X, arrPoint[1].Y),angle,2);
         mapLayer.DrawArrow(new List<MapPointEx>() { Obj.screenMap.GetMapPointEx(pNew.X,pNew.Y), arrPoint[1] }, new I_GS_MapBase.Portal.SymbolElement("track")
         {
             DataSources = new List<KeyValuePair<string, object>>{ 
                 new KeyValuePair<string,object>(GraphicStyle.ArrowSize.ToString(),"10"),
                 new KeyValuePair<string,object>(GraphicStyle.ArrowColor.ToString(),"Green"),
             }
         });
     }
 }
示例#17
0
        /// <summary>
        /// Creates a new Polyline as part of the result and assigns times for the start and end points
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="fromTime"></param>
        /// <param name="totime"></param>
        /// <param name="road"></param>
        /// <returns></returns>
        Polyline <IPointGeo> CreateLine(IPointGeo from, IPointGeo to, DateTime fromTime, DateTime totime, ConnectionGeometry road, long Id)
        {
            Polyline <IPointGeo> line = new Polyline <IPointGeo>()
            {
                WayID = road.WayID, Id = Id
            };

            PointEx toAdd = GetOrCreatePointEx(from, fromTime);

            line.Nodes.Add(toAdd);

            var points = Topology.GetNodesBetweenPoints(from, to, road);

            foreach (var point in points)
            {
                line.Nodes.Add(GetOrCreatePointEx(point, DateTime.MinValue));
            }

            toAdd = GetOrCreatePointEx(to, totime);
            line.Nodes.Add(toAdd);

            return(line);
        }
        private void InsertOutput_Click(object sender, RoutedEventArgs e)
        {
            var canvas = Editor.Context.CurrentCanvas;

            Editor.Snapshot(canvas, true);

            var point = new PointEx(Editor.Context.RightClick.X, Editor.Context.RightClick.Y);
            Insert.Output(canvas, point, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);

            Editor.Context.LastInsert = Constants.TagElementOutput;
            Editor.Context.SkipLeftClick = false;
        }
 private void EditPaste_Click(object sender, RoutedEventArgs e)
 {
     var point = new PointEx(Editor.Context.RightClick.X, Editor.Context.RightClick.Y);
     Editor.Paste(point, true);
     Editor.Context.SkipLeftClick = false;
 }
        private void DiagramCanvas_Drop(object sender, DragEventArgs e)
        {
            // Tag
            if (e.Data.GetDataPresent("Tag"))
            {
                var tag = e.Data.GetData("Tag") as Tag;
                if (tag != null)
                {
                    var point = e.GetPosition(DiagramCanvas);
                    var insertPoint = new PointEx(point.X, point.Y);
                    var canvas = Editor.Context.CurrentCanvas;
                    var type = IsTagInputOrOutput(canvas, insertPoint);

                    if (type == TagDragAndDropType.Input)
                    {
                        Editor.Snapshot(canvas, true);

                        var element = Insert.Input(DiagramCanvas, insertPoint, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);
                        element.SetData(tag);

                        e.Handled = true;
                    }
                    else if (type == TagDragAndDropType.Output)
                    {
                        Editor.Snapshot(canvas, true);

                        var element = Insert.Output(DiagramCanvas, insertPoint, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);
                        element.SetData(tag);

                        e.Handled = true;
                    }
                }
            }

            // Table
            else if (e.Data.GetDataPresent("Table"))
            {
                var table = e.Data.GetData("Table") as DiagramTable;
                if (table != null)
                {
                    var canvas = Editor.Context.CurrentCanvas;

                    Editor.Snapshot(canvas, true);

                    canvas.SetData(table);

                    // TODO:
                    TableGrid.SetData(this, table);

                    e.Handled = true;
                }
            }
        }
        private void CreateAdorner(Canvas canvas, PointEx origin, PointEx point)
        {
            Adorner = new SelectionAdorner(canvas);
            Adorner.Zoom = GetZoomScaleTransform().ScaleX;
            Adorner.SelectionOrigin = new Point(origin.X, origin.Y);
            Adorner.SelectionRect = new RectEx(origin.X, origin.Y, point.X, point.Y);
            Adorner.SnapsToDevicePixels = false;

            RenderOptions.SetEdgeMode(Adorner, EdgeMode.Aliased);
            AdornerLayer.GetAdornerLayer(canvas).Add(Adorner);
            Adorner.InvalidateVisual();
        }
示例#22
0
        /// <summary>
        /// 根据屏幕范围获得网格信息
        /// </summary>
        /// <param name="p_leftTopPoint"></param>
        /// <param name="p_rightBottomPoint"></param>
        /// <param name="p_intervalValue"></param>
        /// <param name="p_fixedPoint"></param>
        /// <returns>返回大网格范围,和经纬度的网格步长,存储格式double[4],double[2]
        public List <double[]> getJHParam(double[] p_leftTopPoint, double[] p_rightBottomPoint, double p_intervalValue, double[] p_fixedPoint = null)
        {
            if (p_fixedPoint != null)
            {
                FixedPoint = new double[] { p_fixedPoint[0], p_fixedPoint[1] };
            }
            if (FixedPoint == null)
            {
                FixedPoint = new double[] { p_leftTopPoint[0], p_leftTopPoint[1] };
            }
            PointEx pBase = Utils.MapFun.MainMap.MapToScreen(Utils.MapFun.MainMap.MapPointFactory.Create(FixedPoint[0], FixedPoint[1]));

            double xInterval = 0, yInterval = 0;

            PointEx    pBase1 = new PointEx(pBase.X + p_intervalValue, pBase.Y);
            MapPointEx p1     = Utils.MapFun.MainMap.ScreenToMap(pBase1);

            xInterval = Math.Abs(p1.X - FixedPoint[0]);

            PointEx    pBase2 = new PointEx(pBase.X, pBase.Y + p_intervalValue);
            MapPointEx p2     = Utils.MapFun.MainMap.ScreenToMap(pBase2);

            yInterval = Math.Abs(p2.Y - FixedPoint[1]);

            double x1 = FixedPoint[0];

            if (x1 > p_leftTopPoint[0])
            {
                while (x1 > p_leftTopPoint[0])
                {
                    x1 -= xInterval;
                }
            }
            else
            {
                while (x1 < p_leftTopPoint[0])
                {
                    x1 += xInterval;
                }
            }
            int    cc = 0;
            double y1 = FixedPoint[1];

            if (y1 > p_leftTopPoint[1])
            {
                while (y1 > p_leftTopPoint[1])
                {
                    y1 -= yInterval;

                    cc++;
                    if (cc == 4)
                    {
                        cc = 0;
                    }
                }
            }
            else
            {
                cc = 4;
                while (y1 < p_leftTopPoint[1])
                {
                    y1 += yInterval;
                    cc--;
                    if (cc < 0)
                    {
                        cc = 4;
                    }
                }
            }
            if (cc == 4)
            {
                cc = 0;
            }

            double x2 = FixedPoint[0];

            if (x2 > p_rightBottomPoint[0])
            {
                while (x2 > p_rightBottomPoint[0])
                {
                    x2 -= xInterval;
                }
            }
            else
            {
                while (x2 < p_rightBottomPoint[0])
                {
                    x2 += xInterval;
                }
            }
            double loOffset = Math.Abs(((FixedPoint[0] - x2) % (xInterval / 3)) * (xInterval / 3));


            double y2 = FixedPoint[1];

            if (y2 > p_rightBottomPoint[1])
            {
                while (y2 > p_rightBottomPoint[1])
                {
                    y2 -= yInterval;
                }
            }
            else
            {
                while (y2 < p_rightBottomPoint[1])
                {
                    y2 += yInterval;
                }
            }
            List <double[]> lst = new List <double[]>();

            double[] xy2 = new double[4] {
                x1, y1, x2, y2
            };
            lst.Add(xy2);//存储范围坐标

            double[] wh = new double[2] {
                xInterval, yInterval
            };
            lst.Add(wh);//存储经纬度步长,单位度

            double[] firstOffsetIndex = new double[] { cc, loOffset };
            lst.Add(firstOffsetIndex);
            return(lst);
        }
        public void ReadXml(XmlReader reader)
        {
            if (reader.IsEmptyElement)
            {
                reader.Read();
                return;
            }

            XmlSerializer keySerializer   = null;
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
            Type          keyType         = typeof(TKey);
            bool          isFlatKey       = (keyType.FullName == "System.String" || keyType.FullName == "System.Drawing.Point" || keyType.IsEnum);

            if (!isFlatKey)
            {
                keySerializer = new XmlSerializer(typeof(TKey));
            }

            reader.Read();
            while (reader.ReadToNextSibling(this.ItemNodeName))
            {
                TKey   key;
                TValue value;
                if (isFlatKey)
                {
                    if (keyType.FullName == "System.String")
                    {
                        key = (TKey)(object)reader.GetAttribute(this.KeyNodeName);
                    }
                    else if (keyType.FullName == "System.Drawing.Point")
                    {
                        key = (TKey)(object)PointEx.Parse(reader.GetAttribute(this.KeyNodeName));
                    }
                    else if (keyType.IsEnum)
                    {
                        string keyRaw = reader.GetAttribute(this.KeyNodeName);
                        if (keyRaw == null)
                        {
                            throw new FormatException(
                                      string.Format("The XML-Attribute \"{0}\" is missing on element \"{1}\".", this.KeyNodeName, reader.Name)
                                      );
                        }

                        key = (TKey)Enum.Parse(keyType, keyRaw);
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }

                    reader.ReadStartElement(this.ItemNodeName);
                    value = (TValue)valueSerializer.Deserialize(reader);
                }
                else
                {
                    reader.ReadStartElement(this.ItemNodeName);

                    reader.ReadStartElement(this.KeyNodeName);
                    key = (TKey)keySerializer.Deserialize(reader);
                    reader.ReadEndElement();

                    reader.ReadStartElement(this.ValueNodeName);
                    value = (TValue)valueSerializer.Deserialize(reader);
                    reader.ReadEndElement();
                }
                reader.ReadEndElement();

                this.Add(key, value);
            }

            reader.ReadEndElement();
        }
        private PointEx GetInsertionPoint()
        {
            PointEx insertionPoint = null;

            var relativeTo = DiagramControl.DiagramCanvas;
            var point = Mouse.GetPosition(relativeTo);
            double x = point.X;
            double y = point.Y;
            double width = relativeTo.Width;
            double height = relativeTo.Height;

            if (x >= 0.0 && x <= width &&
                y >= 0.0 && y <= height)
            {
                insertionPoint = new PointEx(x, y);
            }

            return insertionPoint;
        }
        private void InsertOutput(ICanvas canvas, PointEx point)
        {
            Editor.Snapshot(canvas, true);

            var element = Insert.Output(canvas,
                point != null ? point : InsertPointOutput, Editor.Context.DiagramCreator, Editor.Context.EnableSnap);

            Editor.SelectOneElement(element, true);
        }