AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?
Thema durchsuchen
Ansicht
Themen-Optionen

[Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

Ein Thema von ColeZero · begonnen am 8. Jul 2010 · letzter Beitrag vom 14. Jul 2010
Antwort Antwort
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#1

[Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 17:47
Hallo

Ich spiele derzeit mit der graphics32 lib herum und beschäftige mich derzeit mit transforming. Ich möchte ein Polygon auf eine fixe Position bringen, dazu mache ich folgendes:

Delphi-Quellcode:
var
  afftrans : TAffineTransformation;
  Polygon : TPolygon32;
  [...]
begin
  [...]
  afftrans:= TAffineTransformation.Create;
  afftrans.Translate(20,20);
  Polygon.Transform(afftrans);
  
  [...]

end;
Das Polygon wird nun um 20 punkte nach x und um 20 punkte nach y verschoben. Das heißt aber auch, dass das Polygon jedesmal um 20 punkte verschoben wird wenn der Code durchlaufen wird. Also wandert das Polygon immer weiter nach rechts z.b.
Ich möchte es aber auch eine Fixe Position setzen.
Grund: Ich möchte das Polygon per Mausklick irgendwo hin setzen.
Idee: A) Polygon auf Fixe Position bringen (Maus Coords.)
B) Aktuelle Position des Polygons ermitteln, Maus Coords.
abziehen und die Difference als Translate an das Polygon
schicken.

Meine Frage daher: Kann ich das Polygon A) Auf ne Fixe Position setzen oder B ) Dier derzeitge Transformation ermitteln?

Ich hoffe ich konnte euch das Problem klar machen

Mfg
colezero
  Mit Zitat antworten Zitat
Medium

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

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 18:15
Warum lässt du die Transformation denn überhaupt mehrmals ausführen?
"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
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#3

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 18:40
Wenn ich auf das Canvas mehrmals drauf klicke, wird diese procedure auch mehrmals durchlaufen Aber ich kann da nicht einfach die X,Y Coords. der Maus übergeben, weil er das Polygon sonst jedesmal so verschieben würde:
Delphi-Quellcode:
 AltePosition.X := AltePosition.X + NeuesX;
 AltePosition.Y := AltePosition.Y + NeuesY;
Aber ich will ja nur
Delphi-Quellcode:
 ALtePosition.X := NeuesX;
 AltePosition.Y := NeuesY;

Geändert von mkinzler ( 8. Jul 2010 um 18:51 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Medium

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

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 20:27
Was in der Grafik nicht unüblich ist, ist das Mitführen einer ganz eigenen Transformationsmatrix für jedes Objekt. Dann würde das eigentliche Polygon nie verschoben, sondern immer nur zum Zeitpunkt der Anzeige eine Kopie davon mit der zugehörigen Matrix. Damit kann man dann stets von der Ursprungsposition ausgehen. (In der Matrix steht dann ja quasi die absolute Verschiebung (wenn es nur eine Translationsmatrix ist).)
Da ich hier leider weder Delphi noch Gr32 zur Hand habe, weiss ich nicht, ob das die Polygonklasse evtl. ohnehin schon intern so macht, und du an die Matrix dran kommst. Im Zweifel eben selbst nen kleinen Wrapper drum würgeln, dann ist's sogar hübsch
"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
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#5

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 20:38
Ich denke ich werd mir das mal anschauen und evtl. so machen, klingt für mich auch sehr hübsch Ich werde die Tage mich dran machen und schauen was nach einen schönen Wochenende bei SOnne im Garten so alles dabei rauskommt und die Ergebnisse hier rein stellen.

Danke dir für deine Hilfen/Anregungen

Viele Grüße
  Mit Zitat antworten Zitat
Medium

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

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 8. Jul 2010, 21:12
schönen Wochenende bei SOnne im Garten
38°C und Gewitter mit ~60% rel. Luftfeuchte nennst du schön!? Ich brauch'n Kaffee und tauch wieder in meinen Keller ab
"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
blackfin
(Gast)

n/a Beiträge
 
#7

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 9. Jul 2010, 10:57
Das Problem bei den Graphics32 ist, dass es eben keine eigene Transformations-Matrix für ein TPolygon32 mitführt und somit auf diese nicht zugegriffen werden kann.
Wenn man ein Polygon über die TAffineTransformation transformiert, werden die Koordinaten der Punkte-Arrays in Polygon.Points direkt (und permanent!) überschrieben und nicht erst, wie z.B. bei OpenGL, eine Transformationsmatrix des Objektes verändert, die man nachher auch noch manipulieren könnte.

Du könntest dir aber z.B. eine eigene Klasse von TPolygon32 ableiten, die genau das macht, dass vor dem Zeichnen eben eine zuvor dem Polygon zugewiesene TAffineTransformation (per Matrix-Multiplikation) angewendet wird, die Punkte selbst aber nicht durch ein transform() überschrieben werden.
Dazu müsstest du die Draw() und Transform()-Routinen überschreiben und der neuen Klasse eine neue Property einer TAffineTransformation geben, die dann immer direkt vor dem Zeichnen angewendet wird.
Ab da arbeitest du dann nur noch mit der AffineTransformation. Diese kannst du über AffineTransformation.Clear() auch zurücksetzen, dadurch wird die Identitätsmatrix für die Transformation geladen.

Ich weiss jetzt ja nicht, was du genau mit dem Zeug vorhast, aber wenn es darum geht, mit Matrizen, Transformationen und Polygonen herumzuspielen, dann würde ich dir jetzt fast raten, vergiss die Graphics32 und nimm gleich OpenGL
Da bekommst du die Hardware-Beschleunigung frei Haus und noch diverse andere Nettigkeiten, und vor Allem...es wird nie langweilig damit
Die Lernkruve ist zwar am Anfang ziemlich steil, aber wenn man mal die Grundbegriffe verstanden hat, macht es wirklich Spass.

Geändert von blackfin ( 9. Jul 2010 um 11:22 Uhr)
  Mit Zitat antworten Zitat
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#8

AW: [Graphics32] (Problem) Wie bewege ich ein Polygon auf eine fixe Position?

  Alt 14. Jul 2010, 12:40
Hallo Hallo,

danke dir blackfin für die Anregungen.

Ich hab mein Problem am Wochenende über eine eigene Klasse gelöst. Die neue Klasse wird von TPOlygon32 abgeleitet und wurde mit entsprechenden Matrizen versehen.
Weil ich auch gesehen hab, dass Transform vom Polygon direkt die Vertices verschiebt.
Es funktioniert so weit, aber ich bin nicht richtig glücklich damit. Ich glaube es ist/war den Aufwand nicht wirklich wert.

Was genau mein Vorhaben ist kann ich sagen, ich wollte eine Radial-Menu Komponente für ein Projekt von mit entwickeln. Also ein Menu, dass sich kreisförmig um ein Objekt öffnet. Mit der GDI kommt man nicht weit, finde ich zumin. und mit der GDI+ auch nicht, weil sie einfach zu lahm ist und viel CPU verbraucht. Vielleicht komme ich mit OpenGL besser an eine Lösung.

Ich werde mich wieder melden

Vielen Dank nochmals und schöne Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:42 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