Ja sicher. Stimmt, sind auch ziemlich genau 2000 Zeilen.
Ärgert mich aber trotzdem. Die Struktur haben die FreePascal Autoren ja wirklich sehr schön herausgearbeitet. Läuft auch (wesentlich) stabiler als zum Beispiel der Parser von John Biddiscombe (DXF_read und Co). Bis dato hatte ich auch noch keine
Exception beim Einlesen. Der Rest ist wohl noch etwas Fleißarbeit. Ist ja irgendwie immer nur das Gleiche.
Beispiel ReadEntities_LINE:
Delphi-Quellcode:
procedure TDxfParser.ReadEntities_LINE(ATokens: TObjectList; const Base: TFloatPointD2);
var
Current: TDxfToken;
I: integer;
X1, Y1, X2, Y2, Value: double;
Color: TColor;
begin
X1 := 0;
Y1 := 0;
X2 := 0;
Y2 := 0;
Color := clBlack;
for I := 0 to ATokens.Count - 1 do
begin
Current := TDxfToken(ATokens[I]);
if Current.Group in [10, 20, 11, 21, 62] then
begin
Value := StrToFloat(Trim(Current.Name));
case Current.Group of
10: X1 := Base.X + Value;
20: Y1 := Base.Y + Value;
11: X2 := Base.X + Value;
21: Y2 := Base.Y + Value;
62: Color := FAutoCadColorPalette[Round(Value)];
end;
end;
end;
FItem.Clear;
FItem.Typ := dxfLINE;
FItem.BlockName := FBlockName;
FItem.Pen.Color := Color;
FItem.Points.Add(FloatPointD2(X1, Y1));
FItem.Points.Add(FloatPointD2(X2, Y2));
// ShowMessage(Format('%s %f %f %f %f', [FBlockName, X1, Y1, X2, Y2]));
if Assigned(FOnGetDxfItem) then
FOnGetDxfItem(FItem);
end;