Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 17, 2025 02:26

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Mi Jan 11, 2006 16:40 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
High Coders,

ich bin absoluter Neuling auf diesem Gebiet. Möchte aber gerne ESRI-Shapedateien im Fenster anzeigen lassen. Habe es aber bis dato noch nicht geschafft. Also, im Header der SHP-Datei stehen die Werte für das umgebende Rechteck drin, diese Werte lese ich aus und möchte das OGL-Fenster auf diese Werte einstellen,damit ich die enthaltenen Polygone/Linien/Punkte anzeigen lassen kann. Ich hoffe ich habe mein Problem einigermaßen verständlich dargestellt und Ihr könnt mir weiterhelfen.



Thx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 16:43 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Äh, leider nein.
Du möchtest die Grösse deines Fensters, in dem OpenGL gerendert wird, auf einen Wert setzen der in einer Datei steht?
Was benutzt du überhaupt? VCL oder SDL?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 17:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
...oder WinAPI oder Glut?

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 19:07 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
also meine ersten Gehversuche habe ich mit der dgl-Headerdatei 1.9 unter D7 gemacht. Letztendlich ist es mir aber egal ob VCL,SDL,Glut, etc., es sollte nur funktionieren.
Nun zu weiteren Erklärungen:
Ich stelle mir unter OGL ein GIS System in weitestem Sinne vor, d. h. dass die SHP-Dateien Gauss-Krüger-Koordinaten enthalten. Diese möchte ich nun in ein OGL-Fenster anzeigen lassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 20:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
KG-Koordinaten sagen mir jetzt nichts. Wenn die allerdings in die 2D Ebene Projeziert sind, dann kannst du leicht per glOrtho die Auflösung auf den Wert in der Datei einstellen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 22:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wobei du dann aber auf jeden Fall das Seitenverhältnis aus der Datei beachten solltest sonst siehts doof aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 23:03 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
Ich finde Eure Anregungen gut, aber mich bringt es nicht weiter.
1. Von glOrtho habe ich schon gehört und auch schon damit herumgespielt, aber noch keine nenneswerten Ergebnisse erzielt.
2. und wie stelle ich das Seitenverhältnis ein.

Vielleicht könnt Ihr mir mit bißchen Code unter die Arme greifen. :wink: :oops: :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 11, 2006 23:28 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei glOrtho gibst du Parameter für die kleinsten und größten sichtbaren X bzw. Y werte ein. Wenn du die von 0 bis BreiteAusDatei-1, und von 0 bis HöheAusDatei-1 laufen lässt, hast du einen beliebig großen Kontext, welcher die richtigen Verhältnisse wiederspiegelt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 08:38 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
Danke für die Tips.
Ich werde mich erst einmal daran machen Eure Vorschläge zu programmieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 09:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Flash: Das ist so nicht richtig. Zu mindest nicht zum Seitengetreuen darstellen. Somit erreichst du lediglich, dass der Inhalt sich komplett über das Fenster erstreckt was je nach Fenstergröße ziemlich verschoben aussehen dürfte. Das Prinzip bleibt aber mehr oder weniger das gleich. Du musst mit glOrtho eine entsprechende Auflösung einstellen, damit deine Daten richtig angezeigt werden. Das hört sich komplizierter an als es ist. Ich denke mal das Beste wäre ein Beispiel.

Sagen mir mal deine Daten erstrecken sich in einem Bereich von Breite 9° - 11° und höhe 50° - 53°. Also irgend etwas in dem Gebiet müsste Deutschland sein. Dann hast du ein Seitenverhältniss von 1,5:1. Wenn du jetzt ein Fenster mit 640x480 hast, dann hast du ein Seitenverhältnis von 1:1,3. (Die Verhältnisse sind bewusst so doof geschrieben.) Wenn du das jetzt so ohne weiteres in glOrtho setzt zerrst du deutschland auseinander.

Aus dem Grund kannst du nicht einfach 9, 11, 53 und 50 bei glOrtho setzen sondern musst berechnen wie groß es sein müsste. Ich denke mal du wolltest alles sehen. Also muss der glOrtho wesentlich breiter werden. Die Höhe kann an der Stelle so bleiben. Alles kann man mit dem Dreisatz ausrechen. Mit dem Seitenverhältniss rechnen wir erst einmal aus wie breit (Pixel) die eigentlichen Daten wären. (Maßangaben nur zur Verdeutlichung.) 480 Pixel * 2° / 3° = 320 Pixel. 320 Pixel breit sind unsere Daten bei einer Höhe von 480 Pixel. 640 Pixel * 2° / 320 Pixel = 4°. Somit müssen wir Horizontal eine Größe von 4° setzen damit die Daten sinnvoll dargestellt werden.

Um das ganze dann zu zentrieren bräuchtest du nur die die Hälte der Differenz zwischen den Breiten vom anfang abziehen. Also (4° - 2°) / 2 = 1°. Damit würden wir glOrtho also folgendermaßen aufrufen.
Code:
  1. glOrtho(8, 12, 53, 50, -1, 1);


Wenn du das ganze jetzt noch dynamisch in deinem Programm ausrechnest ist alles perfekt. Aber beachte, dass Deutschland auch hätte Horizontal liegen können. Also wesentlich Breiter als Höher wäre. Oder du das Seitenverhältniss deines Fensters verändern könntest. Du musst dann vor der Berechnung abprüfen welche Seite du überhaupt ausrechnen musst. Aber wenn du das einmal verstanden hast lässt sich das Prinzip auf alles anwenden was irgendwo ein Seiteverhältniss hat. Wenn die Gradzahlen zu verwirrend sind kannst du es auch als Pixel ansehen oder wie auch immer.

Das Einzige was du dann noch machen musst ist deine Datei einlesen, die Punkte in einer internen Struktur ablegen und diese dann zeichnen. Durch die Anpassung der Darstellung (glOrtho) an die Gradzahlen musst du dir nicht mal die Mühe machen diese irgendwie umzuformen oder so. Das sollte dann alles 1A funktionieren. Aber Hilfe beim Einlesen können wir dir nur geben, wenn du mal ein kleines Extract der Datei postest. Sonst können wir nur raten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 11:03 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
Hallo,

Lossy eX: also das Shape-Dateiformat ist von der Firma ESRI enwickelt http://www.esri.com/library/whitepapers ... pefile.pdf
es ist das Standard Import/Export-Format bei GIS Programmen. Ich möchte nun die Daten, wie oben beschrieben in OGL einfügen. Beispiel: umfassendes Rechteck = 3514200,5880600 | 3514700,5881000 und dahinein sollen nun 2d+3d Punkte,Linien,Texte,Polygone,Bilder gezeichnet werden. Ein Beispiel eines solchen Programmes kann man unter http://qgis.org sehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 12:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also so gesehen sollte das echt simpel sein das einzulesen. Du benutz dazu wohl am besten einen TFileStream und ließt dann in die entsprechenden Bereiche deine Werte.

Also einen Double würdest du wie folgt auslesen können.
Code:
  1. var
  2.   FS: TFileStream;
  3.   Doub: Double;
  4. begin
  5.   FS := TFileStream.Create(File, fmOpenRead);
  6.   try
  7.     FS.Read(Doub, SizeOf(Doub)); // Oder Read(Doub, 8 ); da ein double 8 Bytes groß ist.
  8.   finally
  9.     FS.Free;
  10.   end;
  11. end;


Es bestände auch die Möglichkeit, dass du gleich komplette Record auslesen kannst.
Code:
  1. type
  2.   TRecordName = record packed
  3.      Value1: Double;
  4.      Value2: Double;
  5.   end;
  6.  
  7. var
  8.   FS: TFileStream;
  9.   Rec: TRecordName;
  10. begin
  11.   FS := TFileStream.Create(File, fmOpenRead);
  12.   try
  13.     FS.Read(Rec, SizeOf(Rec));
  14.   finally
  15.     FS.Free;
  16.   end;
  17. end;

Vom Prinzip her genau so. Aber achte darauf, dass die Records dann packed sind damit fügt delphi keine Spacerbytes mehr ein. Was durchaus passieren kann. Und was dein lesen dann empfindlich stören würde.

Was mich aber ein wenig iritiert ist die Tatsache, dass in den Datein wohl Little Indian und Big Indian formate gemischt sind. Also dass das erste Byte manchmal zu erst und machmal zu letzt geschrieben wurden. Das würde bedeuten, dass du bei deinen gelesenen Werten die Bytes vertauschen musst. Ich habe da eben mal was vorbereitet. Ich weiß allerding nicht genau ob du Little oder Big Indian umdrehen musst. Zu gebrauchen ist es genau wie das Read.
Code:
  1. procedure SwapMemBuffer(var Buff; Size: Integer);
  2. var
  3.   Idx: Integer;
  4.   Temp: Byte;
  5. begin
  6.   for Idx := 0 to (Size div 2) -1 do begin
  7.     Temp := TByteArray(Buff)[Idx];
  8.     TByteArray(Buff)[Idx] := TByteArray(Buff)[Size - Idx - 1];
  9.     TByteArray(Buff)[Size - Idx -1] := Temp;
  10.   end;
  11. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 13:03 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
Also es liegt nur ein Format vor, je nach System mit Motorola,AMD oder Intel-CPU.

Die Übernahme der Geometry-Daten stellt für mich keine Problem dar. Nur die Ausgabe in einem OGL-Fenster macht mir einiges an Kopfzerbrechen, denn ich weiß bis jetzt immer noch nicht wie ich das in OGL Realisieren kann. Dein Ansatz mit glOrtho war schon eine Hilfe aber muß ich ein Viewport erzeugen oder welchen MatrixMode setze ich ein, oder muß ich es un/projected setzen. Oder wie kann ich das Seitenverhältnis einstellen.

Für weitere Hilfe wäre ich dankbar. :? :oops: :?: :?: :?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also dazu kann ich dich nur Wärmstens an unsere Tutorial Ecke verweisen. In der findest du Tutorials wie den Quickstart oder das 2D Tutorial. Das wird dir jetzt keiner schreiben, denn sonst könnten wir das auch eben selber schreiben.

Seitenverhältniss: Habe ich doch oben geschrieben was du mit glOrtho machen musst. Wenn du noch fragen dazu hast dann frag. Aber bitte stelle diese konkret.

Datenformat: Kann ich nicht beurteilen aber in der, von dir geposteten, Spec existierte beim Header eine Spalte "Byte Order" in der Stand bei einigen Little und bei einigen Big. Ich denke mal es hat schon einen Grund warum die so eine Angabe machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 14:00 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 16:29
Beiträge: 7
Sorry, wenn ich mich vielleicht schlecht ausgedrückt habe, brauchst mich aber nicht gleich hau'n.


Ich poste hier einmal meinen Source-Code:

Code:
  1.  
  2.   glMatrixMode(GL_MODELVIEW);
  3.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  4.   glLoadIdentity;
  5.   glViewport(0,0,ClientWidth,ClientHeight);
  6.   glOrtho(3514470.0,5880950.0,3514480.0,5881000.0,0,128);
  7.   glTranslatef(3514470,5880950,0);
  8.   glColor3f(0,0,1);
  9.  
  10.   //Dieses Polygon wird aus der Shape-Datei entnommen.
  11.  
  12.   glBegin(GL_POLYGON);
  13.     glVertex2f(3514478.6202000002,5880976.9583);
  14.     glVertex2f(3514478.6202000002,5880977.0626);
  15.     glVertex2f(3514478.6331,5880977.1278);
  16.     glVertex2f(3514478.6590000005,5880977.2321);
  17.     glVertex2f(3514478.6977000004,5880977.2842999995);
  18.     glVertex2f(3514478.7365,5880977.3625);
  19.     glVertex2f(3514478.7882000003,5880977.4147);
  20.     glVertex2f(3514478.8528000005,5880977.4407);
  21.     glVertex2f(3514478.8528000005,5880977.4929);
  22.     glVertex2f(3514478.8915000004,5880977.532);
  23.     glVertex2f(3514478.9045,5880977.571099999);
  24.     glVertex2f(3514478.9561,5880977.5841);
  25.     glVertex2f(3514478.9561,5880977.636299999);
  26.     glVertex2f(3514478.9820000003,5880977.7145);
  27.     glVertex2f(3514479.0466000005,5880977.7406);
  28.     glVertex2f(3514479.0983,5880977.8188);
  29.     glVertex2f(3514479.1241,5880977.8449);
  30.     glVertex2f(3514479.1887000003,5880977.870999999);
  31.     glVertex2f(3514479.2275,5880977.884);
  32.     glVertex2f(3514479.2920000004,5880977.9231);
  33.     glVertex2f(3514479.3566,5880977.936199999);
  34.     glVertex2f(3514479.4212,5880977.936199999);
  35.     glVertex2f(3514479.4988,5880977.9492);
  36.     glVertex2f(3514479.5504,5880977.9492);
  37.     glVertex2f(3514479.615,5880977.9492);
  38.     glVertex2f(3514479.6667000004,5880977.9622);
  39.     glVertex2f(3514479.7184,5880977.9622);
  40.     glVertex2f(3514479.7572000003,5880977.936199999);
  41.     glVertex2f(3514479.8218,5880977.884);
  42.     glVertex2f(3514479.8734000004,5880977.8579);
  43.     glVertex2f(3514479.9122,5880977.8579);
  44.     glVertex2f(3514479.9768000003,5880977.8188);
  45.     glVertex2f(3514480.0026000002,5880977.7797);
  46.     glVertex2f(3514480.0414000005,5880977.7406);
  47.     glVertex2f(3514480.0414000005,5880977.6493);
  48.     glVertex2f(3514480.0414000005,5880977.5972);
  49.     glVertex2f(3514480.0414000005,5880977.518999999);
  50.     glVertex2f(3514480.0285,5880977.4668);
  51.     glVertex2f(3514479.9510000004,5880977.4015999995);
  52.     glVertex2f(3514479.9122,5880977.3103);
  53.     glVertex2f(3514479.7442,5880977.2582);
  54.     glVertex2f(3514479.615,5880977.18);
  55.     glVertex2f(3514479.4729000004,5880977.1016999995);
  56.     glVertex2f(3514479.2920000004,5880976.9843999995);
  57.     glVertex2f(3514479.137,5880976.9062);
  58.     glVertex2f(3514479.0337,5880976.8149);
  59.     glVertex2f(3514478.9174,5880976.7628);
  60.     glVertex2f(3514478.8528000005,5880976.7497);
  61.     glVertex2f(3514478.7882000003,5880976.7497);
  62.     glVertex2f(3514478.7236,5880976.7497);
  63.     glVertex2f(3514478.6590000005,5880976.801899999);
  64.     glVertex2f(3514478.6202000002,5880976.9583);
  65.   glEnd;
  66.   SwapBuffers(myDC);
  67.  


Vielleicht ist anhand des Codes ersichtlich, was ich möchte.

Danke


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]