![]() |
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: ![]() 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". |
AW: GLScene Export
Schau dir mal die STL Datei mit einem Editor an (falls ASCII Datei)
STL ist ein simples Format ![]() evtl. findest ja den Fehler. |
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 |
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:
Danke an alle die diesen Beitrag gelesen haben und ihn vielleicht interessant finden.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz