﻿// Revision 1.5 ----- 21/04/2018
// 
// btnToolchange
//
btnToolchange = new Button (); 
btnToolchange.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnToolchange.FlatAppearance.BorderSize = 0;
btnToolchange.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnToolchange.Font = new System.Drawing.Font("MagistralC", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnToolchange.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnToolchange.Image = System.Drawing.Image.FromFile (@"C:\UCCNC\Flashscreen\BMP\Defaultscreenset\cu_new.png");
btnToolchange.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
btnToolchange.Location = new System.Drawing.Point(4, 39);
btnToolchange.Size = new System.Drawing.Size(184, 85);
btnToolchange.TabStop = false;
btnToolchange.TabIndex = 1;
btnToolchange.Text = "Cambio utensile";
btnToolchange.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
btnToolchange.UseVisualStyleBackColor = false;
btnToolchange.Click += new System.EventHandler(btnToolchange_Click);
// 
// btnProbeposition
//
btnProbeposition = new Button (); 
btnProbeposition.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnProbeposition.FlatAppearance.BorderSize = 0;
btnProbeposition.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnProbeposition.Font = new System.Drawing.Font("MagistralC", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnProbeposition.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnProbeposition.Image = System.Drawing.Image.FromFile (@"C:\UCCNC\Flashscreen\BMP\Defaultscreenset\cpt_new.png");
btnProbeposition.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
btnProbeposition.Location = new System.Drawing.Point(192, 39);
btnProbeposition.Size = new System.Drawing.Size(184, 85);
btnProbeposition.TabStop = false;
btnProbeposition.TabIndex = 2;
btnProbeposition.Text = "Posizione tastatore";
btnProbeposition.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
btnProbeposition.UseVisualStyleBackColor = false;
btnProbeposition.Click += new System.EventHandler(btnProbeposition_Click);
// 
// btnZeropiece pezzo
//
btnZeropiece = new Button (); 
btnZeropiece.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropiece.FlatAppearance.BorderSize = 0;
btnZeropiece.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnZeropiece.Font = new System.Drawing.Font("MagistralC", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnZeropiece.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnZeropiece.Image = System.Drawing.Image.FromFile (@"C:\UCCNC\Flashscreen\BMP\Defaultscreenset\zp_new.png");
btnZeropiece.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
btnZeropiece.Location = new System.Drawing.Point(4, 128);
btnZeropiece.Size = new System.Drawing.Size(184, 85);
btnZeropiece.TabStop = false;
btnZeropiece.TabIndex = 3;
btnZeropiece.Text = "Zero pezzo";
btnZeropiece.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
btnZeropiece.UseVisualStyleBackColor = false;
btnZeropiece.Click += new System.EventHandler(btnZeropiece_Click);
//
// btnExit
//
btnExit = new Button ();
btnExit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnExit.FlatAppearance.BorderSize = 0;
btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnExit.Font = new System.Drawing.Font("MagistralC", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnExit.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnExit.Image = System.Drawing.Image.FromFile (@"C:\UCCNC\Flashscreen\BMP\Defaultscreenset\exit_new.png");
btnExit.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
btnExit.Location = new System.Drawing.Point(192, 128);
btnExit.Size = new System.Drawing.Size(184, 85);
btnExit.TabStop = false;
btnExit.TabIndex = 4;
btnExit.Text = "Uscire";
btnExit.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
btnExit.UseVisualStyleBackColor = false;
btnExit.Click += new System.EventHandler(btnExit_Click);
// 
// btnToolchangeNo
//
btnToolchangeNo = new Button (); 
btnToolchangeNo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnToolchangeNo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnToolchangeNo.FlatAppearance.BorderSize = 0;
btnToolchangeNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnToolchangeNo.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnToolchangeNo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnToolchangeNo.Location = new System.Drawing.Point(292, 314);
btnToolchangeNo.Size = new System.Drawing.Size(70, 23);
btnToolchangeNo.TabIndex = 9;
btnToolchangeNo.Text = "No";
btnToolchangeNo.UseVisualStyleBackColor = false;
btnToolchangeNo.Visible = false;
btnToolchangeNo.Click += new System.EventHandler(btnToolchangeNo_Click);
// 
// btnToolchangeSi
//
btnToolchangeSi = new Button ();
btnToolchangeSi.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnToolchangeSi.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnToolchangeSi.FlatAppearance.BorderSize = 0;
btnToolchangeSi.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnToolchangeSi.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnToolchangeSi.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnToolchangeSi.Location = new System.Drawing.Point(216, 314);
btnToolchangeSi.Size = new System.Drawing.Size(70, 23);
btnToolchangeSi.TabIndex = 10;
btnToolchangeSi.Text = "Si";
btnToolchangeSi.UseVisualStyleBackColor = false;
btnToolchangeSi.Visible = false;
btnToolchangeSi.Click += new System.EventHandler(btnToolchangeSi_Click);
// 
// btnProbepositionSi
//
btnProbepositionSi = new Button ();
btnProbepositionSi.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnProbepositionSi.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnProbepositionSi.FlatAppearance.BorderSize = 0;
btnProbepositionSi.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnProbepositionSi.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnProbepositionSi.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnProbepositionSi.Location = new System.Drawing.Point(216, 314);
btnProbepositionSi.Size = new System.Drawing.Size(70, 23);
btnProbepositionSi.TabIndex = 11;
btnProbepositionSi.Text = "Si";
btnProbepositionSi.UseVisualStyleBackColor = false;
btnProbepositionSi.Visible = false;
btnProbepositionSi.Click += new System.EventHandler(btnProbepositionSi_Click);
// 
// btnProbepositionNo
//
btnProbepositionNo = new Button ();
btnProbepositionNo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnProbepositionNo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnProbepositionNo.FlatAppearance.BorderSize = 0;
btnProbepositionNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnProbepositionNo.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnProbepositionNo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnProbepositionNo.Location = new System.Drawing.Point(292, 314);
btnProbepositionNo.Size = new System.Drawing.Size(70, 23);
btnProbepositionNo.TabIndex = 12;
btnProbepositionNo.Text = "No";
btnProbepositionNo.UseVisualStyleBackColor = false;
btnProbepositionNo.Visible = false;
btnProbepositionNo.Click += new System.EventHandler(btnProbepositionNo_Click);
// 
// btnZeropieceSi
//
btnZeropieceSi = new Button ();
btnZeropieceSi.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnZeropieceSi.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceSi.FlatAppearance.BorderSize = 0;
btnZeropieceSi.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnZeropieceSi.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnZeropieceSi.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceSi.Location = new System.Drawing.Point(216, 314);
btnZeropieceSi.Size = new System.Drawing.Size(70, 23);
btnZeropieceSi.TabIndex = 13;
btnZeropieceSi.Text = "Si";
btnZeropieceSi.UseVisualStyleBackColor = false;
btnZeropieceSi.Visible = false;
btnZeropieceSi.Click += new System.EventHandler(btnZeropieceSi_Click);
// 
// btnZeropieceNo
//
btnZeropieceNo = new Button ();
btnZeropieceNo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnZeropieceNo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceNo.FlatAppearance.BorderSize = 0;
btnZeropieceNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnZeropieceNo.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnZeropieceNo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceNo.Location = new System.Drawing.Point(292, 314);
btnZeropieceNo.Size = new System.Drawing.Size(70, 23);
btnZeropieceNo.TabIndex = 14;
btnZeropieceNo.Text = "No";
btnZeropieceNo.UseVisualStyleBackColor = false;
btnZeropieceNo.Visible = false;
btnZeropieceNo.Click += new System.EventHandler(btnZeropieceNo_Click);
// 
// btnZeropieceOk
//
btnZeropieceOk = new Button ();
btnZeropieceOk.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(87)))), ((int)(((byte)(40)))));
btnZeropieceOk.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceOk.FlatAppearance.BorderSize = 0;
btnZeropieceOk.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnZeropieceOk.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnZeropieceOk.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnZeropieceOk.Location = new System.Drawing.Point(292, 314);
btnZeropieceOk.Size = new System.Drawing.Size(70, 23);
btnZeropieceOk.TabIndex = 15;
btnZeropieceOk.Text = "OK";
btnZeropieceOk.UseVisualStyleBackColor = false;
btnZeropieceOk.Visible = false;
btnZeropieceOk.Click += new System.EventHandler(btnZeropieceOk_Click);
// 
// textBoxStatus
//
textBoxStatus = new TextBox (); 
textBoxStatus.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
textBoxStatus.BorderStyle = System.Windows.Forms.BorderStyle.None;
textBoxStatus.Font = new System.Drawing.Font("MagistralC", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
textBoxStatus.ForeColor = System.Drawing.Color.LightGray;
textBoxStatus.Location = new System.Drawing.Point(20, 254);
textBoxStatus.Multiline = true;
textBoxStatus.ReadOnly = true;
textBoxStatus.Size = new System.Drawing.Size(340, 50);
textBoxStatus.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
textBoxStatus.TabStop = false;
textBoxStatus.TabIndex = 5;
//
// pictureBoxUI
//
pictureBoxUI = new PictureBox (); 
pictureBoxUI.BackColor = System.Drawing.Color.Transparent;
pictureBoxUI.BackgroundImage = System.Drawing.Image.FromFile (@"C:\UCCNC\Flashscreen\BMP\Defaultscreenset\screen.png");
pictureBoxUI.Location = new System.Drawing.Point(0, 0);
pictureBoxUI.Size = new System.Drawing.Size(380, 415);
pictureBoxUI.Controls.Add(btnToolchange);
pictureBoxUI.Controls.Add(btnProbeposition);
pictureBoxUI.Controls.Add(btnZeropiece);
pictureBoxUI.Controls.Add(btnExit);
pictureBoxUI.Controls.Add(btnToolchangeNo);
pictureBoxUI.Controls.Add(btnToolchangeSi);
pictureBoxUI.Controls.Add(btnProbepositionSi);
pictureBoxUI.Controls.Add(btnProbepositionNo);
pictureBoxUI.Controls.Add(btnZeropieceSi);
pictureBoxUI.Controls.Add(btnZeropieceNo);
pictureBoxUI.Controls.Add(btnZeropieceOk);
pictureBoxUI.Controls.Add(textBoxStatus);
pictureBoxUI.TabIndex = 0;
pictureBoxUI.MouseDown += new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseDown);
pictureBoxUI.MouseMove += new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseMove);
// 
// myForm
//
myForm = new Form ();
myForm.BackColor = System.Drawing.Color.Silver;
myForm.ClientSize = new System.Drawing.Size(380, 415);
myForm.Controls.Add(pictureBoxUI);
myForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
myForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
myForm.TransparencyKey = System.Drawing.Color.Silver;
myForm.BringToFront();
myForm.ShowDialog (exec.mainform);

#Events

// start global variables
Form myForm;
Button btnToolchange;
Button btnProbeposition;
Button btnZeropiece;
Button btnExit;
Button btnToolchangeNo;
Button btnToolchangeSi;
Button btnProbepositionSi;
Button btnProbepositionNo;
Button btnZeropieceSi;
Button btnZeropieceNo;
Button btnZeropieceOk;
TextBox textBoxStatus; 
PictureBox pictureBoxUI;

public Point mouseLocation;

double xpos, ypos, zpos;         	//x, y, z relativi
double xzero, yzero, zzero;      	//x, y, z assoluti
double fpos;                       	//feedrate iniziale
double fmax, fmin;                	//feedrate max. e min.
double zavv;                       	//distanza rapida di avvicinamento al palpatore
double zmin;                       	//profondità oltre il palpatore
double xtool, ytool, ztool;      	//x, y, z posizione palpatore
double zuno, zdue;                	//prima e seconda misurazione
double zorig;                      	//z media zuno e zdue (old tool)
double znew;                       	//z media zuno e zdue (new tool)
double zdif;                       	//z è (zorig-znew)
double zsu;                        	//z salire tra misurazioni
double Zprobe;
bool mainbuttons = true, exitbutton = true, sibutton = true, nobutton = true, okbutton = true, mickeymouse = true;
// end global variables
     
