DotNetToscana
User Group Toscano su .NET

[C#] creare un interprete per creare linee

rated by 0 users
This post has 8 Replies | 2 Followers

Top 10 Contributor
Male
Posts 77
luigi Posted: 10-29-2009 19.22

Salve, si come che sto ripredento in mano il c# ....

 

Mi dite come faccio creare un mini -linguaggio che disegna liena pixel per pixel, tramite coordinate X Y Z

Poi implementera altre coordinate e le velocità di disegnare la la linea..

 

Avete in mente un pantografo?.

 

Vorrei gestire un pantografo faccendo una simulazione ma creando un'interprete a forma di coordinate prese

da un file di testo o binario, basta che ci stanno X Y Z.

 

Mi dite come fare?

grazie.

Top 10 Contributor
Male
Posts 64

Ciao Luigi,

spiegati meglio con un esempio, perchè hai bisogno della coordinata Z ?

-----------------------------------------
Angella Andrea
Microsoft Certified Technology Specialist
http://www.angellaa.it/

Top 10 Contributor
Male
Posts 77

La z , è la testa che fa andare da alto e basso la punta che deve forare.

 

Devo fare un piccolo linguaggio ad esempio questo:

M6T1
M3S1000F150G90G55G40
X27Y0
G0Z2G43H1
G1Z-0.5M8
X-147
G0Y50
G1X27
G0Y101
G1X-148
G0Z2
G0Y142
G1X-59
G1X27
G0Y-24
G1X-53
G1X-147
G0Y50
G0Y101
G0Y142

 

e devo far modo che me lo interpreta la mia applicazione

 

LA x e  y , sono le normalissime coordinate che sappiamo tutti,

ma La Z , è la testa del trappano che scende su e giu per forare.

 

Scusate, se non mi capite.

 

A domani.

Top 10 Contributor
Male
Posts 64

Devi renderti conto Luigi,
che non possiamo aiutarti se tu per primo non spieghi chiaramente ciò che vuoi realizzare.

Ad esempio, dal testo che tu hai incollato come faccio a sapere cosa significa la M, la T, la S, la F, la G ?

Prima di realizzare un qualsiasi interprete è necessario conoscere chiaramente ciò che si desidera interpretare.

 

-----------------------------------------
Angella Andrea
Microsoft Certified Technology Specialist
http://www.angellaa.it/

Top 10 Contributor
Male
Posts 77

ok,

il codice lo sto studiando a scuola "Al corso Macchine controllo numerico", qui per spiegarti cosa sono la m t s  f g,

è un pò lungo...a me mi ci è voluto 2 mesi di teoria ora sto faccendo la pratica sulla macchina controllo numerico che abbiamo in officina.

 

l'unica cosa che volevo sapere e come fare un'inteprete che funzioni devo usare per creare un'inerprete.

ad esempio un'array per includere le parole chiavi , delle funzioni per disegnare le linee, i timer per la velocità.etc.

Tutto qui.

 

Se vuoi domani apena ritorno dall'officina ti spiego meglio... ora perchè è già tardi.

 

Saluti,

luigi.

Top 10 Contributor
Male
Posts 77

ad esempio ,

se devo caricare dei dati che hanno x y in millimetri,

In questo codice che lo sto portando alle mie essiegenze mi dite come fare per creare la finestra dialogo per aprire un file che abbia le coordinate

x y e le metto in una textbox e poi faccio play con il button1_click e le coordinate le leggo in una textbox multiline.

 

ecco il codice:

 

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.Drawing.Drawing2D;
namespace cncSim
{
    public partial class Main : Form
    {
        List<PointF> PointList = new List<PointF>();
        int pointIndex = 0;
        public Main()
        {
            InitializeComponent();
        }

        private void Main_Load(object sender, EventArgs e)
        {

            PointF[] pt = new PointF[] {
                new PointF(100, 100),
                new PointF(150, 150),
                new PointF(200, 100),
                new PointF(100, 100),
                new PointF(118,-27),
                new PointF(0,0)

            };
            // Get Points From Line(s)
            float curDist = 0;
            float distance = 0;
            for (int i = 0; i < pt.Length - 1; i++)
            {
                PointF ptA = pt;
                PointF ptB = pt[i + 1];
                float deltaX = ptB.X - ptA.X;
                float deltaY = ptB.Y - ptA.Y;
                curDist = 0;
                distance = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2));
                while (curDist < distance)
                {
                    curDist++;
                    float offsetX = (float)((double)curDist / (double)distance * (double)deltaX);
                    float offsetY = (float)((double)curDist / (double)distance * (double)deltaY);
                    PointList.Add(new PointF(ptA.X + offsetX, ptA.Y + offsetY));
                }
            }

        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {

            for (int i = 0; i < pointIndex; i++)
            {
                e.Graphics.DrawLine(Pens.Black, PointList.X, PointList.Y, PointList[i + 1].X, PointList[i + 1].Y);
                /* txtX.Text = "" + PointList.X + "";
                txtY.Text = "" + PointList.Y + "";
                 */
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (pointIndex < PointList.Count - 1)
            {
                pointIndex++;
                this.Refresh();

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            pointIndex = 0;
            pictureBox1.Refresh();
            timer1.Enabled = false;
               
           
        }

        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
    }
}

 

Grazie mille,

Aspetto risposte.

Top 10 Contributor
Male
Posts 77

In poche parole ho quasi fatto , ma non son sicuro ,

perchè non mi sembra se è il modo giusto:

 

private void butLoad_Click(object sender, EventArgs e)
        {

            int X = Convert.ToInt32(txtgcodeX.Text);
            int Y = Convert.ToInt32(txtgcodeY.Text);
            PointF[] pt = new PointF[] {
                new PointF(X, Y)
            

            };
            // Get Points From Line(s)
            float curDist = 0;
            float distance = 0;
            for (int i = 0; i < pt.Length - 1; i++)
            {
                PointF ptA = pt;
                PointF ptB = pt[i + 1];
                float deltaX = ptB.X - ptA.X;
                float deltaY = ptB.Y - ptA.Y;
                curDist = 0;
                distance = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2));
                while (curDist < distance)
                {
                    curDist++;
                    float offsetX = (float)((double)curDist / (double)distance * (double)deltaX);
                    float offsetY = (float)((double)curDist / (double)distance * (double)deltaY);
                    PointList.Add(new PointF(ptA.X + offsetX, ptA.Y + offsetY));
                }
            }
        }

 

Mi dite come faccio ad fare che prende un'infinito di valori x y . grazie.

Top 10 Contributor
Male
Posts 77

ecco cosa vorrei fare:

 

http://www.youtube.com/watch?v=fPhQS9vMuBo

 

scusate, ma non ho trovato di meglio. ma è solo per farvi un'idea,

che simulazione devo fare.

 

grazie.

Top 10 Contributor
Male
Posts 77

ciao, a tutti e buon anno nuovo...

 

Volevo sapere come faccio ad fare un file .txt che abbia i valori X Y.

X20Y19

Y19X20

e cosi via...

 

Mi dite come fare con il codice che ho postato e faccendo che apre un file txt con le coordinate x y ?

 

Per adesso uso x y e poi la z la implemento più avanti.

Grazie.

Page 1 of 1 (9 items) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems