procedure TGCodeRenderer.DrawArc(CX, CY, CZ, Radius, StartAngle, EndAngle: Double; Clockwise: Boolean; Color: TColor);
const
Segments = 100; // Anzahl der Segmente für den Bogen
var
Step, Angle, NextAngle: Double;
i: Integer;
X1, Y1, Z1, X2, Y2, Z2: Double;
begin
// Setze die Farbe (abhängig vom verwendeten
OpenGL-Setup)
glColor3f(GetRValue(Color) / 255.0, GetGValue(Color) / 255.0, GetBValue(Color) / 255.0);
// Berechne die Winkel-Differenz für die Richtung
if Clockwise then
begin
if EndAngle > StartAngle then
EndAngle := EndAngle - 360;
Step := (StartAngle - EndAngle) / Segments;
end
else
begin
if EndAngle < StartAngle then
EndAngle := EndAngle + 360;
Step := (EndAngle - StartAngle) / Segments;
end;
// Zeichnen des Bogens im 3D-Raum mit GL_LINES
glBegin(GL_LINES);
for i := 0 to Segments - 1 do
begin
// Berechne den aktuellen Winkel und den nächsten Winkel für die Linie
Angle := StartAngle + i * Step;
NextAngle := StartAngle + (i + 1) * Step;
// Aktuellen Punkt (X1, Y1, Z1) berechnen
X1 := CX + Radius * Cos(DegToRad(Angle));
Y1 := CY + Radius * Sin(DegToRad(Angle));
Z1 := CZ;
// Nächsten Punkt (X2, Y2, Z2) berechnen
X2 := CX + Radius * Cos(DegToRad(NextAngle));
Y2 := CY + Radius * Sin(DegToRad(NextAngle));
Z2 := CZ;
// Linie zeichnen zwischen den Punkten (X1, Y1, Z1) und (X2, Y2, Z2)
glVertex3f(X1, Y1, Z1);
glVertex3f(X2, Y2, Z2);
end;
glEnd;
FCurrentX := X2;
FCurrentY := Y2;
FCurrentZ := Z2;
end;