Einzelnen Beitrag anzeigen

Benutzerbild von Boyington
Boyington

Registriert seit: 12. Apr 2012
43 Beiträge
 
#6

AW: wie kann ich bestimmte Infos aus Textdokument einlesen?

  Alt 24. Mai 2012, 07:31
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.

Morgen Alle,
alles klar, danke für die hilfreiche Antwort

l.g
Lee
Do the best job, leave the rest in the hands of God!
  Mit Zitat antworten Zitat