1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
/*
besoin d'un thread pour appeler la richtextbox pour le portserie
car on ne peut pas acceder a partir du thread du portsrie
*/
Thread rtb;// creation du thread
delegate void T();// creation du delegué
T recup;// creation d'un delegue s'appelant recup
// creation d'un tableau de points , d'une liste de point , et d'un point
// le pointf est un point contenant une coordonnées
PointF pt=new PointF();// le point (coordonnées X et Y)
List<PointF> mespoints=new List<PointF>();// la list de point
PointF[] tabpts;// tableau de points
PointF coordonnees = new PointF();
List<PointF> geodata = new List<PointF>();
PointF[] coordon;
// todo variable
// creation de variable pour les points entrés
float nombrex, nombrey;
int verbtnaff = 0;
int degrelat,degrelong;
decimal minutelat,minutelong,convlat,convlong,radlat, radlong;
// declaration d'una variable pour le choix du port série à utiliser
string choixport, choicecolor;
// declaration du pen
Pen greenpen = new Pen(Color.Green, 2); //definition d'un nouveau bic ,et de sa couleur , de la grosseur du trait
public Form1()
{
InitializeComponent();
recup= new T(recuperation);// méthode des délégués
}
public void main()
{}
private void btnbalisage_Click(object sender, EventArgs e)
{//attention par securité il faudra stopper les actions des boutons
//affichage du btnretour menu
btnretour.Visible = true;
//pour se reperer dans quelle partie du programme nous sommes
lblbalisage.Visible = true;
lblchampsenregistre.Visible = false;
lblparametres.Visible = false;
// pour le demarrage du balisage
btndembal.Visible = true;
richTextBox1.Visible = true;
lblchoixport.Visible = true;
cbxchoixport.Visible = true;
btntestconex.Visible = true;
btnenre.Visible = true;
// action secondaire qui apparaitront lors de l'appui sur paramètre.
btncolor.Visible = false;
// action secondaire devront apparaître lors de l'appui sur champs enregistré
btnouvrir.Visible = false;
// fermeture du port série
portserie.Close();
}
private void btnchampsenre_Click(object sender, EventArgs e)
{//attention par securité il faudra stopper les actions des boutons
//affichage du btnretour menu
btnretour.Visible = true;
//pour se reperer dans quelle partie du programme nous sommes
lblbalisage.Visible = false;
lblchampsenregistre.Visible = true;
lblparametres.Visible = false;
//supprimer les actions possibles des autres parties du programme
// supression du sousprogramme du bouton balisage
btndembal.Visible = false;
lblchoixport.Visible = false;
cbxchoixport.Visible = false;
btntestconex.Visible = false;
richTextBox1.Visible = true;
btnenre.Visible = false;
// action secondaire qui apparaitront lors de l'appui sur paramètre.
btncolor.Visible = false;
// action secondaire devront apparaître lors de l'appui sur champs enregistré
btnouvrir.Visible = true;
// effecement de la picturebox
pictureBox1.Dispose();
// rafraichir la richtextbox
richTextBox1.Clear();
// fermeture du port série
portserie.Close();
}
private void btnparametres_Click(object sender, EventArgs e)
{//attention par securité il faudra stopper les actions des boutons
//affichage du btnretour menu
btnretour.Visible = true;
//pour se reperer dans quelle partie du programme nous sommes
lblbalisage.Visible = false;
lblchampsenregistre.Visible = false;
lblparametres.Visible = true;
//supprimer les actions possibles des autres parties du programme
// supression du sousprogramme du bouton balisage
btndembal.Visible = false;
lblchoixport.Visible = false;
cbxchoixport.Visible = false;
btntestconex.Visible = false;
richTextBox1.Visible = true;
btnenre.Visible = false;
btncolor.Visible = true;
// action secondaire devront apparaître lors de l'appui sur champs enregistré
btnouvrir.Visible = false;
}
private void btndembal_Click(object sender, EventArgs e)
{ // todo demarrer balisage
//permet de creer le pen affin d'afficher
Graphics g = Graphics.FromHwnd(pictureBox1.Handle); //encapsulage d'une surface de dessin , mise en lien
//avec la picturebox
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //ligne de commande pour lisser la ligne
//graphique tracée
greenpen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; // ligne pour commander l'apparence de la ligne
// permet de convertir la list de points en tableau de point grâce au pen appelé greenpen
g.DrawLines(greenpen, tabpts); // la methode drawlines dessine un segment d'un tableau
//pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;// pour une image
g.Dispose(); // pour ne pas occuper de la memoire pour rien.
}
private void Form1_Load(object sender, EventArgs e)
{
retourload();//appel de la fonction retourload
}
private void btnretour_Click(object sender, EventArgs e)
{
retourload();// appel de la fonction retourload
}
void retourload() // création de la fonction qui retourne au menu principale
{
// possibilité du menu principale
btnbalisage.Visible = true;
btnparametres.Visible = true;
btnchampsenre.Visible = true;
// les trois label doivent etre visible pour afficher les choix possibles
lblbalisage.Visible = true;
lblchampsenregistre.Visible = true;
lblparametres.Visible = true;
//action secondaires qui apparaîtront lors de l'action sur les boutons du menu principale
btndembal.Visible = false;
lblchoixport.Visible = false;
cbxchoixport.Visible = false;
btntestconex.Visible = false;
richTextBox1.Visible = false;
btnenre.Visible = false;
btnretour.Visible = false;
// action secondaire qui apparaitront lors de l'appui sur paramètre.
btncolor.Visible = false;
// action secondaire devront apparaître lors de l'appui sur champs enregistré
btnouvrir.Visible = false;
//initialisation du premier point pour la picture box
}
//todo richtextbox
//private void txtbY_KeyDown(object sender, KeyEventArgs e)
//{
// if (e.KeyCode == Keys.Enter)
// {
// verbtnaff = verbtnaff + 1;// verifi btn afficher
// nombrex = Convert.ToSingle(txtbX.Text);
// nombrey = Convert.ToSingle(txtbY.Text);
// pointrich.X = nombrex;// seront les point affiché dans la richtextbox
// pointrich.Y = nombrey;
// richTextBox1.Text = richTextBox1.Text + pointrich + "\r"; // tout depend de la syntaxe pour la récuperation.
// // on r centre le point
// pt.X = (pictureBox1.Width / 2) + nombrex; // permet de mettre en relation la textbox1 avec la coordonnée x du point pt
// pt.Y = (pictureBox1.Height / 2) - nombrey;// permet de mettre en relation la textbox2 avec la coordonnée y du point pt
// mespoints.Add(pt);// permet d'ajouter un point a la liste de point dont le point est appelé
// // pt et dont les coordonnée sont (x,y)
// tabpts = mespoints.ToArray(); // converti la liste de point en tableau de points
// }
//}
private void cbxchoixport_SelectedIndexChanged(object sender, EventArgs e)
{/* bouton pour choisir le choix du port utilisé pour cela ,
il suffit d'utiliser la propriété selecteditem du combobox "cbxchoixport"
et de donner le nom au port serie grace au elements modifié préalablement.
*/
portserie.Close();
choixport = cbxchoixport.SelectedItem.ToString();
portserie.PortName = choixport;
}
//desactivation de l'evenement sur le port série a dmd
private void btntestconex_Click(object sender, EventArgs e)
{
/* besoin de la methode try catch :
* si le port serie a un probleme lors du test de la connexion, c'est qu'il n'existe pas
*/
try
{
portserie.Open();
portserie.DtrEnable = true;
if (portserie.DsrHolding == true)
{
label1.Text = "ok";
}
}
catch (Exception)
{
label1.Text = "pas de connexion";
}
}
private void btncolor_Click(object sender, EventArgs e)
{// permet de changer la couleur du pen.
colorDialog1.ShowDialog();
choicecolor = colorDialog1.Color.ToString();
greenpen.Color = colorDialog1.Color;
//permet de creer le pen affin d'afficher
Graphics g = Graphics.FromHwnd(pictureBox1.Handle); //encapsulage d'une surface de dessin , mise en lien
//avec la picturebox
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //ligne de commande pour lisser la ligne
//graphique tracée
greenpen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; // ligne pour commander l'apparence de la ligne
// permet de convertir la list de points en tableau de point grâce au pen appelé greenpen
g.DrawLines(greenpen, tabpts); // la methode drawlines dessine un segment d'un tableau
g.Dispose(); // pour ne pas occuper de la memoire pour rien.
}
private void btnenre_Click(object sender, EventArgs e)
{//todo enregistrement
saveFileDialog1.ShowDialog();// faire apparaître la savefiledialog
// permet de retranscrire le txt dans un fichier.text
saveFileDialog1.DefaultExt = ".txt";
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
}
private void btnouvrir_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();// declaration d'une variable qui fait référence à un openfiledialog
dialog.Filter = "Fichiers texte|*.txt";//definition de l'extention du fichier
if (dialog.ShowDialog() == DialogResult.OK)// si l'on a appuyé sur ok de la fenetre openfiledialog
{
richTextBox1.Text = File.ReadAllText(dialog.FileName);
// on lit le fichier dans la richtextbox
// ou encore :
// richTextBox1.LoadFile(dialog.FileName);
}
}
/* a ne pas mettre dans un private void si non les fonction n porte pas
sur l'ensemble des fonction privée (fonction dite inaccessible)
*/
void recuperation()//delegue
{
// besoin de spliter
/* pour connaitre la distance entre deux point nous allons devoir calculer a formule du grand cercle qui elle demande au préalable de
d'avoir les angle sous la forme de seconde */
string[] donnees = data.Split(','); //
richTextBox1.Text = richTextBox1.Text + donnees[3] + " " + donnees[5] + "\n";
///// la conversion fonctionne /////////
// conversion de la latitude
degrelat = Convert.ToInt32(donnees[3].Remove(2,7));
minutelat = Convert.ToDecimal(donnees[3].Remove(0,2).Replace(".",","));
// conversion de la longitude
degrelong = Convert.ToInt32(donnees[5].Remove(3,7));
minutelong = Convert.ToDecimal(donnees[5].Remove(0,3).Replace(".",","));
// conversion en seconde//
convlat = ((degrelat) * 3600) + (minutelat*60); // lattitude en seconde
convlong = ((degrelong * 3600)) + (minutelong * 60);// longitude en seconde
label3.Text = convlat.ToString();
label4.Text = convlong.ToString();
// conversion en radian
////todo recup // calcul de distance
//radlat = ((3,14559 * convlat) / 648000);
//radlong = ((3,14159 * convlong) / 648000);
//label1.Text = radlat.ToString();
//label2.Text = radlong.ToString();
}
string data;
public void portserie_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
data = portserie.ReadLine();
// lecture du portserie et mise dans la
// variable de type string "data"
// demarrage du thread
if (data.IndexOf("$GPRMC") == 0)
{
// lecture du portserie et mise dans la
// variable de type string "data"
// demarrage du thread
rtb = new Thread(new ThreadStart(threadA));
rtb.IsBackground = true;//executé en arriere plan
rtb.Start();
}
}
void threadA()// thread
{
Invoke(recup);
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
portserie.Close();
}
}
} |
Partager