private void pictureBoxUI_MouseDown(object sender, MouseEventArgs e)
{
	if (!mickeymouse)
	{
		return;
	}
	mouseLocation = new Point(-e.X, -e.Y);
}

private void pictureBoxUI_MouseMove(object sender, MouseEventArgs e)
{
	if (!mickeymouse)
	{
		return;
	}
	if (e.Button == MouseButtons.Left)
	{
		Point mousePos = Control.MousePosition;
		mousePos.Offset(mouseLocation.X, mouseLocation.Y);
		myForm.Location = mousePos;
	}
}

private void btnToolchange_Click(object sender, EventArgs e)
{
	if (!mainbuttons)
	{
		return;
	}
	
	PictureDis ();
	mainbuttons = false;
	exitbutton = false;
	mickeymouse = false;
	
	if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) 	// controllo se la macchina e referenziata.
	{
		textBoxStatus.Clear();
		textBoxStatus.AppendText ("ATTENZIONE!!!\n");
		textBoxStatus.AppendText ("La macchina dovrebbe essere referenziata!");
		exec.Stop();
		exitbutton = true;
		mickeymouse = true;
		PictureEn ();
		return;
	}
	
	WorkValues ();
	
	new Thread(delegate () {
    OldTool();
	}).Start();
	
	Application.DoEvents ();
} 

 private void btnToolchangeSi_Click(object sender, EventArgs e)
{
	if (!sibutton)
	{
		return;
	}
	sibutton = false;
	nobutton = false;
		
	new Thread(delegate () {
    NewTool();
	}).Start();
	
	Application.DoEvents ();
}

 private void btnToolchangeNo_Click(object sender, EventArgs e)
{
	if (!sibutton)
	{
		return;
	}
	sibutton = false;
	nobutton = false;
	
	new Thread(delegate () {
    NewOldTool();
	}).Start();
	
	Application.DoEvents ();
}

 private void btnProbeposition_Click(object sender, EventArgs e)
{
	if (!mainbuttons)
	{
		return;
	}
	PictureDis ();
	mainbuttons = false;
	exitbutton = false;
	mickeymouse = false;
	
	if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) 	// controllo se la macchina e referenziata.
	{
		textBoxStatus.Clear ();
		textBoxStatus.AppendText ("ATTENZIONE!!!\n");
		textBoxStatus.AppendText ("La macchina dovrebbe essere referenziata!");
		exec.Stop();
		exitbutton = true;
		mickeymouse = true;
		PictureEn ();
		return;
	}
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText("Prima di cambiare la posizione del tastatore dovete posizionare il pantografo nella posizione desiderata. Sei nella posizione desiderata?");
	btnProbepositionSi.BringToFront ();
	btnProbepositionSi.Visible = true;
	btnProbepositionNo.BringToFront ();
	btnProbepositionNo.Visible = true;
}

 private void btnProbepositionSi_Click(object sender, EventArgs e)
{
	btnProbepositionSi.Visible = false;
	btnProbepositionNo.Visible = false;
	WorkValues ();
	AS3.Setfield (xzero, 3001);
	AS3.Validatefield (3001);
	AS3.Setfield (yzero, 3002);
	AS3.Validatefield (3002);
	
	textBoxStatus.Clear ();	
	textBoxStatus.AppendText ("Le coordinate della nuova posizione del tastatore sono state salvate.");
	PictureEn ();
	mickeymouse = true;
	exitbutton = true;
}

 private void btnProbepositionNo_Click(object sender, EventArgs e)
{
	btnProbepositionSi.Visible = false;
	btnProbepositionNo.Visible = false;
	
	textBoxStatus.Clear();	
	textBoxStatus.AppendText ("Prima di usare questa opzione il pantografo dovrebbe essere nella posizione desiderata.");
	PictureEn ();
	mickeymouse = true;
	exitbutton = true;
}

 private void btnZeropiece_Click(object sender, EventArgs e)
{
	if (!mainbuttons)
	{
		return;
	}
	PictureDis ();
	mainbuttons = false;
	exitbutton = false;
	mickeymouse = false;
	
	if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) 	// controllo se la macchina e referenziata.
	{
		textBoxStatus.Clear ();
		textBoxStatus.AppendText ("ATTENZIONE!!!\n");
		textBoxStatus.AppendText ("La macchina dovrebbe essere referenziata!");
		exec.Stop();
		exitbutton = true;
		mickeymouse = true;
		PictureEn ();
		return;
	}
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText("Per fare lo zero pezzo posiziona il tastatore tra l'utensile e il materiale. Fatto?");
	btnZeropieceSi.BringToFront ();
	btnZeropieceSi.Visible = true;
	btnZeropieceNo.BringToFront ();
	btnZeropieceNo.Visible = true;
}

 private void btnZeropieceSi_Click(object sender, EventArgs e)
{
	if (!sibutton)
	{
		return;
	}
	sibutton = false;
	nobutton = false;
	
	WorkValues (); 
	
	new Thread(delegate () {
    ZeroP();
	}).Start();

	Application.DoEvents();
}

 private void btnZeropieceNo_Click(object sender, EventArgs e)
{
	if (!nobutton)
	{
		return;
	}
	nobutton = false;
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText ("Per fare lo zero pezzo il tastatore dovrebbe essere tra l'utensile e il materiale.\n");
	btnZeropieceSi.Visible = false;
	btnZeropieceNo.Visible = false;
	PictureEn ();
	mickeymouse = true;
	exitbutton = true;
}

