AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Eine Eigene Linen Zeichnen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Eigene Linen Zeichnen ?

Ein Thema von mimi · begonnen am 2. Nov 2007 · letzter Beitrag vom 4. Nov 2007
Antwort Antwort
Seite 1 von 3  1 23      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 20:58
Hallo,
da ich schon länger Zeit für verschiedene Zwecke eine eigene Linen Zeichne möchte, habe ich diese Code heute geschrieben:
Delphi-Quellcode:
procedure DrawLinePluto(aCanvas:TCanvas; const x1,y1,x2,y2:Integer; PenColor:TColor);
var
  wx,wy:Integer;
  fx,fy,mx,my:Integer;
begin
  wx:=abs(x2-x1);
  wy:=abs(y2-y1);
  
  fx:=x1; fy:=y1;

  if wx = 0 then mx:=0 else mx:=+1;
  if wy = 0 then my:=0 else my:=+1;
  
  while True do begin
    aCanvas.Pixels[fx,fy]:=PenColor;
    fx:=fx+mx;
    fy:=fy+my;
    if (my <> 0) and (fy = y2) then break;
    if (mx <> 0) and (fx = x2) then break;
  end;
end;
Ich würde gerne von euch wisse, ob dieser Code alle Situationen Abdeckt und ob es "noch schneller" geht.
Im Internet habe ich leider nur sehr viele Beschreibungen gesehen, die mir zu Kompliziert beschrieben wahren.

Ich möchte später nach einigen Tests, verschiedene Varianten von dieser Procedere erstellen.
Z.b. Welche Die Mehrer Farben da stellen könne, im Moment kann die Line ja nur in einer Farbe da gestellt werden. Mein Ziel ist es mehrer Farben hinzubekommen, und mit Farb Muster und sowas.
das ist aber nicht weiter schwierig.

Was haltet ihr von der Procedere ?

edit:

Delphi-Quellcode:

procedure DrawLinePluto(aCanvas:TCanvas; const x1,y1,x2,y2:Integer; PenColor:TColor);
var
  wx,wy:Integer;
  fx,fy,mx,my:Integer;
begin
  wx:=x2-x1;
  wy:=y2-y1;
  fx:=x1; fy:=y1;

  if wx = 0 then mx:=0 else mx:=+1;
  if wy = 0 then my:=0 else my:=+1;

  while True do begin
    aCanvas.Pixels[fx,fy]:=PenColor;
    if wx > 0 then
      fx:=fx+mx
    else
      fx:=fx-mx;

    if wy > 0 then
      fy:=fy+my
    else
      fy:=fy-my;


    if (my <> 0) and (fy = y2) then break;
    if (mx <> 0) and (fx = x2) then break;
  end;
end;
So diese Procedere kann jetzt auch mit Negativen Werten arbeiten(scheint auf jedenfall so)

Edit2:
Leider kann diese Procedere nur Perfekte Lienen da stellen, was aber nicht immer sinvoll ist. es werden keine "Treppen" Lienen gezeichnet.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:03
Moin,

schau dir mal TCanvas genau an. Dies bringt sowas von Haus aus mit.

IMHO:
Delphi-Referenz durchsuchenMoveTo
Delphi-Referenz durchsuchenLineTo
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:05
das weiß ich auch, aber dort kann man nicht ohne weiteres eine Line z.b. in mehrer Farben zeichnen ohne das mühevoll mit Polygonen oder anders zu lösen.

ich kenne die TCanvas Klasse sehr gut.

Edit01: Erste Tests haben ergeben, das diese Procedere leider nicht mit negativen Zahlen umgehen kann.
hat einer eine Idee wie ich das am einfachsten einbauen könnte ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:13
Ich schätz mal das der Code hier

Delphi-Quellcode:
procedure DrawLine(aCanvas: TCanvas ; x1,y1,x2,y2: Integer ; color: TColor);
var
  crntColor: TColor;
begin
 crntColor := aCanvas.Pen.Color;
 aCanvas.Pen.Color := color;
 aCanvas.MoveTo(x1,y1);
 aCanvas.LineTo(x2,y2);
 aCanvas.Pen.Color := crntColor;
end;
das gleiche macht wie deiner...

wegen den negativen zahlen: Im Form links oben ist (0|0) weiter nach links gehts in dem fall nicht. Du müsstest da dann ein Offset einbauen das bspw. gezeichnet 50 gerechnet 0 ist.
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:15
Zitat:
Was haltet ihr von der Procedere ?
gar nichts.

folgender Aufruf klappt (verständlicher Weise) nicht:
DrawLinePluto(Self.Canvas, 0, 0, 150, 600, clBlue); es wird eine Linie gezeichnet im 45 Grad Winkel aber nicht zu dem Punkt den ich angegeben habe. Die Funktion ist so nutzlos, die Logic stimmt einfach nicht.

Dein Quelltext bewirkt das du eintweder in jedem Schritt 1 oder gar kein Pixel nach Rechts und unten gehst. Das bewirkt logischer Weise ein 45 Grad Winkel oder 0 Grad.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:18
Ja ! da gebe ich dir Recht.
Aber ich möchte ja später die Möglichkeit haben eine mehrfarbige Line zu gestalten das ist mit MoveTo und LieneTo leider sehr aufwendig. und mit Poligonen möchte ich das erst recht nicht machen.

Außerdem möchte ich selber verstehen wie ein DDA Algorithmus arbeitet .
Es gibt für viele mehrer Möglichkeiten je nach dem was man gerade braucht bzw. machen möchte.
Wie mein Zweck eignet sich MoveTo und LineTo leider nicht. es sei denn man kann irgendwie mit nur einem Procedere Aufruf mehrfarbig zeichnen.

edit:
was schlägst du also vor ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:21
ich schlage eine Verhältnisgleichung vor.
Wenn eine Linie von x1 nach x2 gezeichnet werden soll dann muss x bei der hälfte der Stecke auch auf der y-Achse die hälfte der Stecke zurück gelegt haben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:22
Ja das ist logisch..... und weiter ?

edit: Aber das mache ich doch schon im Prinzip ? beide Variablen werden um den gleichen Faktor erhört.....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:30
du erhöhst nicht um einen Factor sondern um 1 oder 0
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Eine Eigene Linen Zeichnen ?

  Alt 2. Nov 2007, 21:40
wie meinst du das ?
Wenn es eine Negative Line ist verringere ich den "Faktor" und wenn es eine Positive ist erhöhe ist sie.

Aber was müsste ich jetzt genau ändern damit das klappt ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:15 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