Thema: NToBE ?

Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: NToBE ?

  Alt 7. Mär 2014, 14:43
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;
  Mit Zitat antworten Zitat