Skip to content

Commit

Permalink
Version 1.7.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
svenhb authored Jan 24, 2024
1 parent 94bd0a0 commit 9001141
Show file tree
Hide file tree
Showing 32 changed files with 4,655 additions and 1,426 deletions.
621 changes: 612 additions & 9 deletions GRBL-Plotter/MachineControl/ControlLaser.Designer.cs

Large diffs are not rendered by default.

123 changes: 123 additions & 0 deletions GRBL-Plotter/MachineControl/ControlLaser.ar.resx
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,127 @@
<data name="cBLaserMode.Text" xml:space="preserve">
<value>وضع الليزر 32 دولار</value>
</data>
<data name="TbPatternHeadline.Text" xml:space="preserve">
<value>العنوان</value>
</data>
<data name="TbPatternHeadline.ToolTip" xml:space="preserve">
<value>العنوان فوق نمط الاختبار</value>
</data>
<data name="CbPatternLabelFirst.Text" xml:space="preserve">
<value>اكتب التسميات أولاً</value>
</data>
<data name="CbPatternLabelFirst.ToolTip" xml:space="preserve">
<value>في حالة تمكينه، سيتم نقش الملصقات قبل مناطق الاختبار</value>
</data>
<data name="label28.Text" xml:space="preserve">
<value>سرعة</value>
</data>
<data name="NudPatternLabelSpeed.ToolTip" xml:space="preserve">
<value>معدل التغذية لنقش الملصقات</value>
</data>
<data name="NudPatternLabelPower.ToolTip" xml:space="preserve">
<value>قوة الليزر لنقش الملصقات</value>
</data>
<data name="label27.Text" xml:space="preserve">
<value>قوة الليزر</value>
</data>
<data name="groupBox10.Text" xml:space="preserve">
<value>نقش التسمية</value>
</data>
<data name="groupBox9.Text" xml:space="preserve">
<value>منطقة الاختبار / المستطيل</value>
</data>
<data name="groupBox8.Text" xml:space="preserve">
<value>السرعة / معدل التغذية على المحور Y</value>
</data>
<data name="groupBox7.Text" xml:space="preserve">
<value>قوة الليزر على المحور X</value>
</data>
<data name="BtnMaterialTest.Text" xml:space="preserve">
<value>إنشاء نمط الاختبار</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>نمط اختبار المواد</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>محاذاة الليزر</value>
</data>
<data name="BtnMaterialSingleTest.Text" xml:space="preserve">
<value>إنشاء اختبار واحد</value>
</data>
<data name="BtnMaterialSingleTest.ToolTip" xml:space="preserve">
<value>قم بإنشاء منطقة اختبار واحدة باستخدام الحد الأدنى من طاقة الليزر والحد الأقصى لمعدل التغذية</value>
</data>
<data name="NudPatternGap.ToolTip" xml:space="preserve">
<value>المسافة بين مناطق الاختبار</value>
</data>
<data name="NudPatternYSize.ToolTip" xml:space="preserve">
<value>ارتفاع منطقة الاختبار</value>
</data>
<data name="label26.Text" xml:space="preserve">
<value>فجوة</value>
</data>
<data name="NudPatternInterval.ToolTip" xml:space="preserve">
<value>المسافة بين الخطوط لملء منطقة الاختبار</value>
</data>
<data name="label25.Text" xml:space="preserve">
<value>مسافة الخط / الفاصل الزمني</value>
</data>
<data name="label24.Text" xml:space="preserve">
<value>الحجم Y</value>
</data>
<data name="NudPatternXSize.ToolTip" xml:space="preserve">
<value>عرض منطقة الاختبار</value>
</data>
<data name="label23.Text" xml:space="preserve">
<value>الحجم X</value>
</data>
<data name="CbPatternYLabel.Text" xml:space="preserve">
<value>إظهار التسمية</value>
</data>
<data name="CbPatternYLabel.ToolTip" xml:space="preserve">
<value>يُظهر معدلات التغذية المطبقة على يسار مناطق الاختبار</value>
</data>
<data name="NudPatternYMax.ToolTip" xml:space="preserve">
<value>سيتم تطبيق الحد الأقصى لمعدل التغذية أولاً (أسفل)</value>
</data>
<data name="label20.Text" xml:space="preserve">
<value>الأعلى.</value>
</data>
<data name="NudPatternYMin.ToolTip" xml:space="preserve">
<value>سيتم تطبيق الحد الأدنى لمعدل التغذية أخيرًا (أعلى)</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>دقيقة.</value>
</data>
<data name="NudPatternYNumber.ToolTip" xml:space="preserve">
<value>عدد حقول الاختبار لمعدل التغذية في العمودي (المحور الصادي)</value>
</data>
<data name="label22.Text" xml:space="preserve">
<value>رقم</value>
</data>
<data name="CbPatternXLabel.Text" xml:space="preserve">
<value>إظهار التسمية</value>
</data>
<data name="CbPatternXLabel.ToolTip" xml:space="preserve">
<value>يُظهر قوى الليزر المطبقة أسفل مناطق الاختبار</value>
</data>
<data name="NudPatternXMax.ToolTip" xml:space="preserve">
<value>قوة الليزر للتوقف مع (أقصى اليمين)</value>
</data>
<data name="label19.Text" xml:space="preserve">
<value>الأعلى. %</value>
</data>
<data name="NudPatternXMin.ToolTip" xml:space="preserve">
<value>قوة الليزر لتبدأ (أقصى اليسار)</value>
</data>
<data name="label18.Text" xml:space="preserve">
<value>دقيقة. %</value>
</data>
<data name="NudPatternXNumber.ToolTip" xml:space="preserve">
<value>عدد مجالات الاختبار لطاقة الليزر في المحور الأفقي (س)</value>
</data>
<data name="label17.Text" xml:space="preserve">
<value>رقم</value>
</data>
</root>
198 changes: 196 additions & 2 deletions GRBL-Plotter/MachineControl/ControlLaser.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* GRBL-Plotter. Another GCode sender for GRBL.
This file is part of the GRBL-Plotter application.
Copyright (C) 2015-2021 Sven Hasemann contact: [email protected]
Copyright (C) 2015-2024 Sven Hasemann contact: [email protected]
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand All @@ -25,9 +25,14 @@ You should have received a copy of the GNU General Public License
* 2021-11-23 set default for tprop
* 2021-12-09 line 222 check if (cBTool.Count == 0)
* 2021-12-22 check if is connected to grbl before sending code
* 2024-01-14 add material test pattern
*/

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows;
using System.Windows.Forms;

