AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Graph mit Graphics32 Darstellungsproblem
Thema durchsuchen
Ansicht
Themen-Optionen

Graph mit Graphics32 Darstellungsproblem

Ein Thema von TomyN · begonnen am 2. Jan 2019 · letzter Beitrag vom 5. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
TomyN
Online

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#1

Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 16:04
Hallo,

in meiner Software zeichne ich Graphen mit Graphics32 (V2), als Pfade (moveTo, lineTo).
Bei manchen Kombinationen von Kurvendicke und Abstand der Werte ergibt sich eine sehr komische Darstellung (siehe Anhang).
Ich bin da ziemlich ratlos, hat da jemand evtl. einen Tip?

Grüße Tomy
Miniaturansicht angehängter Grafiken
stange.png  
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 16:24
Ich vermute, dass da beim Anti-Aliasing etwas schief läuft. Versuch es mal mit TPolygon32 "am Stück" zu zeichnen - evtl. richt das ja schon als Workaround. Grundsätzlich wäre ein Stück Code aus der Zeichnroutine sehr praktisch um besser helfen zu können.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
TomyN
Online

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 16:49
Hi,

erstmal vielen Dank für Deine Antwort.

PolyLine gibt's leider nicht in Graphics32 und Polygon ist hier nicht zielführend ..

Code:
Type TLineData = TArrayOfFloatPoint;
 
Procedure DoPolyLine(const pfad: GR32_Paths.TFlattenedPath;
                             const data: TLineData;
                             const add: boolean);
  var maxl: cardinal;
      i:   cardinal;
  begin
    if ( Assigned(pfad) and ( Length(data) > 1 ) ) then begin
      maxl:= High(data);
      if add then
        pfad.MoveTo(data[0])
      else
        pfad.LineTo(data[0]);
      for I := 1 to maxl do pfad.LineTo(data[i]);
    end;
  end;
Der Aufruf erfolgt wie folgt:

Code:
Procedure OutCan(const daten: TArrayOfFloatPoint; const can: TCanvas32;
                 const shadow: boolean; const shadowY: single;
                 const tw: integer); inline;
  var endl: integer;
  begin
    endl:= high(daten);
    if (length(daten) > 0) then begin
      //Die linie
      can.Brushes[0].Visible:= TRUE;
      can.Brushes[1].Visible:= false;
      can.Path.Clear;
      can.Path.BeginPath;
      if (endl > 0) then begin
        (can.Brushes[0] as TStrokeBrush).StrokeWidth:= tw;
        DoPolyLine(can.Path, daten, False);
      end else begin
        (can.Brushes[0] as TStrokeBrush).StrokeWidth:= tw * 0.5;
        can.Path.Arc(daten[0], 0, doublePi, 0.25 * tw);
      end;
      can.Path.EndPath;
      //Füllen
      if Shadow then begin
        can.Path.Clear;
        can.Brushes[0].Visible:= FALSE;
        can.Brushes[1].Visible:= TRUE;
        //Die Daten dazu
        can.Path.Clear;
        can.Path.BeginPath;
        can.Path.MoveTo(daten[0].x, shadowY);
        uPaintGr32.DoPolyLine(can.Path, daten, False);
        can.Path.LineTo(daten[endl].X, shadowY);
        can.Path.ClosePath;
        can.Path.EndPath;
      end; // else can.Brushes[1].Visible:= TRUE;
    end;
  end;
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 17:28
Eine Klasse TCanvas32 kenne ich gar nicht, und habe sie auch in den Docs zur GR32 nicht finden können. Wo kommt die denn her?

Bisher bin ich immer so vorgegangen, dass ich alles auf ein zuvor geleertes Bitmap32 gezeichnet habe, und zum Schluss dann mit TBitmap32.PaintTo() direkt auf einen (konventionellen) Canvas.

Bzgl. PolyLine: TPolygon32 hat eine Property "Closed" mit der aus dem Polygon eine PolyLine wird. Zusätzlich gibt es aber auch noch die Funktion Polyline(), der man einfach ein Array von Punkten mit geben kann.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
TomyN
Online

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 17:52
Hi,
die Polylines etc. wurde mit der Version 2.0 von Graphics32 geändert.
Da wurde der Canvas32 eingeführt (GR32_PATHS, GR32_BRUSCHES etc).
Ich zeichne auch auf eine Bitmap32, das ganze wird dann in einer anderen Routine ausgegeben.

Tomy
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#6

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 2. Jan 2019, 18:22
Wenn ich das richtig erinnere, machen diese Renderer (TPolygonRenderer32) eine Umhüllung der eigentlichen Line (also ein "Hüllpolygon") und füllen es mit Farbe. Ich hatte es schon, dass diese Renderer nicht 100% funktionieren.
Ich vermute also einen Fehler im Renderer.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 3. Jan 2019, 08:20
Okay, eine Version 2 kenne ich nicht! (Ist mir auf der Projektseite dort auch nirgends begegnet - wo gibt's das denn?) Dann falle ich als "Sachkundiger" leider aus.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#8

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 3. Jan 2019, 12:53
@Tomy
Versuch doch mal sowas:
Delphi-Quellcode:
var
  can: TCanvas32;

  can.Renderer := TPolygonRenderer32VPR.Create;
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 4. Jan 2019, 10:19
Hallo Tommy,

vermutlich wirst du um eine Strokewidth von 2 nicht herumkommen, sonst verfälscht das Antialias die Farbausgabe. Strichstärken mit nur einem Pixel sind derzeit nicht wirklich möglich oder unschön.
Ich arbeite momentan an einer Verfeinerung der Ausgabe, die ich für mein Snap-Grid benötige. Ggf die Spline Routine angreifen... Wenn erfolgreich, richte ich ein Git Repository ein.

Schau dir ggf auch mal alternativ die Lösung von AngusJ an (http://www.angusj.com/delphi/clipper.php).
Peter
Was mache ich, wenn ein Bär meine Frau angreift?
Nichts. Er hat sie angegriffen, soll er doch selber sehen, wie er sich verteidigt.

Geändert von bytecook ( 4. Jan 2019 um 10:22 Uhr)
  Mit Zitat antworten Zitat
TomyN
Online

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Graph mit Graphics32 Darstellungsproblem

  Alt 4. Jan 2019, 11:52
Hi,
danke für die Infos. Die Ausgabe erfolgt nur mit der Strokebrush (Solidbrush.visible = False), wobei die strokeWidth je nach gewünschter Strichstärke variiert.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  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 17:45 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