You've already forked lazarus-ccr
Fixes the dxftokentotree.pas performance and makes the dxf reader more powerful
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1472 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -29,12 +29,17 @@ var
|
|||||||
begin
|
begin
|
||||||
if ATokens = nil then Exit;
|
if ATokens = nil then Exit;
|
||||||
|
|
||||||
for i := 0 to ATokens.Count - 1 do
|
ATreeNodes.BeginUpdate(); // Greatly speeds up the operation
|
||||||
begin
|
try
|
||||||
AToken := TDXFToken(ATokens.Items[i]);
|
for i := 0 to ATokens.Count - 1 do
|
||||||
NodeStr := Format('(%d %s)', [AToken.GroupCode, AToken.StrValue]);
|
begin
|
||||||
NewNode := ATreeNodes.AddChild(ABaseNode, NodeStr);
|
AToken := TDXFToken(ATokens.Items[i]);
|
||||||
ConvertDXFTokensToTreeNodes(AToken.Childs, NewNode.TreeNodes, NewNode);
|
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;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@@ -67,8 +67,12 @@ type
|
|||||||
TvDXFVectorialReader = class(TvCustomVectorialReader)
|
TvDXFVectorialReader = class(TvCustomVectorialReader)
|
||||||
private
|
private
|
||||||
FPointSeparator: TFormatSettings;
|
FPointSeparator: TFormatSettings;
|
||||||
|
// HEADER data
|
||||||
|
ANGBASE: Double;
|
||||||
|
ANGDIR: Integer;
|
||||||
//
|
//
|
||||||
function SeparateString(AString: string; ASeparator: Char): T10Strings;
|
function SeparateString(AString: string; ASeparator: Char): T10Strings;
|
||||||
|
procedure ReadHEADER(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
||||||
procedure ReadENTITIES(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
procedure ReadENTITIES(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
||||||
procedure ReadENTITIES_LINE(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
procedure ReadENTITIES_LINE(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
||||||
procedure ReadENTITIES_ARC(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
procedure ReadENTITIES_ARC(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
||||||
@@ -91,6 +95,12 @@ implementation
|
|||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
const
|
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
|
// Group Codes for ENTITIES
|
||||||
DXF_ENTITIES_TYPE = 0;
|
DXF_ENTITIES_TYPE = 0;
|
||||||
DXF_ENTITIES_HANDLE = 5;
|
DXF_ENTITIES_HANDLE = 5;
|
||||||
@@ -310,6 +320,33 @@ begin
|
|||||||
end;
|
end;
|
||||||
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);
|
procedure TvDXFVectorialReader.ReadENTITIES(ATokens: TDXFTokens; AData: TvVectorialDocument);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@@ -591,6 +628,10 @@ begin
|
|||||||
FPointSeparator.DecimalSeparator := '.';
|
FPointSeparator.DecimalSeparator := '.';
|
||||||
FPointSeparator.ThousandSeparator := '#';// disable the thousand separator
|
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;
|
Tokenizer := TDXFTokenizer.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -618,7 +659,9 @@ begin
|
|||||||
CurToken := TDXFToken(Tokenizer.Tokens.Items[i]);
|
CurToken := TDXFToken(Tokenizer.Tokens.Items[i]);
|
||||||
CurTokenFirstChild := TDXFToken(CurToken.Childs.Items[0]);
|
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);
|
ReadENTITIES(CurToken.Childs, AData);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
object frmFPVViewer: TfrmFPVViewer
|
object frmFPVViewer: TfrmFPVViewer
|
||||||
Left = 186
|
Left = 186
|
||||||
Height = 441
|
Height = 473
|
||||||
Top = 137
|
Top = 137
|
||||||
Width = 336
|
Width = 375
|
||||||
Caption = 'Free Pascal Vectorial Viewer'
|
Caption = 'Free Pascal Vectorial Viewer'
|
||||||
ClientHeight = 441
|
ClientHeight = 473
|
||||||
ClientWidth = 336
|
ClientWidth = 375
|
||||||
LCLVersion = '0.9.31'
|
LCLVersion = '0.9.31'
|
||||||
object editFileName: TFileNameEdit
|
object editFileName: TFileNameEdit
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 22
|
Height = 23
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 304
|
Width = 304
|
||||||
DialogOptions = []
|
DialogOptions = []
|
||||||
@@ -31,7 +31,7 @@ object frmFPVViewer: TfrmFPVViewer
|
|||||||
end
|
end
|
||||||
object spinScale: TFloatSpinEdit
|
object spinScale: TFloatSpinEdit
|
||||||
Left = 72
|
Left = 72
|
||||||
Height = 16
|
Height = 23
|
||||||
Top = 72
|
Top = 72
|
||||||
Width = 64
|
Width = 64
|
||||||
Increment = 1
|
Increment = 1
|
||||||
@@ -42,39 +42,39 @@ object frmFPVViewer: TfrmFPVViewer
|
|||||||
end
|
end
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 17
|
Height = 16
|
||||||
Top = 79
|
Top = 79
|
||||||
Width = 56
|
Width = 47
|
||||||
Caption = 'Scale by:'
|
Caption = 'Scale by:'
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object Label2: TLabel
|
object Label2: TLabel
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 17
|
Height = 16
|
||||||
Top = 104
|
Top = 104
|
||||||
Width = 73
|
Width = 60
|
||||||
Caption = 'Start Pos X:'
|
Caption = 'Start Pos X:'
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object spinStartX: TSpinEdit
|
object spinStartX: TSpinEdit
|
||||||
Left = 98
|
Left = 98
|
||||||
Height = 16
|
Height = 23
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 46
|
Width = 46
|
||||||
TabOrder = 3
|
TabOrder = 3
|
||||||
end
|
end
|
||||||
object spinStartY: TSpinEdit
|
object spinStartY: TSpinEdit
|
||||||
Left = 240
|
Left = 240
|
||||||
Height = 16
|
Height = 23
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 50
|
Width = 50
|
||||||
TabOrder = 4
|
TabOrder = 4
|
||||||
end
|
end
|
||||||
object Label3: TLabel
|
object Label3: TLabel
|
||||||
Left = 152
|
Left = 152
|
||||||
Height = 17
|
Height = 16
|
||||||
Top = 104
|
Top = 104
|
||||||
Width = 72
|
Width = 60
|
||||||
Caption = 'Start Pos Y:'
|
Caption = 'Start Pos Y:'
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
@@ -88,26 +88,40 @@ object frmFPVViewer: TfrmFPVViewer
|
|||||||
TabOrder = 5
|
TabOrder = 5
|
||||||
end
|
end
|
||||||
object notebook: TNotebook
|
object notebook: TNotebook
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = Owner
|
||||||
|
AnchorSideBottom.Side = asrBottom
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 313
|
Height = 340
|
||||||
Top = 128
|
Top = 128
|
||||||
Width = 336
|
Width = 370
|
||||||
PageIndex = 0
|
PageIndex = 0
|
||||||
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
|
BorderSpacing.Right = 5
|
||||||
|
BorderSpacing.Bottom = 5
|
||||||
TabOrder = 6
|
TabOrder = 6
|
||||||
TabStop = True
|
TabStop = True
|
||||||
object Page1: TPage
|
object Page1: TPage
|
||||||
ClientWidth = 336
|
ClientWidth = 370
|
||||||
ClientHeight = 313
|
ClientHeight = 340
|
||||||
object imageView: TImage
|
object imageView: TImage
|
||||||
|
AnchorSideRight.Control = Page1
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = Page1
|
||||||
|
AnchorSideBottom.Side = asrBottom
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 296
|
Height = 327
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 325
|
Width = 357
|
||||||
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
|
BorderSpacing.Right = 5
|
||||||
|
BorderSpacing.Bottom = 5
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object Page2: TPage
|
object Page2: TPage
|
||||||
ClientWidth = 672
|
ClientWidth = 1344
|
||||||
ClientHeight = 626
|
ClientHeight = 1252
|
||||||
object DXFTreeView: TTreeView
|
object DXFTreeView: TTreeView
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 313
|
Height = 313
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
<StringTable ProductVersion=""/>
|
<StringTable ProductVersion=""/>
|
||||||
</VersionInfo>
|
</VersionInfo>
|
||||||
<BuildModes Count="1">
|
<BuildModes Count="1">
|
||||||
<Item1 Name="Default" Default="True"/>
|
<Item1 Name="default" Default="True"/>
|
||||||
</BuildModes>
|
</BuildModes>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="9"/>
|
<Version Value="10"/>
|
||||||
<Target>
|
<Target>
|
||||||
<Filename Value="fpvviewer"/>
|
<Filename Value="fpvviewer"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
Reference in New Issue
Block a user