﻿InitializeGUI ();
dr = new DialogResult ();

if (!checkButton)
{
	return;
}

checkButton = false;

if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) 	// controllo se la macchina e referenziata.
	{
		btnYES.Visible = false;
		btnNO.Visible = false;
		btnOK.Visible = true;
		textBoxStatus.Clear ();
		textBoxStatus.AppendText (" \n");
		textBoxStatus.AppendText ("La macchina dovrebbe essere referenziata !!!");
		System.Media.SystemSounds.Exclamation.Play();
		dr = myForm.ShowDialog ();
		if (dr == DialogResult.OK)
		{
			myForm.Close();
			exec.Stop ();
			checkButton = true;
		}
		return;
	}
	
	AS3.Clearlist (2);
	WorkValues ();
	
	btnYES.Visible = true;
	btnNO.Visible = true;
	btnOK.Visible = false;
	textBoxStatus.Clear ();
	textBoxStatus.AppendText (" \n");
	textBoxStatus.AppendText ("Vuoi eseguire misurazione altezza utensile?");
	System.Media.SystemSounds.Exclamation.Play();
	dr = myForm.ShowDialog ();
	
	if(dr == DialogResult.Yes)
	{
		myForm.Close ();
		OldTool ();
		NewOldTool ();
		
	}
	else if (dr == DialogResult.No)
	{
		myForm.Close ();
		
	}
	checkButton = true;

#Events

// start global variables

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;
static bool checkButton = true;

Form myForm;
Button btnYES;
Button btnNO;
Button btnOK;
TextBox textBoxStatus;
PictureBox pictureBoxUI;
DialogResult dr;

public Point mouseLocation;

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 ()
{	
	exec.AddStatusmessage ("-->  Misurazione altezza utensile in corso ...");
		
	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()){}
    	
	AS3.Clearlist (2);
	exec.AddStatusmessage ("-->  Prima misurazione utensile.");
	    	
    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()){}
	
	AS3.Clearlist (2);
	exec.AddStatusmessage ("-->  Seconda misurazione utensile.");
	    	
    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()){}
	
	exec.Writekey ("GP Proto CNC", "ToolHeigh", Convert.ToString (zorig));
}

private void NewOldTool ()
{
	AS3.Clearlist (2);
	exec.AddStatusmessage ("-->  Torno nella posizione iniziale.");	
		
	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
    
	AS3.Clearlist (2);
	exec.AddStatusmessage ("-->  Misurazione altezza utensile effettuato.");
		
}

private void pictureBoxUI_MouseDown(object sender, MouseEventArgs e)
{
	mouseLocation = new Point(-e.X, -e.Y);
}

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

private void InitializeGUI ()
{
btnYES = new Button ();
btnYES.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(164)))), ((int)(((byte)(211)))), ((int)(((byte)(118)))));
btnYES.DialogResult = System.Windows.Forms.DialogResult.Yes;
btnYES.FlatAppearance.BorderSize = 0;
btnYES.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnYES.Font = new System.Drawing.Font("Aero Matics", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnYES.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnYES.Location = new System.Drawing.Point(236, 112);
btnYES.Size = new System.Drawing.Size(70, 22);
btnYES.TabIndex = 1;
btnYES.Text = "YES";
btnYES.UseVisualStyleBackColor = false;

btnNO = new Button ();
btnNO.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(164)))), ((int)(((byte)(211)))), ((int)(((byte)(118)))));
btnNO.DialogResult = System.Windows.Forms.DialogResult.No;
btnNO.FlatAppearance.BorderSize = 0;
btnNO.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnNO.Font = new System.Drawing.Font("Aero Matics", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnNO.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnNO.Location = new System.Drawing.Point(315, 112);
btnNO.Size = new System.Drawing.Size(70, 22);
btnNO.TabIndex = 2;
btnNO.Text = "NO";
btnNO.UseVisualStyleBackColor = false;

btnOK = new Button ();
btnOK.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(164)))), ((int)(((byte)(211)))), ((int)(((byte)(118)))));
btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
btnOK.FlatAppearance.BorderSize = 0;
btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btnOK.Font = new System.Drawing.Font("Aero Matics", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
btnOK.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(52)))), ((int)(((byte)(63)))));
btnOK.Location = new System.Drawing.Point(315, 112);
btnOK.Size = new System.Drawing.Size(70, 22);
btnOK.TabIndex = 3;
btnOK.Text = "OK";
btnOK.UseVisualStyleBackColor = false;

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("Aero Matics", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
textBoxStatus.ForeColor = System.Drawing.Color.LightGray;
textBoxStatus.Location = new System.Drawing.Point(83, 39);
textBoxStatus.Multiline = true;
textBoxStatus.ReadOnly = true;
textBoxStatus.Size = new System.Drawing.Size(302, 54);
textBoxStatus.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
textBoxStatus.TabIndex = 4;
textBoxStatus.TabStop = false;

pictureBoxUI = new PictureBox ();
pictureBoxUI.BackColor = System.Drawing.Color.Transparent;
pictureBoxUI.BackgroundImage = System.Drawing.Image.FromFile (Application.StartupPath + @"\Flashscreen\BMP\Bluescreenset\MessageBox.png");
pictureBoxUI.Location = new System.Drawing.Point(0, 0);
pictureBoxUI.Size = new System.Drawing.Size(400, 150);
pictureBoxUI.Controls.Add(btnYES);
pictureBoxUI.Controls.Add(btnNO);
pictureBoxUI.Controls.Add(btnOK);
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 = new Form ();
myForm.BackColor = System.Drawing.Color.DarkRed;
myForm.ClientSize = new System.Drawing.Size(400, 150);
myForm.Controls.Add(pictureBoxUI);
myForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
myForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
myForm.TransparencyKey = System.Drawing.Color.DarkRed;
myForm.TopMost = true;
}

