You've already forked lazarus-ccr
88 lines
2.4 KiB
ObjectPascal
88 lines
2.4 KiB
ObjectPascal
![]() |
{
|
||
|
Writes AvisoCNC G-Code
|
||
|
|
||
|
License: The same modified LGPL as the Free Pascal RTL
|
||
|
See the file COPYING.modifiedLGPL for more details
|
||
|
|
||
|
AUTHORS: Felipe Monteiro de Carvalho
|
||
|
Pedro Sol Pegorini L de Lima
|
||
|
}
|
||
|
unit avisocncgcodewriter;
|
||
|
|
||
|
{$mode objfpc}{$H+}
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
Classes, SysUtils,
|
||
|
fpvectorial;
|
||
|
|
||
|
type
|
||
|
{ TvAvisoCNCGCodeWriter }
|
||
|
|
||
|
TvAvisoCNCGCodeWriter = class(TvCustomVectorialWriter)
|
||
|
public
|
||
|
{ General reading methods }
|
||
|
procedure WriteToStrings(AStrings: TStrings; AData: TvVectorialDocument); override;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
{ TvGCodeVectorialWriter }
|
||
|
|
||
|
procedure TvAvisoCNCGCodeWriter.WriteToStrings(AStrings: TStrings;
|
||
|
AData: TvVectorialDocument);
|
||
|
var
|
||
|
i, j: Integer;
|
||
|
Str: string;
|
||
|
APath: TPath;
|
||
|
begin
|
||
|
AStrings.Clear;
|
||
|
|
||
|
AStrings.Add('M216 // Ligar monitor de carga');
|
||
|
AStrings.Add('G28 // Ir rapidamente para posição inicial');
|
||
|
AStrings.Add('G00');
|
||
|
|
||
|
// itera por todos os itens
|
||
|
for i := 0 to AData.GetPathCount - 1 do
|
||
|
begin
|
||
|
APath := AData.GetPath(i);
|
||
|
|
||
|
// levanta a broca
|
||
|
AStrings.Add('P01 // Sobe a cabeça de gravação');
|
||
|
// vai para o ponto inicial
|
||
|
AStrings.Add(Format('G01 X%f Y%f',
|
||
|
[APath.Points[0].X, APath.Points[0].Y]));
|
||
|
AStrings.Add('P02 // Abaixa a cabeça de gravação');
|
||
|
|
||
|
for j := 1 to APath.Len - 1 do
|
||
|
begin
|
||
|
case APath.Points[j].SegmentType of
|
||
|
st2DLine: AStrings.Add(Format('G01 X%f Y%f',
|
||
|
[APath.Points[j].X, APath.Points[j].Y]));
|
||
|
st3DLine: AStrings.Add(Format('G01 X%f Y%f Z%f',
|
||
|
[APath.Points[j].X, APath.Points[j].Y, APath.Points[j].Z]));
|
||
|
st2DBezier: AStrings.Add(Format('B02 X%f Y%f X%f Y%f X%f Y%f',
|
||
|
[APath.Points[j].X2, APath.Points[j].Y2,
|
||
|
APath.Points[j].X3, APath.Points[j].Y3,
|
||
|
APath.Points[j].X, APath.Points[j].Y]));
|
||
|
st3DBezier: AStrings.Add(Format('B03 X%f Y%f Z%f X%f Y%f Z%f X%f Y%f Z%f',
|
||
|
[APath.Points[j].X2, APath.Points[j].Y2, APath.Points[j].Z2,
|
||
|
APath.Points[j].X3, APath.Points[j].Y3, APath.Points[j].Z3,
|
||
|
APath.Points[j].X, APath.Points[j].Y, APath.Points[j].Z]));
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
AStrings.Add('P01 // Sobe a cabeça de gravação');
|
||
|
AStrings.Add('M30 // Parar o programa e retornar para posição inicial');
|
||
|
AStrings.Add('M215 // Desligar monitor de carga');
|
||
|
end;
|
||
|
|
||
|
initialization
|
||
|
|
||
|
RegisterVectorialWriter(TvAvisoCNCGCodeWriter, vfGCodeAvisoCNCPrototipoV5);
|
||
|
|
||
|
end.
|
||
|
|