23
TDrawPosCopys = class;
25
TDrawNode = class(TTreeNode<TDrawNode, TDrawNode>)
28
_RelaArea: TSingleArea2D;
29
function GetRelaArea: TSingleArea2D; virtual;
30
procedure SetRelaArea(const RelaArea_: TSingleArea2D); virtual;
31
function GetRelaPose: TMatrix; virtual; abstract;
32
procedure SetRelaPose(const RelaPose_: TMatrix); virtual; abstract;
33
function GetAbsoPose: TMatrix; virtual;
34
procedure SetAbsoPose(const AbsoPose_: TMatrix); virtual;
35
function GetRelaPosi: TSingle2D; virtual;
36
procedure SetRelaPosi(const RelaPosi_: TSingle2D); virtual;
37
function GetStroke: TStrokeBrush; virtual;
38
procedure SetStroke(const Stroke_: TStrokeBrush); virtual;
39
function GetFiller: TBrush; virtual;
40
procedure SetFiller(const Filler_: TBrush); virtual;
41
procedure DrawBegin(const Canvas_: TCanvas); virtual;
42
procedure DrawMain(const Canvas_: TCanvas); virtual;
43
procedure DrawEnd(const Canvas_: TCanvas); virtual;
45
constructor Create; override;
46
procedure AfterConstruction; override;
47
destructor Destroy; override;
48
property RelaArea: TSingleArea2D read GetRelaArea write SetRelaArea;
49
property Area: TSingleArea2D read GetRelaArea write SetRelaArea;
50
property RelaPose: TMatrix read GetRelaPose write SetRelaPose;
51
property Pose: TMatrix read GetRelaPose write SetRelaPose;
52
property RelaPosi: TSingle2D read GetRelaPosi write SetRelaPosi;
53
property Position: TSingle2D read GetRelaPosi write SetRelaPosi;
54
property AbsoPose: TMatrix read GetAbsoPose write SetAbsoPose;
55
property Stroke: TStrokeBrush read GetStroke write SetStroke;
56
property Filler: TBrush read GetFiller write SetFiller;
57
procedure Draw(const Canvas_: TCanvas); virtual;
60
TDrawRoot = class(TDrawNode)
63
function GetStroke: TStrokeBrush; override;
64
function GetFiller: TBrush; override;
65
function GetRelaPose: TMatrix; override;
66
procedure SetRelaPose(const RelaPose_: TMatrix); override;
67
function GetAbsoPose: TMatrix; override;
68
procedure SetAbsoPose(const AbsoPose_: TMatrix); override;
70
constructor Create; override;
71
procedure AfterConstruction; override;
72
destructor Destroy; override;
73
property RelaPose: TMatrix read GetRelaPose;
74
property Pose: TMatrix read GetRelaPose;
75
property RelaPosi: TSingle2D read GetRelaPosi;
76
property Position: TSingle2D read GetRelaPosi;
77
property AbsoPose: TMatrix read GetAbsoPose;
80
TDrawScene = class(TDrawRoot)
83
_Stroke: TStrokeBrush;
85
_BackColor: TAlphaColor;
86
function GetStroke: TStrokeBrush; override;
87
procedure SetStroke(const Stroke_: TStrokeBrush); override;
88
function GetFiller: TBrush; override;
89
procedure SetFiller(const Filler_: TBrush); override;
90
function GetBackColor: TAlphaColor;
91
procedure SetBackColor(const BackColor_: TAlphaColor);
92
procedure DrawBegin(const Canvas_: TCanvas); override;
93
procedure DrawMain(const Canvas_: TCanvas); override;
95
constructor Create; override;
96
procedure AfterConstruction; override;
97
destructor Destroy; override;
98
property Stroke: TStrokeBrush read GetStroke;
99
property Filler: TBrush read GetFiller;
100
property BackColor: TAlphaColor read GetBackColor write SetBackColor;
103
TDrawKnot = class(TDrawNode)
105
_State: TCanvasSaveState;
108
_Stroke: TStrokeBrush;
110
function GetOpacity: Single; virtual;
111
procedure SetOpacity(const Opacity_: Single); virtual;
112
function GetStroke: TStrokeBrush; override;
113
procedure SetStroke(const Stroke_: TStrokeBrush); override;
114
function GetFiller: TBrush; override;
115
procedure SetFiller(const Filler_: TBrush); override;
116
procedure DrawBegin(const Canvas_: TCanvas); override;
118
constructor Create; override;
119
procedure AfterConstruction; override;
120
destructor Destroy; override;
121
property Opacity: Single read GetOpacity write SetOpacity;
122
procedure Draw(const Canvas_: TCanvas); override;
125
TDrawShape = class(TDrawKnot)
129
function GetRelaPose: TMatrix; override;
130
procedure SetRelaPose(const RelaPose_: TMatrix); override;
132
constructor Create; override;
133
procedure AfterConstruction; override;
134
destructor Destroy; override;
137
TDrawCamera = class(TDrawShape)
141
constructor Create; override;
142
procedure AfterConstruction; override;
143
destructor Destroy; override;
144
procedure Render(const Canvas_: TCanvas);
147
TDrawCopys = class(TDrawShape)
150
_Poses: TArray<TMatrix>;
151
function GetPoses(const I_: Integer): TMatrix;
152
procedure SetPoses(const I_: Integer; const Poses_: TMatrix);
153
function GetPosesN: Integer;
154
procedure SetPosesN(const PosesN_: Integer);
155
procedure DrawMain(const Canvas_: TCanvas); override;
157
constructor Create; override;
158
procedure AfterConstruction; override;
159
destructor Destroy; override;
160
property Poses[const I_: Integer]: TMatrix read GetPoses write SetPoses;
161
property PosesN: Integer read GetPosesN write SetPosesN;
164
TDrawPosCopys = class(TDrawShape)
167
_Poses: TArray<TSingle2D>;
168
function GetPoses(const I_: Integer): TSingle2D;
169
procedure SetPoses(const I_: Integer; const Poses_: TSingle2D);
170
function GetPosesN: Integer;
171
procedure SetPosesN(const PosesN_: Integer);
172
procedure DrawMain(const Canvas_: TCanvas); override;
174
constructor Create; override;
175
procedure AfterConstruction; override;
176
destructor Destroy; override;
177
property Poses[const I_: Integer]: TSingle2D read GetPoses write SetPoses;
178
property PosesN: Integer read GetPosesN write SetPosesN;
186
function TDrawNode.GetRelaArea: TSingleArea2D;
191
procedure TDrawNode.SetRelaArea(const RelaArea_: TSingleArea2D);
193
_RelaArea := RelaArea_;
196
// ------------------------------------------------------------------------------
198
function TDrawNode.GetAbsoPose: TMatrix;
200
Result := Paren.AbsoPose * RelaPose;
203
procedure TDrawNode.SetAbsoPose(const AbsoPose_: TMatrix);
205
RelaPose := Paren.AbsoPose.Inverse * AbsoPose_;
208
// ------------------------------------------------------------------------------
210
function TDrawNode.GetRelaPosi: TSingle2D;
212
Result.X := RelaPose.m31;
213
Result.Y := RelaPose.m32;
216
procedure TDrawNode.SetRelaPosi(const RelaPosi_: TSingle2D);
222
M.m31 := RelaPosi_.X;
223
M.m32 := RelaPosi_.Y;
228
// ------------------------------------------------------------------------------
230
function TDrawNode.GetStroke: TStrokeBrush;
235
procedure TDrawNode.SetStroke(const Stroke_: TStrokeBrush);
240
// ------------------------------------------------------------------------------
242
function TDrawNode.GetFiller: TBrush;
247
procedure TDrawNode.SetFiller(const Filler_: TBrush);
252
procedure TDrawNode.DrawBegin(const Canvas_: TCanvas);
257
procedure TDrawNode.DrawMain(const Canvas_: TCanvas);
262
procedure TDrawNode.DrawEnd(const Canvas_: TCanvas);
266
for I := 0 to ChildsN - 1 do
267
Childs[I].Draw(Canvas_);
270
constructor TDrawNode.Create;
276
procedure TDrawNode.AfterConstruction;
280
Area := TSingleArea2D.Create(-1, -1, +1, +1);
283
destructor TDrawNode.Destroy;
289
procedure TDrawNode.Draw(const Canvas_: TCanvas);
296
function TDrawRoot.GetStroke: TStrokeBrush;
301
// ------------------------------------------------------------------------------
303
function TDrawRoot.GetFiller: TBrush;
308
// ------------------------------------------------------------------------------
310
function TDrawRoot.GetRelaPose: TMatrix;
312
Result := TMatrix.Identity;
315
procedure TDrawRoot.SetRelaPose(const RelaPose_: TMatrix);
320
// ------------------------------------------------------------------------------
322
function TDrawRoot.GetAbsoPose: TMatrix;
327
procedure TDrawRoot.SetAbsoPose(const AbsoPose_: TMatrix);
332
constructor TDrawRoot.Create;
338
procedure TDrawRoot.AfterConstruction;
344
destructor TDrawRoot.Destroy;
350
function TDrawScene.GetStroke: TStrokeBrush;
355
procedure TDrawScene.SetStroke(const Stroke_: TStrokeBrush);
360
// ------------------------------------------------------------------------------
362
function TDrawScene.GetFiller: TBrush;
367
procedure TDrawScene.SetFiller(const Filler_: TBrush);
372
// ------------------------------------------------------------------------------
374
function TDrawScene.GetBackColor: TAlphaColor;
376
Result := _BackColor;
379
procedure TDrawScene.SetBackColor(const BackColor_: TAlphaColor);
381
_BackColor := BackColor_;
384
procedure TDrawScene.DrawBegin(const Canvas_: TCanvas);
388
Stroke.Assign(_Stroke);
389
Fill.Assign(_Filler);
393
procedure TDrawScene.DrawMain(const Canvas_: TCanvas);
397
Canvas_.Clear(_BackColor);
400
constructor TDrawScene.Create;
404
_Stroke := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);
405
_Filler := TBrush.Create(TBrushKind.Solid, TAlphaColors.White);
408
procedure TDrawScene.AfterConstruction;
414
Join := TStrokeJoin.Round;
418
BackColor := TAlphaColors.White;
421
destructor TDrawScene.Destroy;
429
function TDrawKnot.GetOpacity: Single;
434
procedure TDrawKnot.SetOpacity(const Opacity_: Single);
436
_Opacity := Opacity_;
439
// ------------------------------------------------------------------------------
441
function TDrawKnot.GetStroke: TStrokeBrush;
443
if Assigned(_Stroke) then
446
Result := Paren.Stroke;
449
procedure TDrawKnot.SetStroke(const Stroke_: TStrokeBrush);
454
// ------------------------------------------------------------------------------
456
function TDrawKnot.GetFiller: TBrush;
458
if Assigned(_Filler) then
461
Result := Paren.Filler;
464
procedure TDrawKnot.SetFiller(const Filler_: TBrush);
469
procedure TDrawKnot.DrawBegin(const Canvas_: TCanvas);
475
MultiplyMatrix(RelaPose);
477
if Assigned(_Stroke) then
478
Stroke.Assign(_Stroke);
479
if Assigned(_Filler) then
480
Fill.Assign(_Filler);
484
constructor TDrawKnot.Create;
488
_State := TCanvasSaveState.Create;
494
procedure TDrawKnot.AfterConstruction;
501
destructor TDrawKnot.Destroy;
503
if Assigned(_Stroke) then
505
if Assigned(_Filler) then
513
procedure TDrawKnot.Draw(const Canvas_: TCanvas);
515
_State.Assign(Canvas_);
519
Canvas_.Assign(_State);
522
function TDrawShape.GetRelaPose: TMatrix;
527
procedure TDrawShape.SetRelaPose(const RelaPose_: TMatrix);
529
_RelaPose := RelaPose_;
532
constructor TDrawShape.Create;
538
procedure TDrawShape.AfterConstruction;
542
RelaPose := TMatrix.Identity;
545
destructor TDrawShape.Destroy;
551
constructor TDrawCamera.Create;
557
procedure TDrawCamera.AfterConstruction;
561
Area := TSingleArea2D.Create(-10, -10, +10, +10);
564
destructor TDrawCamera.Destroy;
570
procedure TDrawCamera.Render(const Canvas_: TCanvas);
572
Canvas_.MultiplyMatrix(AbsoPose.Inverse);
574
(Self.RootNode as TDrawScene).Draw(Canvas_);
577
function TDrawCopys.GetPoses(const I_: Integer): TMatrix;
579
Result := _Poses[I_];
582
procedure TDrawCopys.SetPoses(const I_: Integer; const Poses_: TMatrix);
584
_Poses[I_] := Poses_;
587
function TDrawCopys.GetPosesN: Integer;
589
Result := Length(_Poses);
592
procedure TDrawCopys.SetPosesN(const PosesN_: Integer);
596
SetLength(_Poses, PosesN_);
598
for I := 0 to PosesN - 1 do
599
_Poses[I] := TMatrix.Identity;
602
procedure TDrawCopys.DrawMain(const Canvas_: TCanvas);
611
for I := 0 to PosesN - 1 do
613
Canvas_.SetMatrix(_Poses[I] * M);
619
constructor TDrawCopys.Create;
625
procedure TDrawCopys.AfterConstruction;
632
destructor TDrawCopys.Destroy;
638
function TDrawPosCopys.GetPoses(const I_: Integer): TSingle2D;
640
Result := _Poses[I_];
643
procedure TDrawPosCopys.SetPoses(const I_: Integer; const Poses_: TSingle2D);
645
_Poses[I_] := Poses_;
648
function TDrawPosCopys.GetPosesN: Integer;
650
Result := Length(_Poses);
653
procedure TDrawPosCopys.SetPosesN(const PosesN_: Integer);
655
SetLength(_Poses, PosesN_);
658
procedure TDrawPosCopys.DrawMain(const Canvas_: TCanvas);
667
for I := 0 to PosesN - 1 do
670
Canvas_.SetMatrix(TMatrix.CreateTranslation(X, Y) * M);
676
//-------------------------------------------------------------------------
678
constructor TDrawPosCopys.Create;
684
procedure TDrawPosCopys.AfterConstruction;
691
destructor TDrawPosCopys.Destroy;