public static void Wszystkie(Widoki.widok_matryca W, Rysowanie rys, bool YN = false) { Canvas canvas = W.canvas; Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.FileName = "matryca"; // Default file name dlg.DefaultExt = ".png"; // Default file extension dlg.Filter = "Plik png (.png)|*.png"; // Filter files by extension // Show save file dialog box if (YN == false) { Nullable <bool> result = dlg.ShowDialog(); if (result == true) { string filename = dlg.FileName; } for (int i = 0; i <= rys.liczba_matryc; i++) { rys.Rysuj(i); Char delimiter = '.'; String[] substrings = dlg.FileName.Split(delimiter); String nazwa = substrings[0] + i + "." + substrings[1]; _stworz(canvas, nazwa); } } else { dlg.FileName = System.AppDomain.CurrentDomain.BaseDirectory + "tmp\\matryca"; for (int i = 0; i <= rys.liczba_matryc; i++) { rys.Rysuj(i); String nazwa = dlg.FileName + i + ".png"; _stworz(canvas, nazwa, false); } } }
//miksowanko public void miksuj() { int S = Convert.ToInt32(MW.textBox_Czas.Text); int sekundCzas = Math.Max(S, 10); bool zaleznosc_od_t = true; ParameterizedThreadStart pts = new ParameterizedThreadStart(go); Thread thr = new Thread(pts); if (lista_obiektow.Count < 3) { zaleznosc_od_t = false; } int m_x = Matka.rozmiar_x; int m_y = Matka.rozmiar_y; Pasek = new Widoki.pasek(sekundCzas); Pasek.Show(); Pasek.status.Value = 0; List <int> tab_arg = new List <int>(); tab_arg.Add(m_x); tab_arg.Add(m_y); tab_arg.Add(odstep); thr.Start(tab_arg); var startTime = DateTime.UtcNow; do { UpdatePasek(); Task.Delay(400); } while ((DateTime.UtcNow - startTime < TimeSpan.FromSeconds(sekundCzas) && zaleznosc_od_t) || NAJLEPSZE == null); status = false; //tutaj kończymy działanie rozmieszczania i blokujemy możliwość dostępu do blokady startTime = DateTime.UtcNow; while (DateTime.UtcNow - startTime < TimeSpan.FromSeconds(2)) { } ; //odczekujemy sekunde try { thr.Abort(); //kto nie zdążył się zakończyć jest niszczony - nie należy tak zabijać wątków, ale wydaje mi się, że //z punktu widzenia naszych obliczeń nie ma niebezpieczeństw (pracujemy na paru listach i tablicach), oprócz //blokady, w ramach której ustalamy najlepsze rozmieszczenie - tego wątku nie chciałbym ubić bo manipuluje zmienną //która zawiera wynik obliczeń. dlatego po upływie czasu ustalanie najlepszego rozmieszczenia jest blokowane //i odczekujemy sekunde, aż te wątki, które już czekają na porównanie swojego wyniku z aktualnym najlepszym //mogły się porównać. Potem następuje abort. - metoda trochę mało wyrafinowana (zdroworozsądkowa) } catch (ThreadAbortException e) { } finally { } R = new Rysowanie(wm); R.Rysuj(wm, NAJLEPSZE); Pasek.Close(); InfoBox(); try { wm.Show(); } catch { } prz = new Przeciaganie(NAJLEPSZE, wm, this); MW.button_rozmiesc_Copy.IsEnabled = true; MW.button_rozmiesc_Copy1.IsEnabled = true; }
public static void PDF(Jądro J, Widoki.widok_matryca W, Rysowanie rys, List <string> listawybranychinformacji) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "PDF file (*.pdf)|*.pdf"; // try // { if (saveFileDialog.ShowDialog() == true) { string path = System.AppDomain.CurrentDomain.BaseDirectory + "tmp"; DirectoryInfo di = Directory.CreateDirectory(path); iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4); iTextSharp.text.pdf.PdfWriter wri = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(saveFileDialog.FileName, FileMode.Create)); doc.Open(); if (listawybranychinformacji[0] == "Cztery na stronę") { iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(2); iTextSharp.text.pdf.PdfPTable tableInfo = new iTextSharp.text.pdf.PdfPTable(1); if (listawybranychinformacji.Count > 1) { tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } float[] widths = new float[] { iTextSharp.text.PageSize.A4.Width - doc.LeftMargin, iTextSharp.text.PageSize.A4.Width - doc.RightMargin }; table.SetWidths(widths); table.DefaultCell.FixedHeight = (iTextSharp.text.PageSize.A4.Height - (2 * doc.BottomMargin)) / 2; table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; Wszystkie(W, rys, true); for (int i = 0; i <= rys.liczba_matryc; i++) { iTextSharp.text.Image PNG = iTextSharp.text.Image.GetInstance(System.AppDomain.CurrentDomain.BaseDirectory + "tmp\\matryca" + i + ".png"); RotationPNG(PNG); table.AddCell(PNG); if (rys.liczba_matryc + 1 % 2 != 0 && i + 1 > rys.liczba_matryc) { table.AddCell(new iTextSharp.text.pdf.PdfPCell(new iTextSharp.text.Phrase(""))); } if (listawybranychinformacji.Count > 1 && i % 4 == 0) { for (int k = i; k <= i + 3; k++) { GetInfoPDF(J, k, tableInfo, listawybranychinformacji); } doc.Add(tableInfo); doc.NewPage(); tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } if ((i % 4 == 3 && i != 0) || i + 1 > rys.liczba_matryc) { doc.Add(table); doc.NewPage(); table = new iTextSharp.text.pdf.PdfPTable(2); table.SetWidths(widths); table.DefaultCell.FixedHeight = (iTextSharp.text.PageSize.A4.Height - (2 * doc.BottomMargin)) / 2; table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; } } } else if (listawybranychinformacji[0] == "Dwie na stronę") { iTextSharp.text.pdf.PdfPTable tableInfo = new iTextSharp.text.pdf.PdfPTable(1); iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(1); if (listawybranychinformacji.Count > 1) { tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } float[] widths = new float[] { iTextSharp.text.PageSize.A4.Width - doc.LeftMargin }; table.SetWidths(widths); table.DefaultCell.FixedHeight = (iTextSharp.text.PageSize.A4.Height - (2 * doc.BottomMargin)) / 2; table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; Wszystkie(W, rys, true); for (int i = 0; i <= rys.liczba_matryc; i++) { iTextSharp.text.Image PNG = iTextSharp.text.Image.GetInstance(System.AppDomain.CurrentDomain.BaseDirectory + "tmp\\matryca" + i + ".png"); RotationPNG(PNG); table.AddCell(PNG); if (listawybranychinformacji.Count > 1 && i % 2 == 0) { for (int k = i; k <= i + 1; k++) { GetInfoPDF(J, k, tableInfo, listawybranychinformacji); } doc.Add(tableInfo); doc.NewPage(); tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } if (i % 2 != 0 && i != 0 || i + 1 > rys.liczba_matryc) { doc.Add(table); doc.NewPage(); table = new iTextSharp.text.pdf.PdfPTable(1); table.SetWidths(widths); table.DefaultCell.FixedHeight = (iTextSharp.text.PageSize.A4.Height - (2 * doc.BottomMargin)) / 2; table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; } } } else if (listawybranychinformacji[0] == "Jedna na stronę") { iTextSharp.text.pdf.PdfPTable tableInfo = new iTextSharp.text.pdf.PdfPTable(1); iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(1); table.DefaultCell.FixedHeight = (iTextSharp.text.PageSize.A4.Height - (2 * doc.BottomMargin)); table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; Wszystkie(W, rys, true); if (listawybranychinformacji.Count > 1) { tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } for (int i = 0; i <= rys.liczba_matryc; i++) { iTextSharp.text.Image PNG = iTextSharp.text.Image.GetInstance(System.AppDomain.CurrentDomain.BaseDirectory + "tmp\\matryca" + i + ".png"); RotationPNG(PNG); table.AddCell(PNG); if (listawybranychinformacji.Count > 1) { GetInfoPDF(J, i, tableInfo, listawybranychinformacji); doc.Add(tableInfo); doc.NewPage(); tableInfo = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } doc.Add(table); doc.NewPage(); table = new iTextSharp.text.pdf.PdfPTable(1); table.DefaultCell.VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE; table.DefaultCell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; } } else if (listawybranychinformacji[0] == "Brak") { if (listawybranychinformacji.Count > 1) { iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); for (int i = 0; i <= rys.liczba_matryc; i++) { GetInfoPDF(J, i, table, listawybranychinformacji); doc.Add(table); table = new iTextSharp.text.pdf.PdfPTable(listawybranychinformacji.Count - 1); } } } doc.Close(); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } di.Delete(); } // } // catch { // MessageBox.Show("Coś poszło nie tak!","Błąd!", MessageBoxButton.OK,MessageBoxImage.Warning); // } }