Einstieg in VectorDrawing

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Einstieg in VectorDrawing

Beitrag von jacdelad »

Hallo,
ich benötige mal einen kurzen Schubs. Ich habe eine Canvas mit variabler Größe, auf der ich ein paar Rechtecke zeichne. Jene Rechtecke sind unterschiedlich groß, z.B. mal 100*100 Pixel und mal 20*40 Pixel (...und bis zu 10000); das Bild wird dabei immer so gezoomt, dass die Canvas vollständig ausgefüllt wird. Ich hab jetzt eine relativ komplizierte Funktion geschrieben, die die Maximalausdehnung berechnet und dann entsprechend alle Koordinaten verkleinert/vergrößert, damit die Rechtecke immer ins Bild passen. Die ist recht zeitaufwändig. Jetzt bin ich auf die Vector-Bibliothek gestoßen und die müsste das Ganze eigentlich sehr vereinfachen. Leider komme ich mit den Umwandlungen nicht ganz klar. Kann mir bitte jemand mal ein minimales Beispiel geben bei dem ein beliebiges Rechteck auf die Größe der Canvas skaliert wird? Daraus kann ich dann sicher den Rest selbst erarbeiten. Danke im Voraus.

2. Frage: So wie ich gesehen habe werden die Objekte erst angelegt und dann in einem Rutsch gezeichnet. Und irgendwie kann ich die Objekte auch erhalten, damit ich sie nachher erneut zeichnen kann, ohne dass ich alles neu anlegen muss. Von Zeit zu Zeit muss eins der Rechtecke statt schwarz in rot gezeichnet werden; dazu kann ich es einfach als letztes Objekt noch einmal anhängen (das Rechteck muss immer komplett zu sehen sein). Kann ich den Rest (also die normalen Rechtecke ohne das rote) vorher kopieren, damit ich es beim nächsten Mal wieder zur Hand habe?
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Einstieg in VectorDrawing

Beitrag von STARGÅTE »

Hm, wenn ein beliebiges Rechteck immer auf die Größe des Canvas gezerrt wird, dann wird doch immer einfach das ganze Canvas gefüllt oder?
Was soll das berechnet werden?
In VectorDrawing kannst du ScaleCoordinates() nutzen und dabei einfach für X und Y folgende Berechnung nutzen: X = CanvasWidth/RechteckWidth, selbes für Y mit Height.

Zum zweiten Punkt: Was meinst du mit Objekte? Es gibt keine Objekte in VectorDrawing. Was du vielleicht meinst sind Pfade. Hier kannst du in der Tat mehrere Rechtecke gleichzeitig anlegen und mit einem Rutsch zeichnen, dann aber mit genau der selben Farbe, Linienstärke und Füllung usw.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Einstieg in VectorDrawing

Beitrag von jacdelad »

Ja, ich meinte Pfade. Und das rdbzeck soll nicht ferzerrt, nur skaliert werden.
Mit Canvaswidth/RechteckWidth arbeite ich schon im 2DDrawing-Modus, ich hatte das so verstanden, dass ich die Pfade anlegen und das Ergebnis dann beliebig skalieren kann.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten