Exemple #1
0
        public VirtualSchemaContainer()
        {
            //    InitializeComponent();

            scroller = new ScrollViewer();
            scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
            scroller.VerticalScrollBarVisibility   = ScrollBarVisibility.Visible;
            scroller.CanContentScroll = true;
            Child            = scroller;
            grid             = new VirtualCanvas();
            scroller.Content = grid;

            grid.SmallScrollIncrement = new Size(_tileWidth + _tileMargin, _tileHeight + _tileMargin);
            //Scroller.Content = grid;
            object v = scroller.GetValue(ScrollViewer.CanContentScrollProperty);

            Canvas target = grid.ContentCanvas;

            zoom     = new MapZoom(target);
            pan      = new Pan(target, zoom);
            rectZoom = new RectangleSelectionGesture(target, zoom, System.Windows.Input.ModifierKeys.Control);
            rectZoom.ZoomSelection = true;
            autoScroll             = new AutoScroll(target, zoom);
            zoom.ZoomChanged      += new EventHandler(OnZoomChanged);

            grid.VisualsChanged += new EventHandler <VisualChangeEventArgs>(OnVisualsChanged);
            //ZoomSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(OnZoomSliderValueChanged);

            grid.Scale.Changed     += new EventHandler(OnScaleChanged);
            grid.Translate.Changed += new EventHandler(OnScaleChanged);

            grid.Background = new SolidColorBrush(Color.FromRgb(0xd0, 0xd0, 0xd0));
            grid.ContentCanvas.Background = Brushes.White;
        }
Exemple #2
0
        private void Init()
        {
            if (Document.DocumentMode == DocumentMode.Auto)
            {
                List <Node> nodes = NodeFactory.CreateNodes(30);
                ContentControl.PopulateNodes(nodes);
                LinkFactory.Nodes = nodes;
                ContentControl.PopulateLinks(LinkFactory.CreateLinks(60));
            }

            Canvas target = ContentControl.ContentCanvas;

            zoom     = new MapZoom(target);
            pan      = new Pan(target, zoom);
            rectZoom = new RectangleSelectionGesture(target, zoom, ModifierKeys.Control);
            rectZoom.ZoomSelection = true;
            autoScroll             = new AutoScroll(target, zoom);
            zoom.ZoomChanged      += new EventHandler(OnZoomChanged);

            ContentControl.VisualsChanged += new EventHandler <VisualChangeEventArgs>(OnVisualsChanged);
            //ZoomSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(OnZoomSliderValueChanged);

            ContentControl.Scale.Changed     += new EventHandler(OnScaleChanged);
            ContentControl.Translate.Changed += new EventHandler(OnScaleChanged);

            //ContentControl.Background = new SolidColorBrush(Color.FromRgb(0xd0, 0xd0, 0xd0));
            ContentControl.Background = new SolidColorBrush(Colors.White);
            ContentControl.ContentCanvas.Background = Brushes.White;
            Document.Nodes = ContentControl.Nodes;
            Document.Links = ContentControl.Links;
        }
Exemple #3
0
 /// <summary>
 /// Construct new AutoScroll object that will scroll the given target object within it's container
 /// by attaching to the mouse events of the container.
 /// </summary>
 /// <param name="target">The target object to scroll</param>
 /// <param name="zoom">The master MapZoom object that manages the actual render transform</param>
 public AutoScroll(FrameworkElement target, MapZoom zoom)
 {
     _container = target.Parent as Panel;
     _target = target;
     _container.MouseDown += new MouseButtonEventHandler(OnMouseDown);
     _container.MouseMove += new MouseEventHandler(OnMouseMove);
     _container.MouseWheel += new MouseWheelEventHandler(OnMouseWheel);
     Keyboard.AddKeyDownHandler(_container, new KeyEventHandler(OnKeyDown));
     _zoom = zoom;
 }
Exemple #4
0
 /// <summary>
 /// Construct new Pan gesture object.
 /// </summary>
 /// <param name="target">The target to be panned, must live inside a container Panel</param>
 /// <param name="zoom"></param>
 public Pan(FrameworkElement target, MapZoom zoom) {
     this._target = target;
     this._container = target.Parent as Panel;
     if (this._container == null) {
         // todo: localization
         throw new ArgumentException("Target object must live in a Panel");
     }
     this._zoom = zoom;
     _container.MouseLeftButtonDown += new MouseButtonEventHandler(OnMouseLeftButtonDown);
     _container.MouseLeftButtonUp += new MouseButtonEventHandler(OnMouseLeftButtonUp);
     _container.MouseMove += new MouseEventHandler(OnMouseMove);
 }