private void btnZeropieceOk_Click(object sender, EventArgs e)
{
	if (!okbutton)
	{
		return;
	}
	okbutton = false;
	
	new Thread(delegate () 
	{
		pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnZeropieceOk.Visible = false;
        });
		
		textBoxStatus.Clear ();
		textBoxStatus.AppendText (" \n");
		textBoxStatus.AppendText ("Scendo sul materiale.\n");
		
		exec.Code ("G1 Z0 F" + fmin); 
		while(exec.IsMoving()){}   
		
		textBoxStatus.Clear ();
		textBoxStatus.AppendText (" \n");
		textBoxStatus.AppendText ("Zero pezzo effettuato.\n");
		
				
		PictureEn ();
		mickeymouse = true;
		exitbutton = true;
		
	}).Start();
	
	Application.DoEvents ();
}

 private void btnExit_Click(object sender, EventArgs e)
{
	if (!exitbutton)
	{
		return;
	}
	textBoxStatus.Clear ();
	myForm.Close ();
}

public void ZeroP ()
{
	pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnZeropieceSi.Visible = false;
			btnZeropieceNo.Visible = false;
        });
	
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Scendo sul tastatore.\n");
	
	exec.Code ("G1 F75");
	exec.Code ("G31 Z" + zmin); 
    while(exec.IsMoving()){}
    
	zuno = exec.Getvar (5063);									// memorizzo il valore di Z della punta attuale
    zsu = zuno + 10;
    exec.Code ("G1 Z" + zsu); 	     									// salgo
    while(exec.IsMoving()){}
    
    
    AS3.Setfield (0, 228);								//riporto z DRO al valore di partenza
	AS3.Validatefield (228);
    Zprobe = Zprobe + 10;
    
 if (!AS3.GetLED (62))
	{
		AS3.Setfield (Zprobe, 228);								//riporto z DRO al valore di partenza
		AS3.Validatefield (228);
	}
	else
	{
		exec.Callbutton (517);
		AS3.Setfield (Zprobe, 228);								//riporto z DRO al valore di partenza
		AS3.Validatefield (228);
     	exec.Callbutton (516);
	}
    
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Togliere il tastatore. Fatto?\n");
	
	pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnZeropieceOk.BringToFront ();
			btnZeropieceOk.Visible = true;
        });
}

