/// <summary>
        /// Prints this instance.
        /// </summary>
        public void Print()
        {
            using (new ApplicationWindowSession(ApplicationManager.MainWindow, true))
            {
                var dialog = new System.Windows.Controls.PrintDialog();

                var dialogResult = dialog.ShowDialog() ?? false;
                if (!dialogResult)
                {
                    return;
                }

                var flowDocument = new FlowDocument();

                var lines = this.Content.Split('\n');

                foreach (var line in lines)
                {
                    var myParagraph = new Paragraph {
                        Margin = new Thickness(0)
                    };
                    myParagraph.Inlines.Add(new Run(line));
                    flowDocument.Blocks.Add(myParagraph);
                }

                var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;

                dialog.PrintDocument(paginator, this.FullDisplayName);
            }
        }
        public void Print(FlowDocument fd)
        {
            var pd = new System.Windows.Controls.PrintDialog();

            if (pd.ShowDialog().Value)
            {
                IDocumentPaginatorSource document = fd as IDocumentPaginatorSource;
                try
                {
                    pd.PrintDocument(document.DocumentPaginator, "Printing FlowDocument.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
 public override void ExecutePrint(object parameter)
 {
     try
     {
         var printDialog = new System.Windows.Controls.PrintDialog();
         printDialog.PrintQueue  = CurrentPrinter;
         printDialog.PrintTicket = CurrentPrinter.UserPrintTicket;
         ShowProgressDialog();
         ((VisualPaginator)Paginator).PageCreated += PrintControlPresenterPageCreated;
         printDialog.PrintDocument(Paginator, "");
     }
     catch (Exception)
     {
     }
     finally
     {
         ProgressDialog.Hide();
     }
 }
示例#4
0
 public override void ExecutePrint(object parameter)
 {
     try
     {
         var printDialog = new System.Windows.Controls.PrintDialog();
         printDialog.PrintQueue  = CurrentPrinter;
         printDialog.PrintTicket = CurrentPrinter.UserPrintTicket;
         ShowProgressDialog();
         ((VisualPaginator)Paginator).PageCreated += PrintControlPresenterPageCreated;
         printDialog.PrintDocument(Paginator, "");
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
     }
     finally
     {
         ProgressDialog.Hide();
     }
 }
 public override void ExecutePrint(object parameter)
 {
     try
     {
         var printDialog = new System.Windows.Controls.PrintDialog();
         printDialog.PrintQueue = CurrentPrinter;
         printDialog.PrintTicket = CurrentPrinter.UserPrintTicket;
         ShowProgressDialog();
         ((VisualPaginator)Paginator).PageCreated += PrintControlPresenterPageCreated;
         printDialog.PrintDocument(Paginator, "");
     }
     catch (Exception)
     {
     }
     finally
     {
         ProgressDialog.Hide();
     }
 }
示例#6
0
        private void GenerateReport()
        {
            System.Windows.Controls.PrintDialog printDialog = new System.Windows.Controls.PrintDialog();
            if ((bool)printDialog.ShowDialog().GetValueOrDefault())
            {
                FlowDocument  flowDocument = new FlowDocument();
                Paragraph     paragraph;
                Table         table = new Table();
                TableRowGroup rg    = new TableRowGroup();
                TableRow      row   = new TableRow();

                table.CellSpacing        = 0;
                row.FontFamily           = new System.Windows.Media.FontFamily("Calibri");
                row.FontSize             = 10;
                flowDocument.ColumnWidth = printDialog.PrintableAreaWidth;
                flowDocument.PageHeight  = printDialog.PrintableAreaHeight;

                int columnCount = 9;

                //Report Header and Simulation Parameters and Settings
                //Title and Haskell Logo
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 36;
                paragraph.Inlines.Add(new Run("Simulation Report"));

                BitmapImage bm = new BitmapImage(new Uri(@"C:\Users\acduniga\source\repos\OEE_Utility\OEE_ExcelAddIn_2010\Resources\Images\Haskell_Logo.png", UriKind.Absolute));
                System.Windows.Controls.Image image = new System.Windows.Controls.Image();
                image.Height = 50;
                image.Width  = 300;
                image.Source = bm;
                Figure figure = new Figure();
                figure.Height           = new FigureLength(100);
                figure.Width            = new FigureLength(310);
                figure.HorizontalAnchor = FigureHorizontalAnchor.PageRight;
                figure.VerticalAnchor   = FigureVerticalAnchor.PageTop;
                figure.Blocks.Add(new BlockUIContainer(image));

                paragraph.Inlines.Add(figure);
                flowDocument.Blocks.Add(paragraph);

                //Simulation Number of Runs
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Number of Runs: {0}", num_runs));
                flowDocument.Blocks.Add(paragraph);

                //Simulation Minutes per Run
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Minutes per Run: {0}", Sim_Time_Minutes));
                flowDocument.Blocks.Add(paragraph);

                //Simulation Start Time
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Simulation Started at: {0}", DateTime.Now.ToString()));
                flowDocument.Blocks.Add(paragraph);

                //Simulation Computation Time
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Simulation Computation Time: {0} seconds", simtime));
                flowDocument.Blocks.Add(paragraph);

                //
                paragraph        = new Paragraph();
                paragraph.Margin = new Thickness(0);
                paragraph.Inlines.Add(new Run(" "));
                flowDocument.Blocks.Add(paragraph);

                //Overall run OEE Statistics header
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 24;
                paragraph.Inlines.Add("OEE Performance Statistics");
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //Average OEE
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Average OEE: {0}%", average));
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //Maximum OEE
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Maximum OEE: {0}%", max));
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //Minimum OEE
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("Minimum OEE: {0}%", min));
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //Standard Deviation of OEEs
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("OEE Standard Deviation: {0}%", stddev));
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //95% quantile of OEE
                paragraph            = new Paragraph();
                paragraph.Margin     = new Thickness(0);
                paragraph.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                paragraph.FontSize   = 14;
                paragraph.Inlines.Add(String.Format("95% OEE Quantile: {0}%", high_quantile));
                paragraph.TextAlignment = TextAlignment.Center;
                flowDocument.Blocks.Add(paragraph);

                //
                paragraph        = new Paragraph();
                paragraph.Margin = new Thickness(0);
                paragraph.Inlines.Add(new Run(" "));
                flowDocument.Blocks.Add(paragraph);

                //Table of unit op data
                for (int i = 0; i < columnCount; i++)
                {
                    table.Columns.Add(new TableColumn());

                    switch (i)
                    {
                    case 0:
                        table.Columns[i].Name  = "Unit_Op";
                        table.Columns[i].Width = new GridLength(140);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Unit Op"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Left;
                        break;

                    case 1:
                        table.Columns[i].Name  = "Design_Speed";
                        table.Columns[i].Width = new GridLength(70);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Design Speed"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 2:
                        table.Columns[i].Name  = "Actual_Speed";
                        table.Columns[i].Width = new GridLength(70);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Actual Speed"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 3:
                        table.Columns[i].Name  = "MTTR";
                        table.Columns[i].Width = new GridLength(40);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("MTTR"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 4:
                        table.Columns[i].Name  = "MTBF";
                        table.Columns[i].Width = new GridLength(40);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("MTBF"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 5:
                        table.Columns[i].Name  = "Availability_Percentage";
                        table.Columns[i].Width = new GridLength(70);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Availability (%)"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 6:
                        table.Columns[i].Name  = "Quality_Loss_Percentage";
                        table.Columns[i].Width = new GridLength(75);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Quality Loss (%)"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 7:
                        table.Columns[i].Name  = "Buffer";
                        table.Columns[i].Width = new GridLength(35);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Buffer"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;

                    case 8:
                        table.Columns[i].Name  = "Average_OEE";
                        table.Columns[i].Width = new GridLength(60);
                        row.Cells.Add(new TableCell(new Paragraph(new Run("Average OEE"))));
                        row.Cells[i].BorderThickness = new Thickness(0, 0, 0, 0.5);
                        row.Cells[i].BorderBrush     = new SolidColorBrush(Colors.DarkGray);
                        row.Cells[i].TextAlignment   = TextAlignment.Right;
                        break;
                    }
                }
                rg.Rows.Add(row);

                int  k          = 0; //Used to track Unit_Ops
                bool alternator = false;
                foreach (IOperations iop in process.Activities)
                {
                    row            = new TableRow();
                    row.FontFamily = new System.Windows.Media.FontFamily("Calibri");
                    row.FontSize   = 10;

                    if (iop.IsUnitOp())
                    {
                        Unit_Op  op = (Unit_Op)iop;
                        string   temp_availability = Math.Round(((double)op.MTBF / (double)(op.MTTR + op.MTBF)) * 100, 2).ToString();
                        string   temp_qualityloss  = (op.QualityLoss * 100).ToString();
                        string   temp_averageoee   = Math.Round((oee[k].Average()) * 100, 2).ToString();
                        string[] precise_strings   = UnifyStringPrecision(temp_availability, temp_qualityloss, temp_averageoee);

                        row.Cells.Add(new TableCell(new Paragraph(new Run(op.Name))));
                        row.Cells[0].TextAlignment = TextAlignment.Left;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(op.DesignSpeed.ToString()))));
                        row.Cells[1].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run((op.DesignSpeed - op.SpeedLoss).ToString()))));
                        row.Cells[2].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run((op.MTTR / 60).ToString()))));
                        row.Cells[3].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run((op.MTBF / 60).ToString()))));
                        row.Cells[4].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(precise_strings[0]))));
                        row.Cells[5].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(precise_strings[1]))));
                        row.Cells[6].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[7].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(precise_strings[2]))));
                        row.Cells[8].TextAlignment = TextAlignment.Right;
                        k++;
                    }
                    else if (iop.IsBuffer())
                    {
                        Buffer buff = (Buffer)iop;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(buff.Name))));
                        row.Cells[0].TextAlignment = TextAlignment.Left;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(buff.DesignSpeed.ToString()))));
                        row.Cells[1].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(buff.DesignSpeed.ToString()))));
                        row.Cells[2].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[3].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[4].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[5].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[6].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run(buff.Buffer_Capacity.ToString()))));
                        row.Cells[7].TextAlignment = TextAlignment.Right;
                        row.Cells.Add(new TableCell(new Paragraph(new Run("-"))));
                        row.Cells[8].TextAlignment = TextAlignment.Right;
                    }

                    rg.Rows.Add(row);
                    if (!alternator)
                    {
                        //rg.Rows[rg.Rows.Count - 1].Background = new SolidColorBrush(Colors.LightGray);
                        alternator = true;
                    }
                    else
                    {
                        alternator = false;
                    }
                }

                table.CellSpacing = 0;
                table.RowGroups.Add(rg);

                int table_width = 0;
                foreach (TableColumn column in table.Columns)
                {
                    table_width = table_width + (int)column.Width.Value;
                }
                table.Margin = new Thickness(((int)flowDocument.ColumnWidth - table_width - 50) / 2, 0, 0, 0);
                flowDocument.Blocks.Add(table);

                for (int i = 0; i < buffer_fill.Count; i++)
                {
                    int[] xvals = new int[buffer_fill[i].Length];
                    for (int j = 0; j < buffer_fill[i].Length; j++)
                    {
                        xvals[j] = j + 1;
                    }

                    Chart buff_chart = new Chart();
                    buff_chart.Size = new System.Drawing.Size(1600, 450);
                    ChartArea area = new ChartArea();
                    area.Name        = buffers[i].Name;
                    area.AxisX.Title = "Simulation Minutes";
                    area.AxisY.Title = "Buffer Fill (%)";
                    area.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
                    area.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
                    area.AxisX.LabelStyle.Font     = new Font("Calibri", 10);
                    area.AxisY.LabelStyle.Font     = new Font("Calibri", 10);
                    buff_chart.ChartAreas.Add(area);

                    Series series = new Series();
                    series.Name       = "Buffer Fill (%)";
                    series.ChartType  = SeriesChartType.Line;
                    series.XValueType = ChartValueType.Int32;
                    series.YValueType = ChartValueType.Auto;
                    buff_chart.Series.Add(series);

                    buff_chart.Titles.Add(buffers[i].Name);
                    buff_chart.Titles[0].Font = new Font("Calibra", 14, System.Drawing.FontStyle.Bold);
                    buff_chart.Titles[0].DockedToChartArea = buffers[i].Name;

                    double[] yvalues = buffer_fill[i].Select(x => (double)x / ((Buffer)process.Activities[3]).Buffer_Capacity).ToArray();

                    buff_chart.Series["Buffer Fill (%)"].Points.DataBindXY(xvals, yvalues);

                    buff_chart.Invalidate();
                    Bitmap chart_bmp = new Bitmap(buff_chart.Size.Width, buff_chart.Size.Height);
                    buff_chart.DrawToBitmap(chart_bmp, new Rectangle(0, 0, chart_bmp.Size.Width, chart_bmp.Size.Height));

                    BitmapImage chart_bi = new BitmapImage();
                    chart_bi = chart_bmp.ToBitmapImage();
                    System.Windows.Controls.Image chart_img = new System.Windows.Controls.Image();
                    chart_img.Height        = 210;
                    chart_img.Width         = 700;
                    chart_img.Source        = chart_bi;
                    figure                  = new Figure();
                    figure.Height           = new FigureLength(220);
                    figure.Width            = new FigureLength(700);
                    figure.HorizontalAnchor = FigureHorizontalAnchor.ColumnCenter;
                    figure.Blocks.Add(new BlockUIContainer(chart_img));

                    paragraph = new Paragraph();
                    paragraph.Inlines.Add(figure);
                    flowDocument.Blocks.Add(paragraph);
                }

                DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
                printDialog.PrintDocument(paginator, "Simulation Report " + DateTime.Now.ToString());
            }
        }
        public override void ExecutePrint(object parameter)
        {
            try
            {
                var printDialog = new System.Windows.Controls.PrintDialog();
                printDialog.PrintQueue = CurrentPrinter;
                printDialog.PrintTicket = CurrentPrinter.UserPrintTicket;
                ShowProgressDialog();
                ((VisualPaginator)Paginator).PageCreated += PrintControlPresenterPageCreated;
				printDialog.PrintDocument(Paginator, "");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            finally
            {
                ProgressDialog.Hide();
            }
        }