Exemple #5
0
        public VirtualCanvasViewModel(IContainerExtension containerExtension) : base(containerExtension)
        {
            Views.VirtualCanvas canvas = new Views.VirtualCanvas();
            Graph = canvas.Graph;
            View  = canvas;

            Canvas target = Graph.ContentCanvas;

            Zoom       = new MapZoom(target);
            Pan        = new Pan(target, Zoom);
            AutoScroll = new AutoScroll(target, Zoom);
            RectZoom   = new RectangleSelectionGesture(target, Zoom);
        }
 /// <summary>
 /// Construct new RectangleSelectionGesture object for selecting things in the given target object.
 /// </summary>
 /// <param name="target">A FrameworkElement</param>
 /// <param name="zoom">The MapZoom object that wraps this same target object</param>
 public RectangleSelectionGesture(FrameworkElement target, MapZoom zoom, ModifierKeys mods)
 {
     _mods = mods;
     _target = target;
     _container = target.Parent as Panel;
     if (_container == null)
     {
         throw new ArgumentException("Target object must live in a Panel");
     }
     _zoom = zoom;
     _container.MouseLeftButtonDown += new MouseButtonEventHandler(OnMouseLeftButtonDown);
     _container.MouseLeftButtonUp += new MouseButtonEventHandler(OnMouseLeftButtonUp);
     _container.MouseMove += new MouseEventHandler(OnMouseMove);
 }
Exemple #7
0
        private void InitializeComponent()
        {
            this.SuspendLayout();
            //
            // wpfContainerHost
            //
            this._wpfSchemaContainer.Dock           = System.Windows.Forms.DockStyle.Fill;
            this._wpfSchemaContainer.Location       = new System.Drawing.Point(0, 0);
            this._wpfSchemaContainer.Name           = "WPFSchemaContainer";
            this._wpfSchemaContainer.Size           = new System.Drawing.Size(292, 273);
            this._wpfSchemaContainer.TabIndex       = 0;
            this._wpfSchemaContainer.Text           = "WPFSchemaContainer";
            this._wpfSchemaContainer.Child.KeyDown += new System.Windows.Input.KeyEventHandler(WpfKeyDown);
            this.XamlView = new TextBox
            {
                Dock       = System.Windows.Forms.DockStyle.Bottom,
                Multiline  = true,
                ScrollBars = ScrollBars.Both,
                Size       = new System.Drawing.Size(200, 200)
            };
            this.XamlView.Hide();
            XamlView.MaxLength = int.MaxValue;
            //
            // SchemaView
            //
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this._wpfSchemaContainer);
            this.Controls.Add(XamlView);
            this.Name = "SchemaView";

            this.ResumeLayout(false);

            this.UndoBuff         = new BaseUndoBuffer(this);
            this.SelectionManager = new SchemaSelectionManager(this);
            _documentMenuContext  = new MenuCommandContext(contextMenu);
            this.ContextMenuStrip = contextMenu;
            //CommandManager.documentMenuContext = _documentMenuContext;////????????????????????????????


            this._wpfSchemaContainer.Child.AllowDrop  = true;
            this._wpfSchemaContainer.Child.DragEnter += new System.Windows.DragEventHandler(Child_DragEnter);
            this._wpfSchemaContainer.Child.Drop      += new System.Windows.DragEventHandler(Child_Drop);

            ZoomManager = new MapZoom(MainPanel);
            CreateCommands();
            MainPanel.Loaded += new RoutedEventHandler(MainCanvas_Loaded);
        }
        public ZoomVirtualized()
        {
            InitializeComponent();

            canvas.ContentCanvas.Background = FindResource("brush") as Brush;

            var zoom = new MapZoom(canvas.ContentCanvas);
            int x = 0;
            int y = 200;

            for(int i = 0;i < 10000;i++)
            {
                var e = new Grid { Width = 100, Height = 100 ,ClipToBounds = false};
                var el = new Ellipse { Fill = Brushes.Red, Stroke = Brushes.Black, StrokeThickness = 2 };
                e.Children.Add(el);
                var t = new TextBlock {  Text = i.ToString(), FontSize = 30 , ClipToBounds = false , VerticalAlignment = System.Windows.VerticalAlignment.Center,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center};
                e.Children.Add(t);
                VirtualCanvas.SetX(e,x * 100);
                VirtualCanvas.SetY(e, Math.Sin(i) * 200 + y);
                e.CacheMode = new BitmapCache();
                canvas.VirtualChildren.Add(e);

                var zoomProperty = DependencyPropertyDescriptor.FromProperty(TouchScrollViewer.ScrollViewerZoomProperty, typeof(Grid));
                zoomProperty.AddValueChanged(e, new EventHandler(ZoomChanged));

                e.RenderTransformOrigin = new Point(0.5,0.5);
                e.RenderTransform = new ScaleTransform();

                //el.Loaded += e_Loaded;
                

                x++;

                if (i % 500 == 0)
                {
                    x = 0;
                    y += 500;
                }                  
                
            }
                
            //LayoutUpdated += ZoomTest_LayoutUpdated;

            scroll.ScrollChanged += scroll_ScrollChanged;
            
        }