private void WorkValues ()
{
    xpos = Convert.ToDouble (AS3.Getfield (226));			   	//memorizzo la posizione iniziale RELATIVA di cambio utensile
    ypos = Convert.ToDouble (AS3.Getfield (227));
    zpos = Convert.ToDouble (AS3.Getfield (228));
    
    xzero = Convert.ToDouble (AS3.Getfield (871));			    //memorizzo la posizione iniziale ASSOLUTA di cambio utensile
    yzero = Convert.ToDouble (AS3.Getfield (872));
    zzero = Convert.ToDouble (AS3.Getfield (873));
   
    fpos = Convert.ToDouble (AS3.Getfield (867));			    //memorizzo il feedrate iniziale
    fmax = 1500;			     								//imposto il feedrate massimo
    fmin = 250;				   									//imposto il feedrate per la palpata
    zavv = 0;				     								//distanza rapida di avvicinamento al palpatore
    zmin = -140;				     							//profondità oltre il palpatore
    xtool = Convert.ToDouble (AS3.Getfield (3001));		     	//posizione X del palpatore (Settings -> Tool Change Location)
    ytool = Convert.ToDouble (AS3.Getfield (3002));		     	//posizione Y del palpatore
	Zprobe = Convert.ToDouble (AS3.Getfield (3007)); 			// altezza probe
}

 private void OldTool ()
{
	textBoxStatus.Clear();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Cambio utensile in atto....\n");
		
	exec.Code ("G1 F" + fmax);			     					//porto il feedrate al valore massimo
	exec.Code ("G1 G53 Z-5");			     					//porto Z a ZERO macchina
	while(exec.IsMoving()){}
    exec.Code ("G1 G53 X" + xtool + "Y" + ytool);    			//mi allineo sul palpatore
	while(exec.IsMoving()){}
    exec.Code ("G1 F" + fmin);			     					//porto il feedrate al minimo
	while(exec.IsMoving()){}
    
	textBoxStatus.Clear();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Prima misurazione utensile.\n");
    	
    exec.Code ("G31 Z" + zmin); 								//scendo sul palpatore per vedere la misura della punta attuale
    while(exec.IsMoving()){}
    
    zuno = exec.Getvar (5063);		     						//memorizzo il valore di Z della punta attuale
    zsu = zuno + 10;
	
    exec.Code ("G1 Z" + zsu);			     					//salgo per la seconda misura
	while(exec.IsMoving()){}
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Seconda misurazione utensile.\n");
    	
    exec.Code ("G31 Z" + zmin);									//scendo per la seconda volta per vedere la misura della punta attuale
    while(exec.IsMoving()){}
    
    zdue = exec.Getvar (5063);		     						//memorizzo il valore di Z della punta attuale
    zorig = (zuno + (zdue)) / 2;
    exec.Code ("G1 F" + fmax);			     					//riporto il feedrate al massimo
    exec.Code ("G1 G53 Z-5");			     					//porto Z a ZERO macchina
    while(exec.IsMoving()){}
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText ("Ora si puo cambiare l'utensile.\n");
	textBoxStatus.AppendText ("E stato cambiato l'utensile?");

	pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnToolchangeNo.Visible = true;
			btnToolchangeSi.Visible = true;
        });
}