namespace GrblPlotter
Expand Down Expand Up @@ -187,7 +192,12 @@ private void CbLaserMode_CheckedChanged(object sender, EventArgs e)

private void RefreshValues()
{
lblInfo.Text = string.Format("Max spindle speed: $30={0}; Min spindle speed: $31={1}; Laser Mode: $32={2}", Grbl.GetSetting(30), Grbl.GetSetting(31), Grbl.GetSetting(32));
lblInfo.Text = LblPatternInfo.Text = string.Format("Max spindle speed: $30={0}; Min spindle speed: $31={1}; Laser Mode: $32={2}", Grbl.GetSetting(30), Grbl.GetSetting(31), Grbl.GetSetting(32));
if (Grbl.GetSetting(30) != 100)
{ lblInfo.BackColor = LblPatternInfo.BackColor = Color.Yellow; }
else
{ lblInfo.BackColor = LblPatternInfo.BackColor = Color.Transparent; }

cBLaserMode.CheckedChanged -= CbLaserMode_CheckedChanged;
cBLaserMode.Checked = (Grbl.GetSetting(32) > 0); // ? true : false;
cBLaserMode.CheckedChanged += CbLaserMode_CheckedChanged;
Expand Down Expand Up @@ -247,6 +257,190 @@ private void BtnToolUpdate_Click(object sender, EventArgs e)
}
CbTool_SelectedIndexChanged(sender, e);
}



private string lasergcode = "";
public string LaserGCode
{ get { return lasergcode; } }
public GraphicsPath PathBackground = new GraphicsPath();
// private GraphicsPath path;

private static readonly StringBuilder gcodeString = new StringBuilder();


private void BtnMaterialTest_Click(object sender, EventArgs e)
{
gcodeString.Clear();
RefreshValues();

int fieldXMax = (int)NudPatternXNumber.Value;
int fieldYMax = (int)NudPatternYNumber.Value;

double speed, speedInc;
double speedMin = (double)NudPatternYMin.Value;
double speedMax = (double)NudPatternYMax.Value;

double power, powerInc;
double powerMin = (double)NudPatternXMin.Value;
double powerMax = (double)NudPatternXMax.Value;

double sizeX = (double)NudPatternXSize.Value;
double sizeY = (double)NudPatternYSize.Value;
double gap = (double)NudPatternGap.Value;

double interval = (double)NudPatternInterval.Value;

bool sendM5 = CbPatternSendM5.Checked;

Rect block = new Rect(0, 0, sizeX, sizeY);

speedInc = (speedMax - speedMin) / (fieldYMax - 1);
powerInc = (powerMax - powerMin) / (fieldXMax - 1);

gcodeString.AppendFormat("G90\r\n");

if (CbPatternLabelFirst.Checked && (CbPatternXLabel.Checked || CbPatternYLabel.Checked))
{
WriteLabels(powerInc, speedInc);
}

int id = 0;
string colorVal;
double colorInc = 255 / (fieldXMax * fieldYMax);
int grey;
for (int fieldY = 0; fieldY < fieldYMax; fieldY++)
{
speed = speedMin + (fieldYMax - fieldY - 1) * speedInc;
for (int fieldX = 0; fieldX < fieldXMax; fieldX++)
{
power = powerMin + fieldX * powerInc;
block.X = fieldX * (sizeX + gap);
block.Y = fieldY * (sizeY + gap);
id++;
grey = 255 - (int)colorInc * (fieldY + 1) * (fieldX + 1);
colorVal = ColorTranslator.ToHtml(Color.FromArgb(255, grey, grey, grey)).Substring(1);
Gcode.Comment(gcodeString, string.Format("{0} Id=\"{1}\" PenColor=\"{2}\" Power=\"{3:0.0}\" Feedrate=\"{4:0}\" PenWidth=\"{5:0.000}\">", XmlMarker.FigureStart, id, colorVal, power, speed, interval));
GenerateBlock(block, interval, power, speed, sendM5);
Gcode.Comment(gcodeString, string.Format("{0}>", XmlMarker.FigureEnd)); // Graphic2GCode.SetFigureEnd(figureCount));
}
}

if (!CbPatternLabelFirst.Checked && (CbPatternXLabel.Checked || CbPatternYLabel.Checked))
{
WriteLabels(powerInc, speedInc);
}
gcodeString.AppendFormat("M30\r\n");

gcodeString.Replace(',', '.');
lasergcode = gcodeString.ToString();
}

private void GenerateBlock(Rect block, double interval, double power, double speed, bool sendM5)
{
double startX = block.X, startY = block.Y;

gcodeString.AppendFormat("G0 X{0:0.00} Y{1:0.00}\r\n", startX, startY);
gcodeString.AppendFormat("G1 X{0:0.00} Y{1:0.00} M3 S{2:0} F{3:0}\r\n", startX + block.Width, startY, power, speed);
if (sendM5) gcodeString.AppendFormat("M5\r\n");

while (startY < (block.Y + block.Height - 2 * interval))
{
startY += interval;
gcodeString.AppendFormat("G0 X{0:0.00} Y{1:0.00}\r\n", startX + block.Width, startY);
if (sendM5) gcodeString.AppendFormat("M3\r\n");
gcodeString.AppendFormat("G1 X{0:0.00} Y{1:0.00}\r\n", startX, startY);
if (sendM5) gcodeString.AppendFormat("M5\r\n");
startY += interval;
gcodeString.AppendFormat("G0 X{0:0.00} Y{1:0.00}\r\n", startX, startY);
if (sendM5) gcodeString.AppendFormat("M3\r\n");
gcodeString.AppendFormat("G1 X{0:0.00} Y{1:0.00}\r\n", startX + block.Width, startY);
if (sendM5) gcodeString.AppendFormat("M5\r\n");
}
if (!sendM5) gcodeString.AppendFormat("M5\r\n");
}

private void WriteLabels(double powerInc, double speedInc)
{
int fieldXMax = (int)NudPatternXNumber.Value;
int fieldYMax = (int)NudPatternYNumber.Value;
double speedMin = (double)NudPatternYMin.Value;
double powerMin = (double)NudPatternXMin.Value;
double sizeX = (double)NudPatternXSize.Value;
double sizeY = (double)NudPatternYSize.Value;
double gap = (double)NudPatternGap.Value;
double letterHeight = sizeX / 3;

Gcode.Comment(gcodeString, string.Format("{0} Id=\"{1}\" PenColor=\"{2}\" Power=\"{3:0.0}\" Feedrate=\"{4:0}\" PenWidth=\"{5:0.000}\">", XmlMarker.FigureStart, 999, "black", NudPatternLabelPower.Value, NudPatternLabelSpeed.Value, 0.05));
GCodeFromFont.Reset();
GCodeFromFont.GenerateGCodeOnly = true;
GCodeFromFont.GCHeight = letterHeight;
gcodeString.AppendFormat("M3 S{0:0} F{1:0}\r\n", NudPatternLabelPower.Value, NudPatternLabelSpeed.Value);

if (TbPatternHeadline.Text.Length > 0)
{
GCodeFromFont.GCText = TbPatternHeadline.Text;
GCodeFromFont.GCOffX = sizeX/2;
GCodeFromFont.GCOffY = fieldYMax * (sizeY + gap);
GCodeFromFont.GetCode(0); // no page break
gcodeString.Append(GCodeFromFont.GCode);
GCodeFromFont.GCode.Clear();
}

if (CbPatternYLabel.Checked)
{
for (int fieldY = 0; fieldY < fieldYMax; fieldY++)
{
GCodeFromFont.GCText = string.Format("{0:0}", (speedMin + ((fieldYMax - fieldY - 1) * speedInc)));
GCodeFromFont.GCOffX = -sizeX;
GCodeFromFont.GCOffY = fieldY * (sizeY + gap) + (sizeY / 2) - (letterHeight / 2);
GCodeFromFont.GetCode(0); // no page break
gcodeString.Append(GCodeFromFont.GCode);
GCodeFromFont.GCode.Clear();
}
}
if (CbPatternXLabel.Checked)
{
for (int fieldX = 0; fieldX < fieldXMax; fieldX++)
{
GCodeFromFont.GCText = string.Format("{0:0}%", (powerMin + (fieldX * powerInc)));
GCodeFromFont.GCOffX = fieldX * (sizeX + gap) + gap;
GCodeFromFont.GCOffY = -(sizeY / 2) - gap;
GCodeFromFont.GetCode(0); // no page break
gcodeString.Append(GCodeFromFont.GCode);
GCodeFromFont.GCode.Clear();
}
}
gcodeString.AppendFormat("M5\r\n");
Gcode.Comment(gcodeString, string.Format("{0}>", XmlMarker.FigureEnd)); // Graphic2GCode.SetFigureEnd(figureCount));
}

private void BtnMaterialSingleTest_Click(object sender, EventArgs e)
{
gcodeString.Clear();
RefreshValues();

double speedMax = (double)NudPatternYMax.Value;
double powerMin = (double)NudPatternXMin.Value;
double sizeX = (double)NudPatternXSize.Value;
double sizeY = (double)NudPatternYSize.Value;
double interval = (double)NudPatternInterval.Value;
Rect block = new Rect(0, 0, sizeX, sizeY);

gcodeString.AppendFormat("G90\r\n");

string colorVal;
int grey = 100;
colorVal = ColorTranslator.ToHtml(Color.FromArgb(255, grey, grey, grey)).Substring(1);
Gcode.Comment(gcodeString, string.Format("{0} Id=\"{1}\" PenColor=\"{2}\" Power=\"{3:0.0}\" Feedrate=\"{4:0}\" PenWidth=\"{5:0.000}\">", XmlMarker.FigureStart, 1, colorVal, powerMin, speedMax, interval));
GenerateBlock(block, interval, powerMin, speedMax, CbPatternSendM5.Checked);
Gcode.Comment(gcodeString, string.Format("{0}>", XmlMarker.FigureEnd)); // Graphic2GCode.SetFigureEnd(figureCount));

gcodeString.AppendFormat("M30\r\n");

gcodeString.Replace(',', '.');
lasergcode = gcodeString.ToString();
}
}
}

Loading

0 comments on commit 9001141

Please sign in to comment.