[C#] drawline con split.

venerdì 05 febbraio 2010 - 19.59

Anonimo Profilo | Senior Member

Salve, per ora mi sta riuscendo ad fare un mini programmino per simulare le cnc.

Ora io ho fatto cosi:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ora il file che legge è in questo formato:
0,100
100,100
100,0
0,0

Questo disegna un rettangolo da 100x100 millimetri..

Volevo sapere come fare ad mettere le parole X , Y esempio:
X0,Y100
X100,Y100
X100,Y0
X0,Y0

mantenedo sempre il codice che ho scritto.

Mi sapete aiutarmi ...??

PS: Io vb.net non mi piace, invece C# lo sto studiando perchè ho due libri completi su questo linguaggio è poi mi piace di più.


Grazie.mille-

aiedail92 Profilo | Expert

Ciao

Se aggiungi X e Y davanti ai due valori, prima di convertire in numero devi scartare quelle lettere. Puoi farlo usando la funzione Substring:

x = Convert.ToInt32(coordinate[0].Substring(1)); y = Convert.ToInt32(coordinate[1].Substring(1));

In questo modo estrai la parte della stringa a partire dal secondo carattere, effettivamente saltando 'X' o 'Y'

Luca

Anonimo Profilo | Senior Member

grazie,
solo che nella vera cnc la virgola non c'è stà, io lo messa per vedere se funziona in questo modo, poi per passare alla vera.

Ma il formato è cosi:
X0Y100
X100Y100
X100Y0
X0Y0

Mi dici come fare?

Grazie mille per l'aiuto.
Protei usare un Case con uno switch. Ma non riesco ad capire come fare per la stringa ....
per ora ho solo usato lo switch per i numeri 1: qui 2: fai la .etc... ma per la stringa non so come fare...

Mi protesti aiutarmi?
grazie.

aiedail92 Profilo | Expert

In tal caso il metodo più semplice da usare è cercare l'occorrenza del carattere 'Y' nella stringa, quindi da quel punto dividere la stringa nelle due parti:

string coord = "X100Y100"; int ypos = coord.IndexOf('Y'); int x = Convert.ToInt32(coord.Substring(1, ypos - 1)); int y = Convert.ToInt32(coord.Substring(ypos + 1));

Luca

Anonimo Profilo | Senior Member

ok, però come gli dico per bene che quando è x100 deve andare da 0, a 100 pixel?

Mi dici dove devo mettere quel codice che hai scritto ?

Grazie mille.

aiedail92 Profilo | Expert

Il codice che ti ho dato sostituisce un pezzetto del tuo codice:

private void prova() { this.pictureBox1.Image = null; Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(bmp); Pen redPen = new Pen(Color.Red, 1 / g.DpiX); redPen.Width = 2; g.TranslateTransform(1, 1.0f); g.PageUnit = GraphicsUnit.Pixel; StreamReader sr = new StreamReader("TextFile1.txt"); int x = 0; int y = 0; int x1 = 0; int y1 = 0; string txt = "Disegnata linea: ({0},{1}:{2},{3})"; while (!sr.EndOfStream) { // ---- Qui il codice che ti ho dato io: ----- string coord = sr.ReadLine(); int ypos = coord.IndexOf('Y'); x = Convert.ToInt32(coord.Substring(1, ypos - 1)); y = Convert.ToInt32(coord.Substring(ypos + 1)); // ---- ---- g.DrawLine(redPen, x1, y1, x, y); lbl.Text = string.Format(txt, x1, y1, x, y); x1 = x; // x1 contiene il valore x di partenza per la prossima linea y1 = y; // y1 contiene il valore y di partenza per la prossima linea } pictureBox1.Image = bmp; lbl.Text = "Fatto."; redPen.Dispose(); g.Dispose(); sr.Close(); sr.Dispose(); }

Luca

Anonimo Profilo | Senior Member

ok, scusa per il ritardo , ma ero via ... (ero al ristorante).
ora provo ad fare quello che mi hai scritto.

e poi ti faccio sapere.

Anonimo Profilo | Senior Member

ok, grazie mille, ancora un'aiutino piccolo....

mi dici come si fa ad fare che posso scrivere invece cosi:
X0Y100
X100Y100
X100Y0
X0Y0
X0Y150
X100Y0

ma cosi:
X0
Y100
x0
Y200
X100
X20
etc...

Ti ringrazio moltissimo per l'aiuto che mi stai dando.
grazie mille.

aiedail92 Profilo | Expert

In tal caso leggi due righe consecutive, dalla prima estrai la X e dalla seconda la Y:

private void prova() { this.pictureBox1.Image = null; Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(bmp); Pen redPen = new Pen(Color.Red, 1 / g.DpiX); redPen.Width = 2; g.TranslateTransform(1, 1.0f); g.PageUnit = GraphicsUnit.Pixel; StreamReader sr = new StreamReader("TextFile1.txt"); int x = 0; int y = 0; int x1 = 0; int y1 = 0; string txt = "Disegnata linea: ({0},{1}:{2},{3})"; while (!sr.EndOfStream) { // ---- Qui il codice che ti ho dato io: ----- // Salta un carattere (la X) sr.Read(); x = Convert.ToInt32(sr.ReadLine()); // Salta un carattere (la Y) sr.Read(); y = Convert.ToInt32(sr.ReadLine()); // ---- ---- g.DrawLine(redPen, x1, y1, x, y); lbl.Text = string.Format(txt, x1, y1, x, y); x1 = x; // x1 contiene il valore x di partenza per la prossima linea y1 = y; // y1 contiene il valore y di partenza per la prossima linea } pictureBox1.Image = bmp; lbl.Text = "Fatto."; redPen.Dispose(); g.Dispose(); sr.Close(); sr.Dispose(); }

Luca

Anonimo Profilo | Senior Member

grazie mille. ti volevo chiderti l'ultima cosa..

Alcune volte si scrivono dei programmini alla cnc, è come quello sopra ed alcuni casi è cosi:
X100Y200
Y0
X100
Y0
Y100

Si può unire i due metodi che hai scritto nei vari precedenti post ed metterli in uno solo?

grazie Mille.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5