Exemple #9
0
 public void nextMapZoom()
 {
     Array values = Enum.GetValues(typeof(MapZoom));
     int index = Array.IndexOf(values, mapZoom);
     index = (index + 1) % values.Length;
     mapZoom = (MapZoom)values.GetValue(index);
 }
Exemple #10
0
        /// <summary>
        /// 计算下载任务列表
        /// </summary>
        public void CalculateQuest()
        {
            // 先按多边形分组,一组点可能组成多个多边形
            var points = m_points;

            //while (points.Any())
            //{
            //    var index = points.ToList().LastIndexOf(points.First());
            //    if (index == 0)
            //    {
            //        if (points.Any())
            //        {
            //            File.AppendAllLines("points.txt", points.Select(o=>$"{o.X},{o.Y}"));
            //        }
            //        break;
            //    }

            //    var region = new MercatorRegion(points.Take(index + 1));
            //    m_mercatorRegions.Add(region);
            //    points = points.Skip(index + 1).ToList();
            //}

            if (!m_mercatorRegions.Any())
            {
                throw new ArgumentException("无法构建成多边形,请检查点是否闭合");
            }

            // 只计算最大层,其余层通过缩小计算得出
            var tileRegionList = m_mercatorRegions.Select(o => o.GetTileRegion(MaxZoom));
            var segments       = tileRegionList.Aggregate(Enumerable.Empty <TileSegment>(), (current, region) => current.Concat(region.GetTileSegments())).ToList();
            var minY           = (long)Math.Floor(segments.Min(o => o.MinY));
            var maxY           = (long)Math.Floor(segments.Max(o => o.MaxY));

            // 每个Y值计算一次交点
            var taskGroup = new MapZoom(MaxZoom);

            for (var i = minY; i <= maxY; i++)
            {
                var y             = i;
                var matchSegments = segments.Where(o => (o.MaxY >= y) && (o.MinY <= y));
                var intersectList = new List <TilePoint>();
                foreach (var s in matchSegments)
                {
                    intersectList.Add(s.IntersectY(y));
                }

                // 分解任务
                intersectList = intersectList.OrderBy(o => o.X).ToList();
                for (var index = 0; index < intersectList.Count; index += 2)
                {
                    var x1 = (long)Math.Floor(intersectList[index].X);
                    var x2 = (long)Math.Floor(intersectList[index + 1].X);

                    var task = new MapLine
                    {
                        StartX = x1,
                        EndX   = x2,
                        Y      = y,
                        Zoom   = MaxZoom
                    };
                    taskGroup.AddTask(task);
                }
            }

            // 将线段两点加入任务组
            foreach (var s in segments)
            {
                taskGroup.AddTask(GetTaskFromTilePoint(s.Point1, MaxZoom));
                taskGroup.AddTask(GetTaskFromTilePoint(s.Point2, MaxZoom));
            }

            // 将线段所有x轴点加入任务组
            var minX = (long)Math.Floor(segments.Min(o => o.MinX));
            var maxX = (long)Math.Floor(segments.Max(o => o.MaxX));

            for (var i = minX; i <= maxX; i++)
            {
                var x             = i;
                var matchSegments = segments.Where(o => (o.MaxX >= x) && (o.MinX <= x));
                foreach (var s in matchSegments)
                {
                    taskGroup.AddTask(GetTaskFromTilePoint(s.IntersectX(x), MaxZoom));
                }
            }

            // 整合任务组
            m_zoomTasks.Add(taskGroup);
            var tg = taskGroup;

            for (var index = MaxZoom - 1; index >= MinZoom; index--)
            {
                tg = tg.ScaleTo(index);
                m_zoomTasks.Add(tg);
            }
        }