@milos
Was hast du denn alles in die Exe gepackt. Du hast paar Zeilen drin und das macht 2,2 MB Exe?
Wenn ich das richtig verstehe willst du eine Linie Isometrisch zeichnen. Wenn nicht, kannst du den Rest überlesen, ansonsten habe ich mal Just4Fun eine Funktion zum Zeichnen einer IsoLine entwickelt:
Delphi-Quellcode:
type
TIsoOrientation = (ioTopLeft, ioTopRight, ioBottomLeft, ioBottomRight);
procedure DrawIsoLinie(Canvas: TCanvas; Orientation: TIsoOrientation; x1, y1, cLength: Integer; var x2, y2: Integer);
var
a, b,
alpha: Double;
begin
a := cLength * Sin(DegToRad(30));
b := Sqrt(Sqr(cLength) - Sqr(a));
case Orientation of
ioTopLeft : begin
x2 := x1 - Round(b);
y2 := y1 - Round(a);
end;
ioTopRight : begin
x2 := x1 + Round(b);
y2 := y1 - Round(a);
end;
ioBottomLeft : begin
x2 := x1 - Round(b);
y2 := y1 + Round(a);
end;
ioBottomRight : begin
x2 := x1 + Round(b);
y2 := y1 + Round(a);
end;
end;
Canvas.MoveTo(x1, y1);
Canvas.LineTo(x2, y2);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x1, y1, x2, y2, Laenge: Integer;
Richtung: TIsoOrientation;
//ioTopLeft für linksoben, ioTopRight für rechtsoben, ioBottomLeft für untenlinks, ioBottomRight für untenrechts
begin
x1 := 100;
y1 := 100;
Laenge := 141;
Richtung := ioTopRight;
DrawIsoLinie(Canvas, Richtung, x1, x1, Laenge, x2, y2);
ShowMessage(Format('Linie beginnt bei x1 = %d; y1 = %d und endet bei x2 = %d; y2 = %d',
[x1, y1, x2, y2]));
end;
Ich hab sie nicht geprüft ob sie richtig zeichnet. Mit Orientation sagst du ob es nach obenlinks, untenlinks, obenrechts oder untenrechts geht, also die Richtung, cLength die Länge, x1 und x2 die Startposition. x2 und y2 sind Rückgabewerte, also nichts angeben, sondern nur Variablen setzten. Das ist die Position wo die Linie aufgehört.
//Edit:
Ich sehe gerade einen kleinen Fehler. Es gibt noch die Richtung rauf und runter, das habe ich vergessen. Sollte aber kein Problem sein das zu erweitern, sind ja nur gerade Linien.