Advertisement
MaxxxxiorS

projekt taki o fajny

Jan 29th, 2023
825
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 42.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace Projekt3_Podlecki63427
  13. {
  14.     public partial class IndywidualnyNr3_Podlecki63427 : Form
  15.     {
  16.         // deklaracje stałych
  17.         const ushort PromieńPunktu = 2;
  18.         // deklaracja zmiennych referencyjnych narzędzi graficznych
  19.         Graphics Rysownica;
  20.         Pen Pióro;
  21.         SolidBrush Pędzel;
  22.         Point Punkt = Point.Empty;
  23.  
  24.         //Point[] punkty = {
  25.         //new Point(0, 100),
  26.         //new Point(50, 80),
  27.         //new Point(100, 20),
  28.         //new Point(150, 80),
  29.         //new Point(200, 100)};
  30.  
  31.         struct OpisKrzywejKardynalnej
  32.         {
  33.             public Point PunktP02;
  34.             public Point PunktP12;
  35.             public Point PunktP22;
  36.             public Point PunktP32;
  37.             public ushort NumerPunktuKontrolnego2;
  38.             public ushort PromieńPunktuKontrolnego2;
  39.         }
  40.         OpisKrzywejKardynalnej Kardynalna;
  41.  
  42.         struct OpisKrzywejBeziera
  43.         {
  44.             public Point PunktP0;
  45.             public Point PunktP1;
  46.             public Point PunktP2;
  47.             public Point PunktP3;
  48.             public ushort NumerPunktuKontrolnego;
  49.             public ushort PromieńPunktuKontrolnego;
  50.         }
  51.         // deklaracja zmiennej dla Beziera
  52.         OpisKrzywejBeziera Bezier;
  53.         Font FontOpisuPunktów = new Font("Arial", 10, FontStyle.Italic);
  54.  
  55.         public IndywidualnyNr3_Podlecki63427()
  56.         {
  57.             InitializeComponent();
  58.  
  59.             //"podpięcie" do kontrolki pbRysownica mapy bitowej
  60.             pbRysownica.Image = new Bitmap(pbRysownica.Width, pbRysownica.Height);
  61.             // utworzenie egzemplarza powierzchni graficznej na BitMapie
  62.             Rysownica = Graphics.FromImage(pbRysownica.Image);
  63.             // utworznie egzmplarzy narzędzi graficznych
  64.             Pióro = new Pen(Color.Red, 1.7F);
  65.             Pióro.DashStyle = DashStyle.Dash;
  66.             Pióro.StartCap = LineCap.Round;
  67.             Pióro.EndCap = LineCap.Round;
  68.  
  69.             Pędzel = new SolidBrush(Color.Blue);
  70.         }
  71.  
  72.         private void IndywidualnyNr3_Podlecki63427_Load(object sender, EventArgs e)
  73.         {
  74.  
  75.         }
  76.  
  77.         private void IndywidualnyNr3_Podlecki63427_FormClosing(object sender, FormClosingEventArgs e)
  78.         {
  79.             //Wypisanie w oknie dialogowym MessageBox pytania, czy rzeczywiście ma
  80.             DialogResult OknoMessageBox = MessageBox.Show("Czy rzeczywiście chcesz zamknąć ten formularz i powrócić do KokpituProjektuNr3",
  81.                 this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
  82.             //odzczytanie decyzji Użytkownika programu
  83.             if (OknoMessageBox == DialogResult.Yes)
  84.             {//odszukanie egzemplarza formularza głównego : KokpitProjektuNr3
  85.                 foreach (Form Formularz in Application.OpenForms)
  86.                 {
  87.                     //Sprawdzenie czy zmienna referencyjna formularza określa poszukiwany formularz
  88.                     if (Formularz.Name == "KokpitProjektuNr3_Garlicki63501")
  89.                     {
  90.                         //ukryczie formularza bierzącego
  91.                         this.Hide();
  92.                         //odsłoniecie formularza głównego
  93.                         Formularz.Show();
  94.                         //potwierdzenie zamkniecia formularza
  95.                         e.Cancel = true;
  96.                         //zakończenie obsługi zdarzenia FormClosing
  97.                         return;
  98.                     }
  99.                     //Ktoś nie chcący usuna egzemplarz formularza kokpit projektu 2
  100.                     //gdy jesteśmy tutaj to ktoś nie chcąco usunął egzemtlarz formularza głównego z kolekcji OpenForms
  101.                     //utworzenie nowego egzemtlarza formularza głównego
  102.                     KokpitProjektuNr3_Podlecki63427 FormularzGłówny = new KokpitProjektuNr3_Podlecki63427();
  103.                     //ukrycie gierzącego formularza
  104.                     this.Hide();
  105.                     //odsłonięcie formularza głównego
  106.                     FormularzGłówny.Show();
  107.                     //potweirdzenie przez parametr 'e' zamknięcie formularza
  108.                     e.Cancel = true;
  109.                     //wyjście z metody obsługi zdarzenia FormClosing
  110.                     return;
  111.                 }
  112.             }
  113.             else
  114.             {
  115.                 //anulowanie zamkniecia formularza bierzącego
  116.                 e.Cancel = false;
  117.             }
  118.         }
  119.  
  120.         private void pbRysownica_MouseDown(object sender, MouseEventArgs e)
  121.         {// wizualizacja współrzędnych aktualnego położenia myszy
  122.             lblX.Text = e.Location.X.ToString();
  123.             lblY.Text = e.Location.Y.ToString();
  124.             if (e.Button == MouseButtons.Left)
  125.                 // zapamiętanie "miejsca" kliknięcia
  126.                 Punkt = e.Location;
  127.         }
  128.  
  129.         private void pbRysownica_MouseMove(object sender, MouseEventArgs e)
  130.         {
  131.             // wizualizacja współrzędnych aktualnego położenia myszy
  132.             lblX.Text = e.Location.X.ToString();
  133.             lblY.Text = e.Location.Y.ToString();
  134.             // czy zdarzenie MouseMove jest wywołane w trakcie wciśniętego lewego przycisku myszy
  135.             if (e.Button == MouseButtons.Left)
  136.             {
  137.                 //if (rdbLiniaKreślonaMyszką.Checked)
  138.                 ////wykreślenie linii
  139.                 //{
  140.                 //    Rysownica.DrawLine(Pióro, Punkt.X, Punkt.Y, e.Location.X, e.Location.Y);
  141.                 //    Punkt = e.Location;
  142.                 //}
  143.             }
  144.  
  145.             // odświeżenie powierzchni graficznej
  146.             pbRysownica.Refresh();
  147.         }
  148.  
  149.         private void pbRysownica_MouseUp(object sender, MouseEventArgs e)
  150.         {
  151.             // wizualizacja współrzędnych aktualnego położenia myszy
  152.             lblX.Text = e.Location.X.ToString();
  153.             lblY.Text = e.Location.Y.ToString();
  154.             // ustalenie parametrów prostokąta, w którym będą narysowane figury geometryczne
  155.             int LewyGórnyNarożnikX = (Punkt.X > e.Location.X) ? e.Location.X : Punkt.X;
  156.             int LewyGórnyNarożnikY = (Punkt.Y > e.Location.Y) ? e.Location.Y : Punkt.Y;
  157.             int Szerokość = Math.Abs(Punkt.X - e.Location.X);
  158.             int Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  159.             // sprawdzenie czy zdarzenie MouseUp zostało "wywołane" zwolnieniem lewego przycisku myszy
  160.             if (e.Button == MouseButtons.Left)
  161.             {
  162.                 //if (rdbKwadrat.Checked)
  163.                 //{
  164.                 //    int PromieńWielokąta; // == promień okręgu opisanego na wierzchołkach wielokąta
  165.                 //    // ustawienie stanu braku aktywności dla kontrolki umożliwiającej ustalenie liczby kątów
  166.                 //    double KątMiędzyWierzchołkamiWielokąta = 90.0;
  167.                 //    double KątPołożeniaPierwszegoWierzchołkaWielokąta = 0.0;
  168.                 //    // obliczenie promienia wielokąta
  169.                 //    PromieńWielokąta = Szerokość;
  170.                 //    // wyznaczenie współrzędnych wierzchołków wielokąta
  171.                 //    Point[] WierzchołkiWielokąta = new Point[4];
  172.                 //    for (int i = 0; i < 4; i++)
  173.                 //    {
  174.                 //        WierzchołkiWielokąta[i].X = LewyGórnyNarożnikX +
  175.                 //            (int)(PromieńWielokąta * Math.Cos(Math.PI * (KątPołożeniaPierwszegoWierzchołkaWielokąta +
  176.                 //            i * KątMiędzyWierzchołkamiWielokąta) / 180));
  177.                 //        WierzchołkiWielokąta[i].Y = LewyGórnyNarożnikY -
  178.                 //            (int)(PromieńWielokąta * Math.Sin(Math.PI * (KątPołożeniaPierwszegoWierzchołkaWielokąta +
  179.                 //            i * KątMiędzyWierzchołkamiWielokąta) / 180));
  180.                 //    }
  181.                 //    // wykreślenie wielokąta
  182.                 //    Rysownica.DrawPolygon(Pióro, WierzchołkiWielokąta);
  183.                 //    //Rysownica.DrawRectangle(Pióro, Le);
  184.                 //    //Rysownica.FillEllipse(Pędzel, Punkt.X - PromieńPunktu, Punkt.Y - PromieńPunktu, 2 * PromieńPunktu, 2 * PromieńPunktu);
  185.                 //}
  186.                 if (rdbProstokąt.Checked)
  187.                 {
  188.                     LewyGórnyNarożnikX = e.Location.X;
  189.                     LewyGórnyNarożnikY = e.Location.Y;
  190.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  191.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  192.                     Rysownica.DrawRectangle(Pióro, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  193.                 }
  194.                 if (rdbKwadrat.Checked)
  195.                 {
  196.                     //int PromieńWielokąta; // == promień okręgu opisanego na wierzchołkach wielokąta
  197.                     //// ustawienie stanu braku aktywności dla kontrolki umożliwiającej ustalenie liczby kątów
  198.                     //double KątMiędzyWierzchołkamiWielokąta = 90.0;
  199.                     //double KątPołożeniaPierwszegoWierzchołkaWielokąta = 0.0;
  200.                     //// obliczenie promienia wielokąta
  201.                     //PromieńWielokąta = Szerokość;
  202.                     //// wyznaczenie współrzędnych wierzchołków wielokąta
  203.                     //Point[] WierzchołkiWielokąta = new Point[4];
  204.                     //for (int i = 0; i < 4; i++)
  205.                     //{
  206.                     //    WierzchołkiWielokąta[i].X = LewyGórnyNarożnikX +
  207.                     //        (int)(PromieńWielokąta * Math.Cos(Math.PI * (KątPołożeniaPierwszegoWierzchołkaWielokąta +
  208.                     //        i * KątMiędzyWierzchołkamiWielokąta) / 180));
  209.                     //    WierzchołkiWielokąta[i].Y = LewyGórnyNarożnikY -
  210.                     //        (int)(PromieńWielokąta * Math.Sin(Math.PI * (KątPołożeniaPierwszegoWierzchołkaWielokąta +
  211.                     //        i * KątMiędzyWierzchołkamiWielokąta) / 180));
  212.                     //}
  213.                     //// wykreślenie wielokąta
  214.                     //Rysownica.DrawPolygon(Pióro, WierzchołkiWielokąta);
  215.  
  216.                     LewyGórnyNarożnikX = e.Location.X;
  217.                     LewyGórnyNarożnikY = e.Location.Y;
  218.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  219.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  220.                     Szerokość = Wysokość;
  221.                     Rysownica.DrawRectangle(Pióro, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Wysokość, Wysokość);
  222.                 }
  223.                 if (rdbProstokątWypełniony.Checked)
  224.                 {
  225.                     LewyGórnyNarożnikX = e.Location.X;
  226.                     LewyGórnyNarożnikY = e.Location.Y;
  227.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  228.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  229.                     Rysownica.FillRectangle(Pędzel, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  230.                 }
  231.                 if (rdbKwadratWypełniony.Checked)
  232.                 {
  233.                     LewyGórnyNarożnikX = e.Location.X;
  234.                     LewyGórnyNarożnikY = e.Location.Y;
  235.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  236.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  237.                     Szerokość = Wysokość;
  238.                     Rysownica.FillRectangle(Pędzel, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  239.                 }
  240.                 if (rdbElipsa.Checked)
  241.                 {
  242.                     LewyGórnyNarożnikX = e.Location.X;
  243.                     LewyGórnyNarożnikY = e.Location.Y;
  244.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  245.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  246.                     Rysownica.DrawEllipse(Pióro, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  247.                 }
  248.                 if (rdbElipsaWypełniona.Checked)
  249.                 {
  250.                     //LewyGórnyNarożnikX = e.Location.X;
  251.                     //LewyGórnyNarożnikY = e.Location.Y;
  252.                     //Szerokość = Math.Abs(Punkt.X - e.Location.X);
  253.                     //Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  254.                     Rysownica.FillEllipse(Pędzel, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  255.                 }
  256.                 if (rdbOkrąg.Checked)
  257.                 {
  258.                     LewyGórnyNarożnikX = e.Location.X;
  259.                     LewyGórnyNarożnikY = e.Location.Y;
  260.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  261.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  262.                     Szerokość = Wysokość;
  263.                     Rysownica.DrawEllipse(Pióro, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  264.                 }
  265.                 if (rdbKoło.Checked)
  266.                 {
  267.                     LewyGórnyNarożnikX = e.Location.X;
  268.                     LewyGórnyNarożnikY = e.Location.Y;
  269.                     Szerokość = Math.Abs(Punkt.X - e.Location.X);
  270.                     Wysokość = Math.Abs(Punkt.Y - e.Location.Y);
  271.                     Szerokość = Wysokość;
  272.                     Rysownica.FillEllipse(Pędzel, LewyGórnyNarożnikX, LewyGórnyNarożnikY, Szerokość, Wysokość);
  273.                 }
  274.                 if (rdbWOZKK.Checked)
  275.                 {
  276.                     int x02;
  277.                     int y02;
  278.                     int x12;
  279.                     int y12;
  280.                     int x22;
  281.                     int y22;
  282.                     int x32;
  283.                     int y32;
  284.                     // sprawdzenie czy to jest pierwszy Punkt P0 Krzywej Beziera
  285.                     if (gbWybórFoguriLinii.Enabled)
  286.                     {
  287.                         // ustawienie stanu na brak aktywności dla kontenera gbWybórFoguriLinii
  288.                         gbWybórFoguriLinii.Enabled = false;
  289.                         // ustawienie stanu początkowego tworzonego opisu Krzywej Beziera
  290.                         Kardynalna.NumerPunktuKontrolnego2 = 0;
  291.                         Kardynalna.PromieńPunktuKontrolnego2 = 5;
  292.                         // przechowanie współrzędnych aktualnego położenia myszy
  293.                         Kardynalna.PunktP02 = e.Location;
  294.                         // wizualizacja punktu P0
  295.                         using (SolidBrush Pędzel = new SolidBrush(Color.Black))
  296.                         {
  297.                             // wykreślenie punktu P0
  298.                             Rysownica.FillEllipse(Pędzel,
  299.                                 e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  300.                                 e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  301.                                 2 * Kardynalna.PromieńPunktuKontrolnego2,
  302.                                 2 * Kardynalna.PromieńPunktuKontrolnego2);
  303.                             // wykreślenie opisu Punktu Kontrolnego P0
  304.                             Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  305.                         } // tutaj nastąpi zwolnienie pędzla
  306.                         // Od if (WybórFiguriLinii.Eneabled)
  307.                     }
  308.                     else
  309.                     {
  310.                         // przechowanie współrzędnych kolejnych punktów
  311.                         // zwiększenie licznika punktów kontrolnych
  312.                         Kardynalna.NumerPunktuKontrolnego2++;
  313.                         // przechowanie wartości współrzędnych punktu kontrolnego o numerze w kardynalna.NumerPunktuKontrolnego2
  314.                         switch (Kardynalna.NumerPunktuKontrolnego2)
  315.                         {
  316.                             case 1: Kardynalna.PunktP12 = e.Location; break;
  317.                             case 2: Kardynalna.PunktP22 = e.Location; break;
  318.                             case 3: Kardynalna.PunktP32 = e.Location; break;
  319.                         }
  320.                         // sprawdzenie czy to jest ostatni punkt krzywej kardynalnej
  321.                         if (Kardynalna.NumerPunktuKontrolnego2 < 3)
  322.                         {
  323.                             // wykreślenie punktu kontrolnegokrzywej kardynalnej
  324.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  325.                             {
  326.                                 Rysownica.FillEllipse(Pędzel,
  327.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  328.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  329.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  330.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  331.                                 // wykreślenie opisu punktu kontrolnego
  332.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  333.                             }
  334.                         }
  335.                         else
  336.                         {
  337.                             // wykreślenie punktu końcowego krzywej kardynalnej
  338.                             // wykreślenie punktu kontrolnego krzywej kardynalnej
  339.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  340.                             {
  341.                                 Rysownica.FillEllipse(Pędzel,
  342.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  343.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  344.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  345.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  346.                                 // wykreślenie opisu punktu kontrolnego
  347.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  348.                             }
  349.                             x02 = Kardynalna.PunktP02.X;
  350.                             y02 = Kardynalna.PunktP02.Y;
  351.                             x12 = Kardynalna.PunktP12.X;
  352.                             y12 = Kardynalna.PunktP12.Y;
  353.                             x22 = Kardynalna.PunktP22.X;
  354.                             y22 = Kardynalna.PunktP22.Y;
  355.                             x32 = Kardynalna.PunktP32.X;
  356.                             y32 = Kardynalna.PunktP32.Y;
  357.                             Point PunktP02 = new Point(x02, y02);
  358.                             Point PunktP12 = new Point(x12, y12);
  359.                             Point PunktP22 = new Point(x22, y22);
  360.                             Point PunktP32 = new Point(x32, y32);
  361.                             Point[] punkty = { PunktP02, PunktP12, PunktP22, PunktP32 };
  362.                             // wykreślenie krzywej kardynalnej
  363.                             Rysownica.FillClosedCurve(Pędzel, punkty);
  364.                             Rysownica.DrawClosedCurve(Pióro, punkty);
  365.                             //Rysownica.DrawCurve(Pióro, punkty);
  366.                             // ponowne uaktywnienie kontenera
  367.                             gbWybórFoguriLinii.Enabled = true;
  368.                         }
  369.  
  370.                     }
  371.                 }
  372.                 if (rdbWZKK.Checked)
  373.                 {
  374.                     int x02;
  375.                     int y02;
  376.                     int x12;
  377.                     int y12;
  378.                     int x22;
  379.                     int y22;
  380.                     int x32;
  381.                     int y32;
  382.                     // sprawdzenie czy to jest pierwszy Punkt P0 Krzywej Beziera
  383.                     if (gbWybórFoguriLinii.Enabled)
  384.                     {
  385.                         // ustawienie stanu na brak aktywności dla kontenera gbWybórFoguriLinii
  386.                         gbWybórFoguriLinii.Enabled = false;
  387.                         // ustawienie stanu początkowego tworzonego opisu Krzywej Beziera
  388.                         Kardynalna.NumerPunktuKontrolnego2 = 0;
  389.                         Kardynalna.PromieńPunktuKontrolnego2 = 5;
  390.                         // przechowanie współrzędnych aktualnego położenia myszy
  391.                         Kardynalna.PunktP02 = e.Location;
  392.                         // wizualizacja punktu P0
  393.                         using (SolidBrush Pędzel = new SolidBrush(Color.Black))
  394.                         {
  395.                             // wykreślenie punktu P0
  396.                             Rysownica.FillEllipse(Pędzel,
  397.                                 e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  398.                                 e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  399.                                 2 * Kardynalna.PromieńPunktuKontrolnego2,
  400.                                 2 * Kardynalna.PromieńPunktuKontrolnego2);
  401.                             // wykreślenie opisu Punktu Kontrolnego P0
  402.                             Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  403.                         } // tutaj nastąpi zwolnienie pędzla
  404.                         // Od if (WybórFiguriLinii.Eneabled)
  405.                     }
  406.                     else
  407.                     {
  408.                         // przechowanie współrzędnych kolejnych punktów
  409.                         // zwiększenie licznika punktów kontrolnych
  410.                         Kardynalna.NumerPunktuKontrolnego2++;
  411.                         // przechowanie wartości współrzędnych punktu kontrolnego o numerze w kardynalna.NumerPunktuKontrolnego2
  412.                         switch (Kardynalna.NumerPunktuKontrolnego2)
  413.                         {
  414.                             case 1: Kardynalna.PunktP12 = e.Location; break;
  415.                             case 2: Kardynalna.PunktP22 = e.Location; break;
  416.                             case 3: Kardynalna.PunktP32 = e.Location; break;
  417.                         }
  418.                         // sprawdzenie czy to jest ostatni punkt krzywej kardynalnej
  419.                         if (Kardynalna.NumerPunktuKontrolnego2 < 3)
  420.                         {
  421.                             // wykreślenie punktu kontrolnegokrzywej kardynalnej
  422.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  423.                             {
  424.                                 Rysownica.FillEllipse(Pędzel,
  425.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  426.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  427.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  428.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  429.                                 // wykreślenie opisu punktu kontrolnego
  430.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  431.                             }
  432.                         }
  433.                         else
  434.                         {
  435.                             // wykreślenie punktu końcowego krzywej kardynalnej
  436.                             // wykreślenie punktu kontrolnego krzywej kardynalnej
  437.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  438.                             {
  439.                                 Rysownica.FillEllipse(Pędzel,
  440.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  441.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  442.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  443.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  444.                                 // wykreślenie opisu punktu kontrolnego
  445.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  446.                             }
  447.                             x02 = Kardynalna.PunktP02.X;
  448.                             y02 = Kardynalna.PunktP02.Y;
  449.                             x12 = Kardynalna.PunktP12.X;
  450.                             y12 = Kardynalna.PunktP12.Y;
  451.                             x22 = Kardynalna.PunktP22.X;
  452.                             y22 = Kardynalna.PunktP22.Y;
  453.                             x32 = Kardynalna.PunktP32.X;
  454.                             y32 = Kardynalna.PunktP32.Y;
  455.                             Point PunktP02 = new Point(x02, y02);
  456.                             Point PunktP12 = new Point(x12, y12);
  457.                             Point PunktP22 = new Point(x22, y22);
  458.                             Point PunktP32 = new Point(x32, y32);
  459.                             Point[] punkty = { PunktP02, PunktP12, PunktP22, PunktP32 };
  460.                             // wykreślenie krzywej kardynalnej
  461.                             Rysownica.FillClosedCurve(Pędzel, punkty);
  462.                             //Rysownica.DrawCurve(Pióro, punkty);
  463.                             // ponowne uaktywnienie kontenera
  464.                             gbWybórFoguriLinii.Enabled = true;
  465.                         }
  466.  
  467.                     }
  468.                 }
  469.                 if (rdbZamkniętaKrzywaKardynalna.Checked)
  470.                 {
  471.                     int x02;
  472.                     int y02;
  473.                     int x12;
  474.                     int y12;
  475.                     int x22;
  476.                     int y22;
  477.                     int x32;
  478.                     int y32;
  479.                     // sprawdzenie czy to jest pierwszy Punkt P0 Krzywej Beziera
  480.                     if (gbWybórFoguriLinii.Enabled)
  481.                     {
  482.                         // ustawienie stanu na brak aktywności dla kontenera gbWybórFoguriLinii
  483.                         gbWybórFoguriLinii.Enabled = false;
  484.                         // ustawienie stanu początkowego tworzonego opisu Krzywej Beziera
  485.                         Kardynalna.NumerPunktuKontrolnego2 = 0;
  486.                         Kardynalna.PromieńPunktuKontrolnego2 = 5;
  487.                         // przechowanie współrzędnych aktualnego położenia myszy
  488.                         Kardynalna.PunktP02 = e.Location;
  489.                         // wizualizacja punktu P0
  490.                         using (SolidBrush Pędzel = new SolidBrush(Color.Black))
  491.                         {
  492.                             // wykreślenie punktu P0
  493.                             Rysownica.FillEllipse(Pędzel,
  494.                                 e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  495.                                 e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  496.                                 2 * Kardynalna.PromieńPunktuKontrolnego2,
  497.                                 2 * Kardynalna.PromieńPunktuKontrolnego2);
  498.                             // wykreślenie opisu Punktu Kontrolnego P0
  499.                             Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  500.                         } // tutaj nastąpi zwolnienie pędzla
  501.                         // Od if (WybórFiguriLinii.Eneabled)
  502.                     }
  503.                     else
  504.                     {
  505.                         // przechowanie współrzędnych kolejnych punktów
  506.                         // zwiększenie licznika punktów kontrolnych
  507.                         Kardynalna.NumerPunktuKontrolnego2++;
  508.                         // przechowanie wartości współrzędnych punktu kontrolnego o numerze w kardynalna.NumerPunktuKontrolnego2
  509.                         switch (Kardynalna.NumerPunktuKontrolnego2)
  510.                         {
  511.                             case 1: Kardynalna.PunktP12 = e.Location; break;
  512.                             case 2: Kardynalna.PunktP22 = e.Location; break;
  513.                             case 3: Kardynalna.PunktP32 = e.Location; break;
  514.                         }
  515.                         // sprawdzenie czy to jest ostatni punkt krzywej kardynalnej
  516.                         if (Kardynalna.NumerPunktuKontrolnego2 < 3)
  517.                         {
  518.                             // wykreślenie punktu kontrolnegokrzywej kardynalnej
  519.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  520.                             {
  521.                                 Rysownica.FillEllipse(Pędzel,
  522.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  523.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  524.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  525.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  526.                                 // wykreślenie opisu punktu kontrolnego
  527.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  528.                             }
  529.                         }
  530.                         else
  531.                         {
  532.                             // wykreślenie punktu końcowego krzywej kardynalnej
  533.                             // wykreślenie punktu kontrolnego krzywej kardynalnej
  534.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  535.                             {
  536.                                 Rysownica.FillEllipse(Pędzel,
  537.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  538.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  539.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  540.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  541.                                 // wykreślenie opisu punktu kontrolnego
  542.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  543.                             }
  544.                             x02 = Kardynalna.PunktP02.X;
  545.                             y02 = Kardynalna.PunktP02.Y;
  546.                             x12 = Kardynalna.PunktP12.X;
  547.                             y12 = Kardynalna.PunktP12.Y;
  548.                             x22 = Kardynalna.PunktP22.X;
  549.                             y22 = Kardynalna.PunktP22.Y;
  550.                             x32 = Kardynalna.PunktP32.X;
  551.                             y32 = Kardynalna.PunktP32.Y;
  552.                             Point PunktP02 = new Point(x02, y02);
  553.                             Point PunktP12 = new Point(x12, y12);
  554.                             Point PunktP22 = new Point(x22, y22);
  555.                             Point PunktP32 = new Point(x32, y32);
  556.                             Point[] punkty = { PunktP02, PunktP12, PunktP22, PunktP32 };
  557.                             // wykreślenie krzywej kardynalnej
  558.                             Rysownica.DrawClosedCurve(Pióro, punkty);
  559.                             //Rysownica.DrawCurve(Pióro, punkty);
  560.                             // ponowne uaktywnienie kontenera
  561.                             gbWybórFoguriLinii.Enabled = true;
  562.                         }
  563.  
  564.                     }
  565.  
  566.                 }
  567.                 if (rdbKrzywaKardynalna.Checked)
  568.                 {
  569.                     int x02;
  570.                     int y02;
  571.                     int x12;
  572.                     int y12;
  573.                     int x22;
  574.                     int y22;
  575.                     int x32;
  576.                     int y32;
  577.  
  578.  
  579.  
  580.  
  581.                     // sprawdzenie czy to jest pierwszy Punkt P0 Krzywej Beziera
  582.                     if (gbWybórFoguriLinii.Enabled)
  583.                     {
  584.                         // ustawienie stanu na brak aktywności dla kontenera gbWybórFoguriLinii
  585.                         gbWybórFoguriLinii.Enabled = false;
  586.                         // ustawienie stanu początkowego tworzonego opisu Krzywej Beziera
  587.                         Kardynalna.NumerPunktuKontrolnego2 = 0;
  588.                         Kardynalna.PromieńPunktuKontrolnego2 = 5;
  589.                         // przechowanie współrzędnych aktualnego położenia myszy
  590.                         Kardynalna.PunktP02 = e.Location;
  591.                         // wizualizacja punktu P0
  592.                         using (SolidBrush Pędzel = new SolidBrush(Color.Black))
  593.                         {
  594.                             // wykreślenie punktu P0
  595.                             Rysownica.FillEllipse(Pędzel,
  596.                                 e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  597.                                 e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  598.                                 2 * Kardynalna.PromieńPunktuKontrolnego2,
  599.                                 2 * Kardynalna.PromieńPunktuKontrolnego2);
  600.                             // wykreślenie opisu Punktu Kontrolnego P0
  601.                             Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  602.                         } // tutaj nastąpi zwolnienie pędzla
  603.                         // Od if (WybórFiguriLinii.Eneabled)
  604.                     }
  605.                     else
  606.                     {
  607.                         // przechowanie współrzędnych kolejnych punktów
  608.                         // zwiększenie licznika punktów kontrolnych
  609.                         Kardynalna.NumerPunktuKontrolnego2++;
  610.                         // przechowanie wartości współrzędnych punktu kontrolnego o numerze w kardynalna.NumerPunktuKontrolnego2
  611.                         switch (Kardynalna.NumerPunktuKontrolnego2)
  612.                         {
  613.                             case 1: Kardynalna.PunktP12 = e.Location; break;
  614.                             case 2: Kardynalna.PunktP22 = e.Location; break;
  615.                             case 3: Kardynalna.PunktP32 = e.Location; break;
  616.                         }
  617.                         // sprawdzenie czy to jest ostatni punkt krzywej kardynalnej
  618.                         if (Kardynalna.NumerPunktuKontrolnego2 < 3)
  619.                         {
  620.                             // wykreślenie punktu kontrolnegokrzywej kardynalnej
  621.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  622.                             {
  623.                                 Rysownica.FillEllipse(Pędzel,
  624.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  625.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  626.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  627.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  628.                                 // wykreślenie opisu punktu kontrolnego
  629.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  630.                             }
  631.                         }
  632.                         else
  633.                         {
  634.                             // wykreślenie punktu końcowego krzywej kardynalnej
  635.                             // wykreślenie punktu kontrolnego krzywej kardynalnej
  636.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  637.                             {
  638.                                 Rysownica.FillEllipse(Pędzel,
  639.                                     e.Location.X - Kardynalna.PromieńPunktuKontrolnego2,
  640.                                     e.Location.Y - Kardynalna.PromieńPunktuKontrolnego2,
  641.                                     2 * Kardynalna.PromieńPunktuKontrolnego2,
  642.                                     2 * Kardynalna.PromieńPunktuKontrolnego2);
  643.                                 // wykreślenie opisu punktu kontrolnego
  644.                                 Rysownica.DrawString("P" + Kardynalna.NumerPunktuKontrolnego2.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  645.                             }
  646.                             x02 = Kardynalna.PunktP02.X;
  647.                             y02 = Kardynalna.PunktP02.Y;
  648.                             x12 = Kardynalna.PunktP12.X;
  649.                             y12 = Kardynalna.PunktP12.Y;
  650.                             x22 = Kardynalna.PunktP22.X;
  651.                             y22 = Kardynalna.PunktP22.Y;
  652.                             x32 = Kardynalna.PunktP32.X;
  653.                             y32 = Kardynalna.PunktP32.Y;
  654.                             Point PunktP02 = new Point(x02, y02);
  655.                             Point PunktP12 = new Point(x12, y12);
  656.                             Point PunktP22 = new Point(x22, y22);
  657.                             Point PunktP32 = new Point(x32, y32);
  658.                             Point[] punkty = { PunktP02, PunktP12, PunktP22, PunktP32 };
  659.                             // wykreślenie krzywej kardynalnej
  660.                             Rysownica.DrawCurve(Pióro, punkty);
  661.                             //Rysownica.DrawCurve(Pióro, punkty);
  662.                             // ponowne uaktywnienie kontenera
  663.                             gbWybórFoguriLinii.Enabled = true;
  664.                         }
  665.  
  666.                     }
  667.  
  668.                 }
  669.  
  670.                 //
  671.  
  672.                 if (rdbBezier.Checked)
  673.                 {
  674.                     // sprawdzenie czy to jest pierwszy Punkt P0 Krzywej Beziera
  675.                     if (gbWybórFoguriLinii.Enabled)
  676.                     {
  677.                         // ustawienie stanu na brak aktywności dla kontenera gbWybórFoguriLinii
  678.                         gbWybórFoguriLinii.Enabled = false;
  679.                         // ustawienie stanu początkowego tworzonego opisu Krzywej Beziera
  680.                         Bezier.NumerPunktuKontrolnego = 0;
  681.                         Bezier.PromieńPunktuKontrolnego = 5;
  682.                         // przechowanie współrzędnych aktualnego położenia myszy
  683.                         Bezier.PunktP0 = e.Location;
  684.                         // wizualizacja punktu P0
  685.                         using (SolidBrush Pędzel = new SolidBrush(Color.Black))
  686.                         {
  687.                             // wykreślenie punktu P0
  688.                             Rysownica.FillEllipse(Pędzel,
  689.                                 e.Location.X - Bezier.PromieńPunktuKontrolnego,
  690.                                 e.Location.Y - Bezier.PromieńPunktuKontrolnego,
  691.                                 2 * Bezier.PromieńPunktuKontrolnego,
  692.                                 2 * Bezier.PromieńPunktuKontrolnego);
  693.                             // wykreślenie opisu Punktu Kontrolnego P0
  694.                             Rysownica.DrawString("P" + Bezier.NumerPunktuKontrolnego.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  695.                         } // tutaj nastąpi zwolnienie pędzla
  696.                         // Od if (WybórFiguriLinii.Eneabled)
  697.                     }
  698.                     else
  699.                     {
  700.                         // przechowanie współrzędnych kolejnych punktów
  701.                         // zwiększenie licznika punktów kontrolnych
  702.                         Bezier.NumerPunktuKontrolnego++;
  703.                         // przechowanie wartości współrzędnych punktu kontrolnego o numerze w Bezier.NUmerPunktuKontrolnego
  704.                         switch (Bezier.NumerPunktuKontrolnego)
  705.                         {
  706.                             case 1: Bezier.PunktP1 = e.Location; break;
  707.                             case 2: Bezier.PunktP2 = e.Location; break;
  708.                             case 3: Bezier.PunktP3 = e.Location; break;
  709.                         }
  710.                         // sprawdzenie czy to jest ostatni punkt krzywej beziera
  711.                         if (Bezier.NumerPunktuKontrolnego < 3)
  712.                         {
  713.                             // wykreślenie punktu kontrolnegokrzywej beziera
  714.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  715.                             {
  716.                                 Rysownica.FillEllipse(Pędzel,
  717.                                     e.Location.X - Bezier.PromieńPunktuKontrolnego,
  718.                                     e.Location.Y - Bezier.PromieńPunktuKontrolnego,
  719.                                     2 * Bezier.PromieńPunktuKontrolnego,
  720.                                     2 * Bezier.PromieńPunktuKontrolnego);
  721.                                 // wykreślenie opisu punktu kontrolnego
  722.                                 Rysownica.DrawString("P" + Bezier.NumerPunktuKontrolnego.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  723.                             }
  724.                         }
  725.                         else
  726.                         {
  727.                             // wykreślenie punktu końcowego krzywej beziera
  728.                             // wykreślenie punktu kontrolnegokrzywej beziera
  729.                             using (SolidBrush Pędzel = new SolidBrush(Color.Red))
  730.                             {
  731.                                 Rysownica.FillEllipse(Pędzel,
  732.                                     e.Location.X - Bezier.PromieńPunktuKontrolnego,
  733.                                     e.Location.Y - Bezier.PromieńPunktuKontrolnego,
  734.                                     2 * Bezier.PromieńPunktuKontrolnego,
  735.                                     2 * Bezier.PromieńPunktuKontrolnego);
  736.                                 // wykreślenie opisu punktu kontrolnego
  737.                                 Rysownica.DrawString("P" + Bezier.NumerPunktuKontrolnego.ToString(), FontOpisuPunktów, Pędzel, e.Location);
  738.                             }
  739.                             // wykreślenie krzywej beziera
  740.                             Rysownica.DrawBezier(Pióro, Bezier.PunktP0, Bezier.PunktP1, Bezier.PunktP2, Bezier.PunktP3);
  741.                             // ponowne uaktywnienie kontenera
  742.                             gbWybórFoguriLinii.Enabled = true;
  743.                         }
  744.                     }
  745.                 }
  746.             }
  747.         }
  748.  
  749.         private void rdbBezier_CheckedChanged(object sender, EventArgs e)
  750.         {
  751.             if (rdbBezier.Checked)
  752.             {// wizualizacja okna dialogowego z info dla użytkownika co powinien zrobić
  753.                 MessageBox.Show("Wykreślenie Krzywej Beziera wymaga zaznaczenia kliknięciem 4 punktów na Rysownicy", "Kreślenie Krzywej Beziera", MessageBoxButtons.OK, MessageBoxIcon.Information);
  754.  
  755.             }
  756.         }
  757.     }
  758. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement