diff --git a/applications/fpvviewer/dxftokentotree.pas b/applications/fpvviewer/dxftokentotree.pas
index 6b970780c..f39a99076 100644
--- a/applications/fpvviewer/dxftokentotree.pas
+++ b/applications/fpvviewer/dxftokentotree.pas
@@ -29,12 +29,17 @@ var
begin
if ATokens = nil then Exit;
- for i := 0 to ATokens.Count - 1 do
- begin
- AToken := TDXFToken(ATokens.Items[i]);
- NodeStr := Format('(%d %s)', [AToken.GroupCode, AToken.StrValue]);
- NewNode := ATreeNodes.AddChild(ABaseNode, NodeStr);
- ConvertDXFTokensToTreeNodes(AToken.Childs, NewNode.TreeNodes, NewNode);
+ ATreeNodes.BeginUpdate(); // Greatly speeds up the operation
+ try
+ for i := 0 to ATokens.Count - 1 do
+ begin
+ AToken := TDXFToken(ATokens.Items[i]);
+ NodeStr := Format('(%d %s)', [AToken.GroupCode, AToken.StrValue]);
+ NewNode := ATreeNodes.AddChild(ABaseNode, NodeStr);
+ ConvertDXFTokensToTreeNodes(AToken.Childs, NewNode.TreeNodes, NewNode);
+ end;
+ finally
+ ATreeNodes.EndUpdate();
end;
end;
diff --git a/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas b/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas
index feaa024f9..96d581490 100644
--- a/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas
+++ b/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas
@@ -67,8 +67,12 @@ type
TvDXFVectorialReader = class(TvCustomVectorialReader)
private
FPointSeparator: TFormatSettings;
+ // HEADER data
+ ANGBASE: Double;
+ ANGDIR: Integer;
//
function SeparateString(AString: string; ASeparator: Char): T10Strings;
+ procedure ReadHEADER(ATokens: TDXFTokens; AData: TvVectorialDocument);
procedure ReadENTITIES(ATokens: TDXFTokens; AData: TvVectorialDocument);
procedure ReadENTITIES_LINE(ATokens: TDXFTokens; AData: TvVectorialDocument);
procedure ReadENTITIES_ARC(ATokens: TDXFTokens; AData: TvVectorialDocument);
@@ -91,6 +95,12 @@ implementation
{$endif}
const
+ DXF_AUTOCAD_2000_R10 = 'AC1006';
+ DXF_AUTOCAD_2000_R11 = 'AC1009';
+ DXF_AUTOCAD_2000_R11_and_R12 = 'AC1009';
+// DXF_AUTOCAD_2000_R11 = 'AC1009';
+// = R10, AC1009 = R11 and R12, AC1012 = R13, AC1014 = R14
+
// Group Codes for ENTITIES
DXF_ENTITIES_TYPE = 0;
DXF_ENTITIES_HANDLE = 5;
@@ -310,6 +320,33 @@ begin
end;
end;
+procedure TvDXFVectorialReader.ReadHEADER(ATokens: TDXFTokens;
+ AData: TvVectorialDocument);
+var
+ i: Integer;
+ CurToken: TDXFToken;
+begin
+ i := 0;
+ while i < ATokens.Count do
+ begin
+ CurToken := TDXFToken(ATokens.Items[i]);
+ if CurToken.StrValue = '$ANGBASE' then
+ begin
+ CurToken := TDXFToken(ATokens.Items[i+1]);
+ ANGBASE := StrToFloat(CurToken.StrValue, FPointSeparator);
+ Inc(i);
+ end
+ else if CurToken.StrValue = '$ANGDIR' then
+ begin
+ CurToken := TDXFToken(ATokens.Items[i+1]);
+ ANGDIR := StrToInt(CurToken.StrValue);
+ Inc(i);
+ end;
+
+ Inc(i);
+ end;
+end;
+
procedure TvDXFVectorialReader.ReadENTITIES(ATokens: TDXFTokens; AData: TvVectorialDocument);
var
i: Integer;
@@ -591,6 +628,10 @@ begin
FPointSeparator.DecimalSeparator := '.';
FPointSeparator.ThousandSeparator := '#';// disable the thousand separator
+ // Default HEADER data
+ ANGBASE := 0.0; // Starts pointing to the right / east
+ ANGDIR := 0; // counter-clock wise
+
Tokenizer := TDXFTokenizer.Create;
end;
@@ -618,7 +659,9 @@ begin
CurToken := TDXFToken(Tokenizer.Tokens.Items[i]);
CurTokenFirstChild := TDXFToken(CurToken.Childs.Items[0]);
- if CurTokenFirstChild.StrValue = 'ENTITIES' then
+ if CurTokenFirstChild.StrValue = 'HEADER' then
+ ReadHEADER(CurToken.Childs, AData)
+ else if CurTokenFirstChild.StrValue = 'ENTITIES' then
ReadENTITIES(CurToken.Childs, AData);
end;
end;
diff --git a/applications/fpvviewer/fpvv_mainform.lfm b/applications/fpvviewer/fpvv_mainform.lfm
index 39011105e..0d7002dc9 100644
--- a/applications/fpvviewer/fpvv_mainform.lfm
+++ b/applications/fpvviewer/fpvv_mainform.lfm
@@ -1,15 +1,15 @@
object frmFPVViewer: TfrmFPVViewer
Left = 186
- Height = 441
+ Height = 473
Top = 137
- Width = 336
+ Width = 375
Caption = 'Free Pascal Vectorial Viewer'
- ClientHeight = 441
- ClientWidth = 336
+ ClientHeight = 473
+ ClientWidth = 375
LCLVersion = '0.9.31'
object editFileName: TFileNameEdit
Left = 8
- Height = 22
+ Height = 23
Top = 8
Width = 304
DialogOptions = []
@@ -31,7 +31,7 @@ object frmFPVViewer: TfrmFPVViewer
end
object spinScale: TFloatSpinEdit
Left = 72
- Height = 16
+ Height = 23
Top = 72
Width = 64
Increment = 1
@@ -42,39 +42,39 @@ object frmFPVViewer: TfrmFPVViewer
end
object Label1: TLabel
Left = 8
- Height = 17
+ Height = 16
Top = 79
- Width = 56
+ Width = 47
Caption = 'Scale by:'
ParentColor = False
end
object Label2: TLabel
Left = 8
- Height = 17
+ Height = 16
Top = 104
- Width = 73
+ Width = 60
Caption = 'Start Pos X:'
ParentColor = False
end
object spinStartX: TSpinEdit
Left = 98
- Height = 16
+ Height = 23
Top = 99
Width = 46
TabOrder = 3
end
object spinStartY: TSpinEdit
Left = 240
- Height = 16
+ Height = 23
Top = 99
Width = 50
TabOrder = 4
end
object Label3: TLabel
Left = 152
- Height = 17
+ Height = 16
Top = 104
- Width = 72
+ Width = 60
Caption = 'Start Pos Y:'
ParentColor = False
end
@@ -88,26 +88,40 @@ object frmFPVViewer: TfrmFPVViewer
TabOrder = 5
end
object notebook: TNotebook
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ AnchorSideBottom.Control = Owner
+ AnchorSideBottom.Side = asrBottom
Left = 0
- Height = 313
+ Height = 340
Top = 128
- Width = 336
+ Width = 370
PageIndex = 0
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ BorderSpacing.Right = 5
+ BorderSpacing.Bottom = 5
TabOrder = 6
TabStop = True
object Page1: TPage
- ClientWidth = 336
- ClientHeight = 313
+ ClientWidth = 370
+ ClientHeight = 340
object imageView: TImage
+ AnchorSideRight.Control = Page1
+ AnchorSideRight.Side = asrBottom
+ AnchorSideBottom.Control = Page1
+ AnchorSideBottom.Side = asrBottom
Left = 8
- Height = 296
+ Height = 327
Top = 8
- Width = 325
+ Width = 357
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ BorderSpacing.Right = 5
+ BorderSpacing.Bottom = 5
end
end
object Page2: TPage
- ClientWidth = 672
- ClientHeight = 626
+ ClientWidth = 1344
+ ClientHeight = 1252
object DXFTreeView: TTreeView
Left = 8
Height = 313
diff --git a/applications/fpvviewer/fpvviewer.lpi b/applications/fpvviewer/fpvviewer.lpi
index bebd54f6d..7ffae7696 100644
--- a/applications/fpvviewer/fpvviewer.lpi
+++ b/applications/fpvviewer/fpvviewer.lpi
@@ -15,7 +15,7 @@
-
+
@@ -54,7 +54,7 @@
-
+