AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit AngleArc

Ein Thema von Alex_ITA01 · begonnen am 20. Dez 2006 · letzter Beitrag vom 21. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Probleme mit AngleArc

  Alt 20. Dez 2006, 09:18
Hallo erstmal,
ich habe folgendes Problem:

Ich möchte zwei "viertel Kreise" auf einem Canvas zeichnen.
Der erste soll sich auf der linken Seite des Canvas-Image befinden und der andere auf der rechten Seite.
Der erste soll von links 90° abwärts nach rechts gebogen werden und der zweite soll von links 90° aufwärts nach rechts gebogen werden.
Ich habe mir die Funktion AngleArc genommen aber irgendwie komme ich nicht klar.
Den zweiten viertel Kreis habe ich schon so hinbekommen:

Delphi-Quellcode:
  Image1.Canvas.Moveto((Image1.Width Div 2), Image1.Height Div 2);
  AngleArc(Image1.Canvas.Handle,
           Image1.Width div 2,
           Image1.Height div 2,
           60,
           90,
           90);
Vielleicht könnt ihr mir weiter helfen, den ersten auch darzustellen.
Mein Problem sind die Startpunkte des Stiftes.
Wenn man sich das anguckt, ist der Startpunkt nicht immer der Beginn des Winkels sondern in der Mitte.
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
MFG Alex


EDIT:
Ich habe jetzt beide viertel Kreise hinbekommen aber meine Startpositionen stimmen nicht

Delphi-Quellcode:
  Image1.Canvas.Moveto((Image1.Width Div 2), Image1.Height Div 2);
  AngleArc(Image1.Canvas.Handle,
           Image1.Width div 2,
           Image1.Height div 2,
           60,
           90,
           90);

  Image1.Canvas.Moveto((Image1.Width Div 6), Image1.Height Div 2);
  AngleArc(Image1.Canvas.Handle,
           Image1.Width div 6,
           Image1.Height div 2,
           60,
           360,
           90);
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 11:14
Hallo Alex,

warum mischst du Canvas-Methoden und direkte API-Aufrufe? TCanvas hat eine Methode Arc(), aber egal. MoveTo() ist an dieser Stelle wertlos, da AngleArc() die momentane Cursor-Position von TCanvas nicht kennt. Soll die Mitte vom Image der Punkt pt sein, in dem sich die beiden Virtelkreise berühren, dann sollte AngleArc(Handle, pt.X, pt.Y - Radius, 0, 90) den unteren und AngleArc(Handle, pt.X, pt.Y + Radius, 270, 0) den oberen Viertelkreis zeichnen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 12:53
Im Anhang mal ein Screenshot, was ich darstellen möchte.
Stellt euch einfach vor, es wäre alles abgerundet und nicht so eckig (habe ich nur ganz schnell entworfen).
Ich hoffe ihr könnt mir da helfen.
MFG Alex
Miniaturansicht angehängter Grafiken
bogen_567.jpg  
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 13:43
Vielleicht hilft Dir die KreisFunktion in diesen Beitrag ja etwas weiter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 13:49
Sorry Alex,

das MoveTo muss tatsächlich sein:

Delphi-Quellcode:
procedure TDemoForm.FormClick(Sender: TObject);
const
  iRadius = 60;
var
  ptCenter: TPoint;
begin
  ptCenter.X := ClientWidth div 2;
  ptCenter.Y := ClientHeight div 2;
  with Canvas do
  begin
    Pen.Width := 3;
    MoveTo(ptCenter.X - iRadius, ptCenter.Y);
    AngleArc(Handle, ptCenter.X, ptCenter.Y, iRadius, 180, 180);
    MoveTo(ptCenter.X - iRadius, ptCenter.Y);
    AngleArc(Handle, ptCenter.X - 2 * iRadius, ptCenter.Y, iRadius, 0, 90);
    MoveTo(ptCenter.X + 2 * iRadius, ptCenter.Y - iRadius);
    AngleArc(Handle, ptCenter.X + 2 * iRadius, ptCenter.Y, iRadius, 90, 90);
  end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 14:06
Danke marabu,
der Source funktioniert super.
Ich würde nur gerne die "Geraden" (die in/von Richtung des Knickes unten) selber zeichnen oder eben einen Wert vorgeben. Denn das Problem ist, es soll wie eine Art Grube sein und die wird unterschiedlich tief (je nachdem, welchen Wert ich ihr gebe).
Ich hoffe du kannst mir da weiter helfen...
Viele Grüße,
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 15:11
Hi,

es sind nur ganz kleine Änderungen notwendig. Ich habe die Variable iDist eingeführt, welche festlegt, wie weit die Viertelkreise vertikal auseinander geschoben werden sollen:

Delphi-Quellcode:
procedure TDemoForm.FormClick(Sender: TObject);
const
  iRadius = 60;
var
  ptCenter: TPoint;
  iDist: Integer;
begin
  ptCenter.X := ClientWidth div 2;
  ptCenter.Y := ClientHeight div 2;
  iDist := 50;
  with Canvas do
  begin
    Pen.Width := 3;
    MoveTo(ptCenter.X - iRadius, ptCenter.Y + iDist div 2);
    AngleArc(Handle, ptCenter.X, ptCenter.Y + iDist div 2, iRadius, 180, 180);
    MoveTo(ptCenter.X - iRadius, ptCenter.Y - iDist div 2);
    // alternativ - um die Lücke zu schließen:
    // MoveTo(ptCenter.X - iRadius, ptCenter.Y + iDist div 2);
    AngleArc(Handle, ptCenter.X - 2 * iRadius, ptCenter.Y - iDist div 2, iRadius, 0, 90);
    MoveTo(ptCenter.X + 2 * iRadius, ptCenter.Y - iRadius - iDist div 2);
    AngleArc(Handle, ptCenter.X + 2 * iRadius, ptCenter.Y - iDist div 2, iRadius, 90, 90);
    // um die Lücke zu schließen:
    // LineTo(ptCenter.X + iRadius, ptCenter.Y + iDist div 2)
  end;
end;
Wenn du den unteren bzw. oberen Rand deiner "Grube" auf konstantem Niveau halten möchtest, dann zeigt dir ein Vergleich der beiden Quellcodes an welcher Stelle du anpassen musst.

Viel Spaß
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#8

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 15:24
Danke, dass hilft mir super weiter.
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#9

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 15:54
Hallo marabu,
eine Frage habe ich dann wohl doch noch
Wie bekomme ich es hin, wenn dieser Distanzwert gegen 0 geht, dass dann auch keine Grube gezeichnet wird sondern eben fast eine Gerade?
Ich hoffe, du kannst mir auch hierbei helfen.
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Probleme mit AngleArc

  Alt 20. Dez 2006, 16:41
Hallo Alex,

bei meinem Beispiel haben die Viertelkreise den gleichen Krümmungsradius, das schafft schöne Übergänge. Wenn du eine Grube in Abhängigkeit von zwei Parametern (Öffnungsdurchmesser und Grubentiefe) zeichnen möchtest, wobei die Übergänge auch stetig sein sollen, dann ist eventuell die Methode Arc() von TCanvas einfacher in der Verwendung, da du dabei mit den Hüllen-Rechtecken arbeiten kannst. Fertigen Code habe ich jetzt keinen für dich, aber schwierig ist es nicht. Du arbeitest dann mit Ellipsen, nicht mit Kreisen. Probiere es mal.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz