Guten Abend, Leute
Zwei Fragen an dich, Klaus:
1)für SetLength(Dreiecke,Length(Dreiecke)+1), Length(Dreiecke)+1 darf nur zwischen 0...255 sein, wenn ein 3D-Objekt nur aus weniger als 255 Dreiecken besteht, ist es in Ordnung, aber wenn das 3D-Objekt aus 10000 Dreiecken besteht, wie mache ich mit dieser Funktion Dreiecke[256], Dreiecke[257]....bis Dreiecke[10000]?
2)wie kann man nach dem Einlesen der *.stl Datei und nach dem Schreiben aller Koordinaten in Variable "Dreiecke"(array of TDreieck) alle dort gespeicherte Koordinaten wieder in Clipboard kopieren? Damit kann ich die original Koordinaten mit allen in Variable "Dreiecke" gespeicherten Koordinaten mal vergleichen und überprüfen, ob es richtig ist.
Danke für die Antwort im Voraus!
l.g
Lee
@Lee:
Zu (1) :
Wie kommst du auf die Beschränkung bei SetLength?
Ein dynamisches Array kannst du High(integer) lang machen.
Somit dürfte die einzige Beschränkung der verfügbare Speicherplatz sein.
Zu (2) :
So :
Delphi-Quellcode:
PROCEDURE CopyDreiecke(tofile:boolean);
var list:TStrings;
FUNCTION ToStr(v:real):
String;
begin
result:=FloatToStrF(v,ffExponent,7,3)+'
';
if result[1]<>'
-'
then result:='
'+result;
end;
PROCEDURE AddVector(
const v:TVektor);
type TxVector=Array[0..2]
of real;
var s,s1:
string; i:integer;
begin
for i:=0
to High(TxVector)
do s:=s+ToStr(TxVector(v)[i]);
list.Add(s);
end;
var i,j:integer;
begin
list:=TStringList.Create;
try
try
if Length(Dreiecke)=0
then
raise Exception.Create('
Dreiecke ist leer.');
for i:=0
to High(Dreiecke)
do
with Dreiecke[i]
do begin
AddVector(n);
for j:=Low(p)
to High(p)
do AddVector(p[j]);
list.Add('
');
end;
if tofile
then list.SaveToFile(ExtractFilePath(ParamStr(0))+'
Log.txt')
else Clipboard.AsText:=List.Text;
ShowMessage('
fertig.');
except
On E:
Exception do ShowMessage(E.
Message);
end;
finally
list.free;
end;
end;
Mit CopyDreiecke(false) stellst du die Daten ins Clipboard, mit CopyDreiecke(true) in die Datei "Log.txt" im Programmverzeichnis.