Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GLScene Export (https://www.delphipraxis.net/172694-glscene-export.html)

janiz 17. Jan 2013 15:36

GLScene Export
 
Hallo Forumsteilnehmer,

ich habe ein Problem, für welches ich einfach keine Loesung finde.

Meine Applikation enthält einen GLScene mit mehrenen Freeforms. Diese werden bei Bedarf mit STL Dateien bestückt (geladen).
Der Benutzer kann nun die Formen mit der Maus bezüglich ihrer Rotation und ihrer Position manipulieren.
Nun soll es moeglich sein die so positionierten Freeforms in eine Datei zu exportieren.
Ich weiss, dass ich einzelne Freeforms beispielsweise mittels Freeform.Savetofile('xxx.stl') wiederum speichern kann.
Dies soll aber nicht das Ziel sein. Ziel soll es sein, eine Datei zu erzeugen (z.B. STL oder ähnliches) welches die Formen selbst und deren
Positionierung enthält. Also eine Art "merge" der Formen, ohne dass die Information über deren relative Position und Drehung verloren geht.
Ich habe hier: http://glscene.general.free-usenet.e...e_T25486686_S1
Einen Link gefunden, welcher offenbar genau meine Problematik beschreibt. Ein Versuch die dort beschriebene Loesung zu verwenden, fuehrt zwar zu einer Datei, aber diese kann ich nicht oeffen (z.B. mit Meshlab).

Vielleicht gibt es auch einen ganz anderen Ansatz, den ich nicht kenne.

Lieben Dank im Voraus für Ideen.
Ich hoffe das Thema passt überhaupt hier herein.

PS: meine "oe" Taste an der Tastatur funktioniert gerade nicht, daher immer mit "oe".

Unx 17. Jan 2013 16:19

AW: GLScene Export
 
Schau dir mal die STL Datei mit einem Editor an (falls ASCII Datei)
STL ist ein simples Format http://en.wikipedia.org/wiki/STL_(file_format)
evtl. findest ja den Fehler.

janiz 17. Jan 2013 16:22

AW: GLScene Export
 
Hallo,

danke, das habe ich bereits gemacht (hätte ich auch erwähnen können).
Nun, die Datei ist im Binärformat und sieht (ich bin aber kein Experte) eigentlich ok aus (Hexeditor).

Danke und Grüße

janiz 30. Jan 2013 19:11

AW: GLScene Export
 
Ich freue mich sehr darüber, dass ich eine Lösung gefunden habe.

Im prinzip hatte der Beitrag im Link der Frage recht.
Es waren nur noch wenige Modifikationen notwendig.
Insbesondere beim Header (Anzahl der Dreiecke für die binäre Datei).
Hier der Code, falls mal jemand ein ähnliches Problem zu lösen hat.

Code:
var j : integer;
   i : Integer;
   header : TSTLHeader;
   dataFace : TSTLFace;
   list : TAffineVectorList;
   

const
   cHeaderTag = 'GLScene STL export';
begin

FillChar(header.dummy[0], SizeOf(header.dummy), 0);
Move(cHeaderTag, header.dummy[0], Length(cHeaderTag));
//calculate header count
 for j := 0 to objects.Count - 1 do
 begin
      list:=TGLFREeform(objects[j]).MeshObjects.ExtractTriangles;
      header.nbFaces:= header.nbFaces + list.Count div 3;
 end;

       aStream.Write(header, SizeOf(header));

 for j := 0 to objects.Count - 1 do
 begin
      list:=TGLFREeform(objects[j]).MeshObjects.ExtractTriangles;


   try

      i:=0; while i<list.Count do begin
         dataFace.normal:=CalcPlaneNormal(list[i], list[i+1], list[i+2]);

        dataFace.v1:=VectorTransform(list[i],TGLFREeform(objects[j]).AbsoluteMatrix);
        dataFace.v2:=VectorTransform(list[i+1],TGLFREeform(objects[j]).AbsoluteMatrix);
        dataFace.v3:=VectorTransform(list[i+2],TGLFREeform(objects[j]).AbsoluteMatrix);

         aStream.Write(dataFace, SizeOf(dataFace));
         Inc(i, 3);

      end;

   finally
      list.Free;
   end;

 end;
Danke an alle die diesen Beitrag gelesen haben und ihn vielleicht interessant finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 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