private void NewOldTool ()
{
	pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnToolchangeNo.Visible = false;
			btnToolchangeSi.Visible = false;
        });
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Torno nella posizione iniziale.\n");
	
	exec.Code ("G1 G53 X" + xzero + "Y" + yzero);   			//torno alla posizione X Y zero pezzo
    while(exec.IsMoving()){}
    exec.Code ("G1 G53 Z" + zzero);		    					//riporto Z al valore zero pezzo
    while(exec.IsMoving()){}
    exec.Code ("G1 F" + fpos);			    					//riporto il feedrate al valore di partenza
    
	textBoxStatus.Clear ();
	textBoxStatus.AppendText(" \n");
	textBoxStatus.AppendText("Cambio utensile effettuato.\n");
	
	PictureEn ();
	mickeymouse = true;
	exitbutton = true;
}

private void NewTool ()
{
	pictureBoxUI.Invoke((MethodInvoker) delegate
        {
            btnToolchangeNo.Visible = false;
			btnToolchangeSi.Visible = false;
        });
	
	exec.Code ("G1 G53 X" + xtool + "Y" + ytool);  				//mi allineo sul palpatore
    while(exec.IsMoving()){}
    exec.Code ("G1 F" + fmin);			    					//porto il feedrate al minimo
    
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Prima misurazione utensile.\n");
    	
    exec.Code ("G31 Z" + zmin);	    							//scendo sul palpatore
    while(exec.IsMoving()){}
      
    zuno = exec.Getvar (5063);		    						//memorizzo il valore di Z della nuova punta
    zsu = zuno + 10;
    exec.Code ("G1 Z" + zsu);			    					//salgo per la seconda misura
    while(exec.IsMoving()){}
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Seconda misurazione utensile.\n");
    	
    exec.Code ("G31 Z" + zmin);	    							//scendo per la seconda volta per vedere la misura della nuova punta
    while(exec.IsMoving()){}
     
    zdue = exec.Getvar (5063);		    						//memorizzo il valore di Z della nuova punta
    znew = (zuno + (zdue)) / 2;
    exec.Code ("G1 F" + fmax);		            				//riporto il feedrate al massimo
    exec.Code ("G1 G53 Z-5");		            				//ritorno Z ZERO macchina
    while(exec.IsMoving()){}
	 
    textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Torno nella posizione iniziale.\n");
	textBoxStatus.AppendText (" ");
	
	zdif = zorig - (znew);		    							//controllo se l'utensile è più corto o piu lungo
     
	exec.Code ("G1 G53 X" + xzero + "Y" + yzero);  				//torno alla posizione X Y da dove ero partito
    while(exec.IsMoving()){}
    exec.Code ("G1 G53 Z" + (zzero - (zdif)));	    			//riporto Z al valore zero pezzo con la differenza utensile
    while(exec.IsMoving()){}
	
	if (!AS3.GetLED (62))
	{
		AS3.Setfield (zpos, 228);								//riporto z DRO al valore di partenza
		AS3.Validatefield (228);
	}
	else
	{
		exec.Callbutton (517);
		AS3.Setfield (zpos, 228);								//riporto z DRO al valore di partenza
		AS3.Validatefield (228);
     	exec.Callbutton (516);
	}
         
    exec.Code ("G1 F" + fpos);			    					//riporto il feedrate al valore di partenza
	
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
    textBoxStatus.AppendText ("Cambio utensile effettuato.\n");
	textBoxStatus.AppendText (" ");
	
	PictureEn ();
	mickeymouse = true;
	exitbutton = true;
}

private void PictureDis ()
{
	pictureBoxUI.MouseDown -= new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseDown);
	pictureBoxUI.MouseMove -= new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseMove);
	pictureBoxUI.Update ();
}

private void PictureEn ()
{
	pictureBoxUI.MouseDown += new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseDown);
	pictureBoxUI.MouseMove += new System.Windows.Forms.MouseEventHandler(pictureBoxUI_MouseMove);
	pictureBoxUI.Update ();
}