public void ArrangeTest () { Border b1 = new Border (); b1.Background = new SolidColorBrush (Colors.Red); b1.Width = 50; b1.Height = 25; Border b2 = new Border (); b2.Background = new SolidColorBrush (Colors.Blue); b2.Width = 25; b2.Height = 30; var stack = new StackPanel (); stack.Children.Add (b1); stack.Children.Add (b2); stack.Measure (new Size (Double.PositiveInfinity,Double.PositiveInfinity)); Assert.AreEqual (new Size (50,55), stack.DesiredSize, "stack desired"); Assert.AreEqual (new Size (0,0), new Size (stack.ActualWidth, stack.ActualHeight), "stack actual"); stack.Arrange (new Rect (10, 10, stack.DesiredSize.Width, stack.DesiredSize.Height)); Assert.AreEqual (new Size (50,55), stack.DesiredSize, "stack desired1"); Assert.AreEqual (new Size (50,55), stack.RenderSize, "stack render1"); Assert.AreEqual (new Rect (10,10,50,55), LayoutInformation.GetLayoutSlot (stack), "stack slot"); }
public void StackPanelLayoutTest() { StackPanel panel = new StackPanel(); FrameworkElement child1 = new FrameworkElement { Height = 100 }; FrameworkElement child2 = new FrameworkElement { Height = 100 }; FrameworkElement child3 = new FrameworkElement { Height = 100 }; panel.Children.Add(child1); panel.Children.Add(child2); panel.Children.Add(child3); panel.Measure(new Size(1000, 1000)); Assert.AreEqual(new Size(0, 300), panel.DesiredSize); panel.Arrange(new Rect(1000, 300)); Assert.AreEqual(new Size(1000, 300), panel.VisualSize); Assert.AreEqual(new Size(1000, 100), child1.VisualSize); Assert.AreEqual(new Size(1000, 100), child2.VisualSize); Assert.AreEqual(new Size(1000, 100), child3.VisualSize); Assert.AreEqual(new Point(0, 0), child1.VisualOffset); Assert.AreEqual(new Point(0, 100), child2.VisualOffset); Assert.AreEqual(new Point(0, 200), child3.VisualOffset); }
public void LayoutSlotTest () { var stack = new StackPanel (); stack.Children.Add (CreateSlotItem ()); stack.Children.Add (CreateSlotItem ()); stack.Children.Add (CreateSlotItem ()); stack.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); stack.Arrange (new Rect (0,0,stack.DesiredSize.Width,stack.DesiredSize.Height)); Assert.AreEqual (new Rect (0,0,25,33), LayoutInformation.GetLayoutSlot ((FrameworkElement)stack.Children[0])); Assert.AreEqual (new Rect (0,33,25,33), LayoutInformation.GetLayoutSlot ((FrameworkElement)stack.Children[1])); Assert.AreEqual (new Rect (0,66,25,33), LayoutInformation.GetLayoutSlot ((FrameworkElement)stack.Children[2])); }
public void MouseDeviceCaptureTest() { Border child1 = new Border { Background = Brushes.Transparent, Width = 100, Height = 100 }; Border child2 = new Border { Background = Brushes.Transparent, Width = 100, Height = 100 }; Border child3 = new Border { Background = Brushes.Transparent, Width = 100, Height = 100 }; StackPanel panel = new StackPanel { IsRootElement = true }; panel.Children.Add(child1); panel.Children.Add(child2); MouseEventArgs lastArgs = null; panel.MouseMove += (sender, e) => lastArgs = e; TestPresentationSource presentationSource = new TestPresentationSource(); presentationSource.RootElement = panel; panel.Measure(Size.Infinity); panel.Arrange(new Rect(panel.DesiredSize)); MouseDevice mouseDevice = new MouseDevice(presentationSource); mouseDevice.Activate(); mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0)); Assert.AreEqual(child1, lastArgs.Source); Assert.AreEqual(child1, mouseDevice.HitTarget); Assert.AreEqual(null, mouseDevice.CaptureTarget); Assert.AreEqual(child1, mouseDevice.Target); mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 150), 0)); Assert.AreEqual(child2, lastArgs.Source); Assert.AreEqual(child2, mouseDevice.HitTarget); Assert.AreEqual(null, mouseDevice.CaptureTarget); Assert.AreEqual(child2, mouseDevice.Target); mouseDevice.Capture(child2); mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0)); Assert.AreEqual(child2, lastArgs.Source); Assert.AreEqual(child1, mouseDevice.HitTarget); Assert.AreEqual(child2, mouseDevice.CaptureTarget); Assert.AreEqual(child2, mouseDevice.Target); mouseDevice.ReleaseCapture(); mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0)); Assert.AreEqual(child1, lastArgs.Source); Assert.AreEqual(child1, mouseDevice.HitTarget); Assert.AreEqual(null, mouseDevice.CaptureTarget); Assert.AreEqual(child1, mouseDevice.Target); }
public void MeasureTest () { Border b1 = new Border (); b1.Background = new SolidColorBrush (Colors.Red); b1.Width = 50; b1.Height = 25; Border b2 = new Border (); b2.Background = new SolidColorBrush (Colors.Blue); b2.Width = 25; b2.Height = 30; var stack = new StackPanel (); stack.Children.Add (b1); stack.Children.Add (b2); stack.Measure (new Size (Double.PositiveInfinity,Double.PositiveInfinity)); Assert.AreEqual (new Size (50,55), stack.DesiredSize, "stack desired"); }
private void Print_Click(object sender, RoutedEventArgs e) { PrintDialog printDlg = new PrintDialog(); if (printDlg.ShowDialog() == true) { printDlg.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.NorthAmerica4x6); //printDlg.PrintQueue.DefaultPrintTicket.PageOrientation = PageOrientation.Landscape; printDlg.PrintTicket.PageOrientation = PageOrientation.Landscape; Console.WriteLine("wwwwwwwwwwwwww->" + printDlg.PrintableAreaWidth); Console.WriteLine("hhhhhhhhhhhhhhh->" + printDlg.PrintableAreaHeight); Console.WriteLine("W-> "+printDlg.PrintTicket.PageMediaSize.Width); Console.WriteLine("H-> "+printDlg.PrintTicket.PageMediaSize.Height); //printDlg.PrintQueue.DefaultPrintTicket.PageOrientation = PageOrientation.Portrait; /* XpsDocumentWriter docWriter = PrintQueue.CreateXpsDocumentWriter(printDlg.PrintQueue); PrintTicket ticket = new PrintTicket(); if (printDlg.PrintTicket.PageOrientation == PageOrientation.Landscape) { ticket.PageMediaSize = new PageMediaSize(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight); } docWriter.Write(visual, ticket); */ Size size = new Size(printDlg.PrintableAreaWidth, printDlg.PrintableAreaHeight); StackPanel stackPanel = new StackPanel { Orientation = Orientation.Vertical, RenderSize = size }; //TextBlock title = new TextBlock { Text = @"Form", FontSize = 20 }; //stackPanel.Children.Add(title); Image image = new Image { Source = this.theImage.Source, Stretch = Stretch.Uniform }; image.RenderTransform = new ScaleTransform(1, 1); stackPanel.Children.Add(image); stackPanel.Measure(size); stackPanel.Arrange(new Rect(new Point(0, 0), stackPanel.DesiredSize)); printDlg.PrintVisual(stackPanel, @"Form image"); //printDlg.PrintVisual(theImage, "My First Print Job"); } }
internal void Print(System.Windows.Controls.Image ImageCtrl) { PrintDialog printDlg = new PrintDialog(); if (printDlg.ShowDialog() == true) { printDlg.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.NorthAmerica4x6); printDlg.PrintTicket.PageOrientation = PageOrientation.Landscape; System.Windows.Size size = new System.Windows.Size(printDlg.PrintableAreaWidth, printDlg.PrintableAreaHeight); StackPanel stackPanel = new StackPanel { Orientation = Orientation.Vertical, RenderSize = size }; //TextBlock title = new TextBlock { Text = @"Form", FontSize = 20 }; //stackPanel.Children.Add(title); TransformGroup transformGroup = new TransformGroup(); ScaleTransform scaleTransform = new ScaleTransform(1,1); transformGroup.Children.Add(scaleTransform); Image image = new Image { Source = ImageCtrl.Source, Stretch = Stretch.Uniform }; //image.RenderTransform = new ScaleTransform(1, 1); BitmapSource imgSrouce = ImageCtrl.Source as BitmapSource; if (imgSrouce.PixelWidth < imgSrouce.PixelHeight) { image.LayoutTransform = new RotateTransform(90); } image.RenderTransform = transformGroup; stackPanel.Children.Add(image); stackPanel.Measure(size); stackPanel.Arrange(new Rect(new Point(0, 0), stackPanel.DesiredSize)); printDlg.PrintVisual(stackPanel, @"Form image"); //printDlg.PrintVisual(ImageCtrl, "My First Print Job"); } }
public void HitTestBasicTest() { StackPanel stackPanel1 = new StackPanel { Name = "stackPanel1", Background = Brushes.Transparent, IsRootElement = true }; StackPanel stackPanel2 = new StackPanel { Name = "stackPanel2", Background = Brushes.Transparent, Height = 100, Orientation = Orientation.Horizontal }; Border child1 = new Border { Name = "child1", Background = Brushes.Transparent, Height = 100, Width = 100 }; Border child2 = new Border { Name = "child2", Background = Brushes.Transparent, Height = 100 }; Border child3 = new Border { Name = "child3", Background = Brushes.Transparent, Width = 100 }; Border child4 = new Border { Name = "child4", Background = Brushes.Transparent, Width = 100 }; stackPanel1.Children.Add(child1); stackPanel1.Children.Add(stackPanel2); stackPanel1.Children.Add(child2); stackPanel2.Children.Add(child3); stackPanel2.Children.Add(child4); // [child1] ] // [child3][child4] // [child2 ] stackPanel1.Measure(Size.Infinity); stackPanel1.Arrange(new Rect(stackPanel1.DesiredSize)); Assert.AreEqual(child1, stackPanel1.HitTest(new Point(50, 50))); Assert.AreEqual(stackPanel1, stackPanel1.HitTest(new Point(150, 50))); Assert.AreEqual(child3, stackPanel1.HitTest(new Point(50, 150))); Assert.AreEqual(child4, stackPanel1.HitTest(new Point(150, 150))); Assert.AreEqual(child2, stackPanel1.HitTest(new Point(50, 250))); Assert.AreEqual(child2, stackPanel1.HitTest(new Point(150, 250))); stackPanel2.IsEnabled = false; Assert.AreEqual(stackPanel1, stackPanel1.HitTest(new Point(50, 150))); Assert.AreEqual(stackPanel1, stackPanel1.HitTest(new Point(150, 150))); child2.IsHitTestVisible = false; Assert.AreEqual(stackPanel1, stackPanel1.HitTest(new Point(50, 250))); Assert.AreEqual(stackPanel1, stackPanel1.HitTest(new Point(150, 250))); }
private void Window_Loaded(object sender, RoutedEventArgs e) { System.Windows.Size size = new System.Windows.Size(600, 400); StackPanel stackPanel = new StackPanel { Orientation = Orientation.Vertical, RenderSize = size }; System.Windows.Controls.Image ImageCtrl = new System.Windows.Controls.Image(); BitmapImage bitImg = new BitmapImage(new Uri("C:\\temp\\32367-78aNJdO.jpg")); ImageCtrl.Source = bitImg; TransformGroup transformGroup = new TransformGroup(); ScaleTransform scaleTransform = new ScaleTransform(1, 1); transformGroup.Children.Add(scaleTransform); System.Windows.Controls.Image image = new System.Windows.Controls.Image { Source = ImageCtrl.Source, Stretch = Stretch.Uniform }; //image.RenderTransform = new ScaleTransform(1, 1); BitmapSource imgSrouce = ImageCtrl.Source as BitmapSource; if (imgSrouce.PixelWidth < imgSrouce.PixelHeight) { /* double argle = 90 * 180 / 3.142; RotateTransform rotateTransform = new RotateTransform(); rotateTransform.Angle = argle; transformGroup.Children.Add(rotateTransform); * */ image.LayoutTransform = new RotateTransform(90); } image.RenderTransform = transformGroup; stackPanel.Children.Add(image); stackPanel.Measure(size); stackPanel.Arrange(new Rect(new System.Windows.Point(0, 0), stackPanel.DesiredSize)); this.AddChild(stackPanel); }
public void LayoutSlotTest_Flow () { var stack = new StackPanel (); var border = new Border () { Width = 100, Height = 200 }; border.Child = stack; stack.FlowDirection = FlowDirection.RightToLeft; stack.Orientation = Orientation.Horizontal; var child0 = CreateSlotItem (); var child1 = CreateSlotItem (); child1.FlowDirection = FlowDirection.LeftToRight; stack.Children.Add (child0); stack.Children.Add (child1); stack.Children.Add (CreateSlotItem ()); stack.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); stack.Arrange (new Rect (0,0,stack.DesiredSize.Width,stack.DesiredSize.Height)); Assert.AreEqual (new Rect (0,0,25,33), LayoutInformation.GetLayoutSlot (child0)); Assert.AreEqual (new Rect (25,0,25,33), LayoutInformation.GetLayoutSlot (child1)); Assert.AreEqual (new Rect (50,0,25,33), LayoutInformation.GetLayoutSlot ((FrameworkElement)stack.Children[2])); CreateAsyncTest (border, () => { MatrixTransform xform0 = child0.TransformToVisual (border) as MatrixTransform; Assert.AreEqual ("-1,0,0,1,100,84", xform0.Matrix.ToString(), "transform0 string"); MatrixTransform xform1 = child1.TransformToVisual (border) as MatrixTransform; Assert.AreEqual ("1,0,0,1,50,84", xform1.Matrix.ToString(), "transform1 string"); MatrixTransform xform0_st = child0.TransformToVisual (stack) as MatrixTransform; Assert.AreEqual ("1,0,0,1,0,84", xform0_st.Matrix.ToString(), "transform0_st string"); MatrixTransform xform1_st = child1.TransformToVisual (stack) as MatrixTransform; Assert.AreEqual ("-1,0,0,1,50,84", xform1_st.Matrix.ToString(), "transform1_st string"); }); }
private void BuildOverlay2D(SOMNode node, ISOMInput[] images, bool showCount, bool showNodeHash, bool showImageHash, bool showSpread, bool showPerImageDistance) { const int IMAGESIZE = 80; const int NODEHASHSIZE = 100; const double SMALLFONT1 = 17; const double LARGEFONT1 = 21; const double SMALLFONT2 = 15; const double LARGEFONT2 = 18; const double SMALLFONT3 = 12; const double LARGEFONT3 = 14; const double SMALLLINE1 = .8; const double LARGELINE1 = 1; const double SMALLLINE2 = .5; const double LARGELINE2 = .85; const double SMALLLINE3 = .3; const double LARGELINE3 = .7; Canvas canvas = new Canvas(); List<Rect> rectangles = new List<Rect>(); #region cursor rectangle var cursorRect = SelfOrganizingMapsWPF.GetMouseCursorRect(0); rectangles.Add(cursorRect.Item1); // This is just for debugging //Rectangle cursorVisual = new Rectangle() //{ // Width = cursorRect.Item1.Width, // Height = cursorRect.Item1.Height, // Fill = new SolidColorBrush(UtilityWPF.GetRandomColor(64, 192, 255)), //}; //Canvas.SetLeft(cursorVisual, cursorRect.Item1.Left); //Canvas.SetTop(cursorVisual, cursorRect.Item1.Top); //canvas.Children.Add(cursorVisual); #endregion #region count text if (showCount) { StackPanel textPanel = new StackPanel() { Orientation = Orientation.Horizontal, }; // "images " OutlinedTextBlock text = SelfOrganizingMapsWPF.GetOutlineText("images ", SMALLFONT1, SMALLLINE1); text.Margin = new Thickness(0, 0, 4, 0); textPanel.Children.Add(text); // count text = SelfOrganizingMapsWPF.GetOutlineText(images.Length.ToString("N0"), LARGEFONT1, LARGELINE1); textPanel.Children.Add(text); // Place on canvas textPanel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); // aparently, the infinity is important to get an accurate desired size Size textSize = textPanel.DesiredSize; Rect textRect = SelfOrganizingMapsWPF.GetFreeSpot(textSize, new Point(0, 0), new Vector(0, 1), rectangles); rectangles.Add(textRect); Canvas.SetLeft(textPanel, textRect.Left); Canvas.SetTop(textPanel, textRect.Top); canvas.Children.Add(textPanel); } #endregion #region spread var nodeImages = images.Select(o => o.Weights); var allImages = _imagesByNode.SelectMany(o => o).Select(o => o.Weights); double nodeSpread = images.Length == 0 ? 0d : SelfOrganizingMaps.GetTotalSpread(nodeImages); double totalSpread = SelfOrganizingMaps.GetTotalSpread(allImages); if (showSpread && images.Length > 0) { double nodeStandDev = MathND.GetStandardDeviation(nodeImages); double totalStandDev = MathND.GetStandardDeviation(allImages); double percentSpread = nodeSpread / totalSpread; double pecentStandDev = nodeStandDev / totalSpread; Grid spreadPanel = new Grid() { Margin = new Thickness(2), }; spreadPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) }); spreadPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(4) }); spreadPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2) }); spreadPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); AddTextRow(spreadPanel, 0, "node stand dev", (pecentStandDev * 100).ToStringSignificantDigits(2) + "%", SMALLFONT2, LARGEFONT2, SMALLLINE2, LARGELINE2, true); AddTextRow(spreadPanel, 2, "node spread", (percentSpread * 100).ToStringSignificantDigits(2) + "%", SMALLFONT2, LARGEFONT2, SMALLLINE2, LARGELINE2, false); AddTextRow(spreadPanel, 4, "node stand dev", nodeStandDev.ToStringSignificantDigits(2), SMALLFONT3, LARGEFONT3, SMALLLINE3, LARGELINE3, true); AddTextRow(spreadPanel, 6, "node spread", nodeSpread.ToStringSignificantDigits(2), SMALLFONT3, LARGEFONT3, SMALLLINE3, LARGELINE3, false); AddTextRow(spreadPanel, 8, "total stand dev", totalStandDev.ToStringSignificantDigits(2), SMALLFONT3, LARGEFONT3, SMALLLINE3, LARGELINE3, true); AddTextRow(spreadPanel, 10, "total spread", totalSpread.ToStringSignificantDigits(2), SMALLFONT3, LARGEFONT3, SMALLLINE3, LARGELINE3, false); // Place on canvas spreadPanel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); // aparently, the infinity is important to get an accurate desired size Size spreadSize = spreadPanel.DesiredSize; Rect spreadRect = SelfOrganizingMapsWPF.GetFreeSpot(spreadSize, new Point(0, 0), new Vector(0, 1), rectangles); rectangles.Add(spreadRect); Canvas.SetLeft(spreadPanel, spreadRect.Left); Canvas.SetTop(spreadPanel, spreadRect.Top); canvas.Children.Add(spreadPanel); } #endregion double[] nodeCenter = images.Length == 0 ? node.Weights : MathND.GetCenter(nodeImages); #region node hash if (showNodeHash) { ImageInput nodeImage = new ImageInput(null, node.Weights, node.Weights); double nodeDist = MathND.GetDistance(nodeImage.Weights, nodeCenter); double nodeDistPercent = nodeSpread.IsNearZero() ? 1d : (nodeDist / nodeSpread); // if zero or one node, then spread will be zero Tuple<UIElement, VectorInt> nodeCtrl = GetPreviewImage(nodeImage, true, NODEHASHSIZE, showPerImageDistance, nodeDistPercent); // Place on canvas Rect nodeRect = SelfOrganizingMapsWPF.GetFreeSpot(new Size(nodeCtrl.Item2.X, nodeCtrl.Item2.Y), new Point(0, 0), new Vector(0, -1), rectangles); rectangles.Add(nodeRect); Canvas.SetLeft(nodeCtrl.Item1, nodeRect.Left); Canvas.SetTop(nodeCtrl.Item1, nodeRect.Top); canvas.Children.Add(nodeCtrl.Item1); } #endregion #region images foreach (ImageInput image in images) { double imageDistPercent; if (images.Length == 1) { imageDistPercent = 1; } else { imageDistPercent = MathND.GetDistance(image.Weights, nodeCenter) / nodeSpread; } // Create the image (and any other graphics for that image) Tuple<UIElement, VectorInt> imageCtrl = GetPreviewImage(image, showImageHash, IMAGESIZE, showPerImageDistance, imageDistPercent); // Find a spot for it var imageRect = Enumerable.Range(0, 10). Select(o => { Vector direction = Math3D.GetRandomVector_Circular_Shell(1).ToVector2D(); Rect imageRect2 = SelfOrganizingMapsWPF.GetFreeSpot(new Size(imageCtrl.Item2.X, imageCtrl.Item2.Y), new Point(0, 0), direction, rectangles); return new { Rect = imageRect2, Distance = new Vector(imageRect2.CenterX(), imageRect2.CenterY()).LengthSquared }; }). OrderBy(o => o.Distance). First(). Rect; Canvas.SetLeft(imageCtrl.Item1, imageRect.Left); Canvas.SetTop(imageCtrl.Item1, imageRect.Top); // Add it rectangles.Add(imageRect); canvas.Children.Add(imageCtrl.Item1); } #endregion Rect canvasAABB = Math2D.GetAABB(rectangles); //NOTE: All the items are placed around zero zero, but that may not be half width and height (items may not be centered) canvas.RenderTransform = new TranslateTransform(-canvasAABB.Left, -canvasAABB.Top); panelOverlay.Children.Clear(); panelOverlay.Children.Add(canvas); _overlayPolyStats = new OverlayPolygonStats(node, images, canvasAABB, cursorRect.Item2, canvas); }
private void BuildOverlay2D(SOMNode node, ISOMInput[] inputs, bool showCount = false, bool showNodeHash = false) { const double SMALLFONT1 = 17; const double LARGEFONT1 = 21; const double SMALLFONT2 = 15; const double LARGEFONT2 = 18; const double SMALLFONT3 = 12; const double LARGEFONT3 = 14; const double SMALLLINE1 = .8; const double LARGELINE1 = 1; const double SMALLLINE2 = .5; const double LARGELINE2 = .85; const double SMALLLINE3 = .3; const double LARGELINE3 = .7; Canvas canvas = new Canvas(); List<Rect> rectangles = new List<Rect>(); #region cursor rectangle var cursorRect = SelfOrganizingMapsWPF.GetMouseCursorRect(); rectangles.Add(cursorRect.Item1); // This is just for debugging //Rectangle cursorVisual = new Rectangle() //{ // Width = cursorRect.Item1.Width, // Height = cursorRect.Item1.Height, // Fill = new SolidColorBrush(UtilityWPF.GetRandomColor(64, 192, 255)), //}; //Canvas.SetLeft(cursorVisual, cursorRect.Item1.Left); //Canvas.SetTop(cursorVisual, cursorRect.Item1.Top); //canvas.Children.Add(cursorVisual); #endregion #region count text if (showCount && _result != null && _result.InputsByNode != null) // it's possible that they are changing things while old graphics are still showing { StackPanel textPanel = new StackPanel() { Orientation = Orientation.Horizontal, }; // "rows " OutlinedTextBlock text = SelfOrganizingMapsWPF.GetOutlineText("rows ", SMALLFONT1, SMALLLINE1); text.Margin = new Thickness(0, 0, 4, 0); textPanel.Children.Add(text); // percent double percent = -1; if (_result.InputsByNode.Length == 0) { if (inputs.Length == 0) { percent = 0; } else { percent = -1; } } else { percent = inputs.Length.ToDouble() / _result.InputsByNode.SelectMany(o => o).Count().ToDouble(); percent *= 100d; } text = SelfOrganizingMapsWPF.GetOutlineText(percent.ToStringSignificantDigits(2) + "%", LARGEFONT1, LARGELINE1); textPanel.Children.Add(text); // Place on canvas textPanel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); // aparently, the infinity is important to get an accurate desired size Size textSize = textPanel.DesiredSize; Rect textRect = SelfOrganizingMapsWPF.GetFreeSpot(textSize, new Point(0, 0), new Vector(0, -1), rectangles); rectangles.Add(textRect); Canvas.SetLeft(textPanel, textRect.Left); Canvas.SetTop(textPanel, textRect.Top); canvas.Children.Add(textPanel); } #endregion double[] nodeCenter = inputs.Length == 0 ? node.Weights : MathND.GetCenter(inputs.Select(o => o.Weights)); #region node hash if (showNodeHash) { var nodeCtrl = GetVectorVisual(node.Weights); // Place on canvas Rect nodeRect = SelfOrganizingMapsWPF.GetFreeSpot(new Size(nodeCtrl.Item2.X, nodeCtrl.Item2.Y), new Point(0, 0), new Vector(0, -1), rectangles); rectangles.Add(nodeRect); Canvas.SetLeft(nodeCtrl.Item1, nodeRect.Left); Canvas.SetTop(nodeCtrl.Item1, nodeRect.Top); canvas.Children.Add(nodeCtrl.Item1); } #endregion //TODO: For the first attempt, put all row descriptions under #region rows if (_queryResults != null && _queryResults.Results != null) { var rowsCtrl = GetRowsVisual(_queryResults.ColumnNames, inputs, _detailsHeaderStyle, _detailsBodyStyle); // Place on canvas Rect rowsRect = SelfOrganizingMapsWPF.GetFreeSpot(new Size(rowsCtrl.Item2.X, rowsCtrl.Item2.Y), new Point(0, 0), new Vector(0, 1), rectangles); rectangles.Add(rowsRect); Canvas.SetLeft(rowsCtrl.Item1, rowsRect.Left); Canvas.SetTop(rowsCtrl.Item1, rowsRect.Top); canvas.Children.Add(rowsCtrl.Item1); } #endregion Rect canvasAABB = Math2D.GetAABB(rectangles); //NOTE: All the items are placed around zero zero, but that may not be half width and height (items may not be centered) canvas.RenderTransform = new TranslateTransform(-canvasAABB.Left, -canvasAABB.Top); panelOverlay.Children.Clear(); panelOverlay.Children.Add(canvas); _overlayPolyStats = new OverlayPolygonStats(node, inputs, canvasAABB, cursorRect.Item2, canvas); }
private void Print_Click(object sender, RoutedEventArgs e) { PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { StackPanel panel = new StackPanel(); panel.Margin = new Thickness(15); panel.Children.Add((Canvas)XamlReader.Parse(XamlWriter.Save(this.DrawingHost.DrawingControl))); TextBlock myBlock = new TextBlock(); myBlock.Text = "Drawing"; myBlock.TextAlignment = TextAlignment.Center; panel.Children.Add(myBlock); panel.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight)); panel.Arrange(new Rect(new System.Windows.Point(0, 0), panel.DesiredSize)); dialog.PrintTicket.PageOrientation = PageOrientation.Landscape; dialog.PrintVisual(panel, "Drawing"); } }
Composite ( Double compositeWidth, Double compositeHeight, String headerText, String footerText, System.Drawing.Font headerFooterFont, IEnumerable<LegendControlBase> legendControls ) { Debug.Assert(compositeWidth > 0); Debug.Assert(compositeHeight > 0); Debug.Assert(headerFooterFont != null); Debug.Assert(legendControls != null); AssertValid(); // Note: // // Don't try taking a shortcut by using // NodeXLControl.CopyGraphToBitmap() to get an image of the graph and // then compositing the image with the other elements. That would work // if the caller were creating an image, but if it were creating an XPS // document, the graph would no longer be scalable. Double dScreenDpi = WpfGraphicsUtil.GetScreenDpi(m_oNodeXLControl).Width; // The NodeXLControl can't be a child of two logical trees, so // disconnect it from its parent after saving the current vertex // locations. m_oLayoutSaver = new LayoutSaver(m_oNodeXLControl.Graph); Debug.Assert(m_oNodeXLControl.Parent is Panel); m_oParentPanel = (Panel)m_oNodeXLControl.Parent; UIElementCollection oParentChildren = m_oParentPanel.Children; m_iChildIndex = oParentChildren.IndexOf(m_oNodeXLControl); oParentChildren.Remove(m_oNodeXLControl); m_oGraphImageScaler = new GraphImageScaler(m_oNodeXLControl); m_oGraphImageCenterer = new NodeXLControl.GraphImageCenterer( m_oNodeXLControl); // The header and footer are rendered as Label controls. The legend is // rendered as a set of Image controls. Label oHeaderLabel, oFooterLabel; IEnumerable<Image> oLegendImages; Double dHeaderHeight, dTotalLegendHeight, dFooterHeight; CreateHeaderOrFooterLabel(headerText, compositeWidth, headerFooterFont, out oHeaderLabel, out dHeaderHeight); CreateLegendImages(legendControls, compositeWidth, out oLegendImages, out dTotalLegendHeight); CreateHeaderOrFooterLabel(footerText, compositeWidth, headerFooterFont, out oFooterLabel, out dFooterHeight); m_oNodeXLControl.Width = compositeWidth; m_oNodeXLControl.Height = Math.Max(10, compositeHeight - dHeaderHeight - dTotalLegendHeight - dFooterHeight); // Adjust the control's graph scale so that the graph's vertices and // edges will be the same relative size in the composite that they are // in the control. m_oGraphImageScaler.SetGraphScale( (Int32)WpfGraphicsUtil.WpfToPx(compositeWidth, dScreenDpi), (Int32)WpfGraphicsUtil.WpfToPx(m_oNodeXLControl.Height, dScreenDpi), dScreenDpi); // Adjust the NodeXLControl's translate transforms so that the // composite will be centered on the same point on the graph that the // NodeXLControl is centered on. m_oGraphImageCenterer.CenterGraphImage( new Size(compositeWidth, m_oNodeXLControl.Height) ); StackPanel oStackPanel = new StackPanel(); UIElementCollection oStackPanelChildren = oStackPanel.Children; // To avoid a solid black line at the bottom of the header or the top // of the footer, which is caused by rounding errors, make the // StackPanel background color the same as the header and footer. oStackPanel.Background = HeaderFooterBackgroundBrush; if (oHeaderLabel != null) { oStackPanelChildren.Add(oHeaderLabel); } // Wrap the NodeXLControl in a Grid to clip it. m_oGrid = new Grid(); m_oGrid.Width = m_oNodeXLControl.Width; m_oGrid.Height = m_oNodeXLControl.Height; m_oGrid.ClipToBounds = true; m_oGrid.Children.Add(m_oNodeXLControl); oStackPanelChildren.Add(m_oGrid); foreach (Image oLegendImage in oLegendImages) { oStackPanelChildren.Add(oLegendImage); } if (oFooterLabel != null) { oStackPanelChildren.Add(oFooterLabel); } Size oCompositeSize = new Size(compositeWidth, compositeHeight); Rect oCompositeRectangle = new Rect(new Point(), oCompositeSize); oStackPanel.Measure(oCompositeSize); oStackPanel.Arrange(oCompositeRectangle); oStackPanel.UpdateLayout(); return (oStackPanel); }
public void MouseDeviceQueryCursorTest() { Border child1 = new Border { Background = Brushes.Transparent, Width = 100, Height = 100 }; Border child2 = new Border { Background = Brushes.Transparent, Width = 100, Height = 100 }; StackPanel panel = new StackPanel { IsRootElement = true }; panel.Children.Add(child1); panel.Children.Add(child2); TestPresentationSource presentationSource = new TestPresentationSource(); presentationSource.RootElement = panel; ((TestApplicationHost)ApplicationHost.Current).PresentationSourceFactory = new TestPresentationSourceFactory(presentationSource); panel.Measure(Size.Infinity); panel.Arrange(new Rect(panel.DesiredSize)); child1.Cursor = Cursors.Help; child2.Cursor = Cursors.Pen; presentationSource.MouseDevice.Activate(); Assert.AreEqual(Cursors.Arrow, presentationSource.MouseDevice.Cursor); presentationSource.MouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0)); Assert.AreEqual(Cursors.Help, presentationSource.MouseDevice.Cursor); presentationSource.MouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 150), 0)); Assert.AreEqual(Cursors.Pen, presentationSource.MouseDevice.Cursor); child2.Cursor = Cursors.Hand; Assert.AreEqual(Cursors.Hand, presentationSource.MouseDevice.Cursor); panel.Cursor = Cursors.Arrow; Assert.AreEqual(Cursors.Hand, presentationSource.MouseDevice.Cursor); panel.ForceCursor = true; Assert.AreEqual(Cursors.Arrow, presentationSource.MouseDevice.Cursor); ((TestApplicationHost)ApplicationHost.Current).PresentationSourceFactory = null; }
public void StackPanelMarginTest() { StackPanel panel = new StackPanel { Orientation = Orientation.Horizontal }; FrameworkElement child1 = new FrameworkElement { Width = 80, Margin = new Thickness(10) }; FrameworkElement child2 = new FrameworkElement { Width = 60, Margin = new Thickness(20) }; FrameworkElement child3 = new FrameworkElement { Width = 40, Margin = new Thickness(30) }; panel.Children.Add(child1); panel.Children.Add(child2); panel.Children.Add(child3); panel.Measure(new Size(1000, 1000)); Assert.AreEqual(new Size(300, 60), panel.DesiredSize); panel.Arrange(new Rect(300, 1000)); Assert.AreEqual(new Size(300, 1000), panel.VisualSize); Assert.AreEqual(new Size(80, 980), child1.VisualSize); Assert.AreEqual(new Size(60, 960), child2.VisualSize); Assert.AreEqual(new Size(40, 940), child3.VisualSize); Assert.AreEqual(new Point(10, 10), child1.VisualOffset); Assert.AreEqual(new Point(120, 20), child2.VisualOffset); Assert.AreEqual(new Point(230, 30), child3.VisualOffset); }
public void MinWidthOnParentTest () { StackPanel sp = new StackPanel { MinWidth = 200 }; LayoutPoker c = new LayoutPoker { Height = 25 }; sp.Children.Add (c); sp.Measure (new Size (100, 100)); Assert.AreEqual (new Size (200,25), c.MeasureArg, "c.Measure"); Assert.AreEqual (new Size (0,25), c.DesiredSize); sp.Arrange (new Rect (0, 0, 100, 100)); Assert.AreEqual (new Size (200,25), c.ArrangeArg, "c.Arrange"); // now check desired/render sizes // the child is oblivious to the parent's maxheight Assert.AreEqual (new Size (0,0), c.RenderSize, "c.RenderedSize"); Assert.AreEqual (new Size (0,25), c.DesiredSize, "c.DesiredSize"); Assert.IsNull (LayoutInformation.GetLayoutClip (c), "c.LayoutClip == null"); // the parent's maxheight clips Assert.AreEqual (new Size (200,100), sp.RenderSize, "sp.RenderSize"); Assert.AreEqual (new Size (100,25), sp.DesiredSize, "sp.DesiredSize"); Assert.IsNotNull (LayoutInformation.GetLayoutClip (sp), "sp.LayoutClip != null"); }
private void MeasureView(UIElement view) { if (this.panel.Children.Contains(view)) { this.panel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); } else if (VisualTreeHelper.GetParent(view) == null) { StackPanel stackPanel = new StackPanel(); stackPanel.Children.Add(view); if (view is VirtualizedContainerService.VirtualizingContainer) { ((VirtualizedContainerService.VirtualizingContainer)view).Populate(); } stackPanel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); stackPanel.UpdateLayout(); stackPanel.Children.Remove(view); FreeFormPanel.SetChildSize(view, view.DesiredSize); } else { Fx.Assert(false, "The view should either be un-rooted or contained in the FreeFormPanel"); } }
private List<StackPanel> getPrintPages(double width, double height) { List<StackPanel> pages=new List<StackPanel>(); bool finish=false; int index=0; while (!finish) { StackPanel host = new StackPanel(); bool isFirst=true; while (index < OrdersContext.Current.View.Count) { OrderPrintBriefLandscapeControl cntrl = new OrderPrintBriefLandscapeControl(); cntrl.DataContext = OrdersContext.Current.View.GetItemAt(index); ; //cntrl.UpdateLayout(); if (isFirst) { cntrl.showHeader(); } isFirst = false; host.Children.Add(cntrl); host.Measure(new Size(width, double.PositiveInfinity)); //Logger.logMessage(cntrl.DesiredSize.Height+" "+ host.DesiredSize.Height + " " + height); if (host.DesiredSize.Height > height && host.Children.Count > 1) { host.Children.Remove(cntrl); break; } index++; finish = OrdersContext.Current.View.Count == index; } pages.Add(host); } return pages; }
private void AddMeasures() { foreach (var measurement in _measurements) { var line = new Line { Stroke = new SolidColorBrush(Colors.Yellow), StrokeThickness = 2, X1 = measurement.StartPoint.X - (4 * ScrollPosition), Y1 = measurement.StartPoint.Y, X2 = measurement.EndPoint.X - (4 * ScrollPosition), Y2 = measurement.EndPoint.Y }; Panel.SetZIndex(line, 2); ControlCanvas.Children.Add(line); var startPoint = new Point(line.X1, line.Y1); var endPoint = new Point(line.X2, line.Y2); var v = startPoint - endPoint; var midpoint = endPoint + (v / 2); var theta = Math.Atan2(v.Y, v.X); var offset = Math.PI / 2; if (v.Y > 0) offset = -Math.PI / 2; var theta2 = theta + offset; var x4 = 10 * Math.Cos(theta2) + midpoint.X; var y4 = 10 * Math.Sin(theta2) + midpoint.Y; var x3 = 30 * Math.Cos(theta2) + midpoint.X; var y3 = 30 * Math.Sin(theta2) + midpoint.Y; var redline = new Line { Stroke = new SolidColorBrush(Colors.Yellow), X1 = x4, Y1 = y4, X2 = x3, Y2 = y3, StrokeThickness = 2 }; // anchor points AddAnchor(startPoint); AddAnchor(endPoint); var panel = new StackPanel(); var outerBorder = new Border { Background = new SolidColorBrush(Color.FromArgb(0xa2, 0xaf, 0x2a, 0x2a)), CornerRadius = new CornerRadius(4), }; var innerBorder = new Border { Margin = new Thickness(4), Background = new SolidColorBrush(Color.FromArgb(0xa2, 0xf2, 0xda, 0xc7)), CornerRadius = new CornerRadius(4) }; panel.Children.Add(outerBorder); outerBorder.Child = innerBorder; var grid = new Grid { Margin = new Thickness(5) }; grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.ColumnDefinitions.Add(new ColumnDefinition()); var rowDefinition = new RowDefinition(); rowDefinition.Height = new GridLength(1, GridUnitType.Auto); grid.RowDefinitions.Add(rowDefinition); grid.RowDefinitions.Add(new RowDefinition()); grid.RowDefinitions.Add(new RowDefinition()); var voltageLabel = new Label { Foreground = new SolidColorBrush(Colors.Brown), Margin = new Thickness(0, 0, 2, 0), Content = "Voltage:", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Right, FontSize = 10.0 }; var voltageValueLabel = new Label { FontWeight = FontWeights.Bold, Foreground = new SolidColorBrush(Colors.White), Content = measurement.VoltageMeasure, VerticalAlignment = VerticalAlignment.Center, FontSize = 10.0 }; var timeLabel = new Label { Foreground = new SolidColorBrush(Colors.Brown), Margin = new Thickness(0, 0, 2, 0), Content = "Time:", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Right, FontSize = 10.0 }; var timeValueLabel = new Label { FontWeight = FontWeights.Bold, Foreground = new SolidColorBrush(Colors.White), Content = measurement.TimeMeasure, VerticalAlignment = VerticalAlignment.Center, FontSize = 10.0 }; var button = new ButtonChrome(); button.Content = "X"; button.HorizontalAlignment = HorizontalAlignment.Right; button.FontSize = 10.0; button.Padding = new Thickness(4); button.CornerRadius = new CornerRadius(4); button.Cursor = Cursors.Hand; button.MouseDown += ButtonOnMouseDown; Grid.SetColumn(voltageValueLabel, 1); Grid.SetColumn(timeValueLabel, 1); Grid.SetRow(voltageLabel, 1); Grid.SetRow(voltageValueLabel, 1); Grid.SetRow(timeLabel, 2); Grid.SetRow(timeValueLabel, 2); Grid.SetColumn(button, 1); var title = new Label(); title.Content = "Measurement"; title.FontSize = 10; title.HorizontalAlignment = HorizontalAlignment.Right; title.Foreground = new SolidColorBrush(Colors.White); title.FontWeight = FontWeights.Bold; grid.Children.Add(title); grid.Children.Add(voltageLabel); grid.Children.Add(voltageValueLabel); grid.Children.Add(timeLabel); grid.Children.Add(timeValueLabel); grid.Children.Add(button); innerBorder.Child = grid; panel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var top = y3; if ((endPoint.X <= startPoint.X && endPoint.Y <= startPoint.Y) || (endPoint.X >= startPoint.X && endPoint.Y >= startPoint.Y)) { top -= panel.DesiredSize.Height; } Panel.SetZIndex(panel, 1); Canvas.SetLeft(panel, x3); Canvas.SetTop(panel, top); var polyLineArrowHead = AddArrowHead(midpoint, theta2); ControlCanvas.Children.Add(redline); ControlCanvas.Children.Add(polyLineArrowHead); ControlCanvas.Children.Add(panel); } }
private void Print(FileItem item, AutoExportPluginConfig configData) { try { PrintDialog dlg = new PrintDialog(); configData.IsRedy = false; configData.IsError = false; var conf = new PrintPluginViewModel(configData); var outfile = Path.Combine(Path.GetTempPath(), Path.GetFileName(item.FileName)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); System.Printing.PrintCapabilities capabilities = dlg.PrintQueue.GetPrintCapabilities(dlg.PrintTicket); var PageWidth = (int)capabilities.PageImageableArea.ExtentWidth; var PageHeight = (int)capabilities.PageImageableArea.ExtentHeight; var panel = new StackPanel { Margin = new Thickness(conf.Margin), }; var image = new Image { Source = BitmapLoader.Instance.LoadImage(outfile, PageWidth > PageHeight ? PageWidth : PageHeight, conf.Rotate ? 90 : 0), Width = PageWidth , Height = PageHeight, Stretch = Stretch.Uniform, }; panel.Children.Add(image); panel.UpdateLayout(); panel.Measure(new Size(PageWidth, PageHeight)); panel.Arrange(new Rect(new Point(0, 0), panel.DesiredSize)); panel.UpdateLayout(); dlg.PrintVisual(panel, item.Name); image.Source = null; panel.Children.Clear(); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error print file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }