3
interface //#################################################################### ■
5
uses System.Types, System.Classes, System.Math.Vectors,
6
FMX.Types3D, FMX.Controls3D, FMX.MaterialSources,
9
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
11
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
13
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
15
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTwistRod
17
TTwistRod = class( TControl3D )
20
function XYtoI( const X_,Y_:Integer ) :Integer; inline;
24
_Material :TMaterialSource;
31
procedure SetHeight( const Radius_:Single ); override;
32
procedure SetRadius( const Radius_:Single ); virtual;
33
procedure SetDivH( const DivH_:Integer ); virtual;
34
procedure SetDivR( const DivR_:Integer ); virtual;
35
procedure SetAngleT( const AngleT_:Single ); virtual;
36
procedure SetAngleB( const AngleB_:Single ); virtual;
38
procedure Render; override;
40
constructor Create( Owner_:TComponent ); override;
41
destructor Destroy; override;
43
property Material :TMaterialSource read _Material write _Material;
44
property Radius :Single read _Radius write SetRadius ;
45
property DivH :Integer read _DivH write SetDivH ;
46
property DivR :Integer read _DivR write SetDivR ;
47
property AngleT :Single read _AngleT write SetAngleT ;
48
property AngleB :Single read _AngleB write SetAngleB ;
51
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
53
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
55
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
57
implementation //############################################################### ■
59
uses System.SysUtils, System.RTLConsts, System.Math;
61
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
63
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
65
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTwistRod
67
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
69
function TTwistRod.XYtoI( const X_,Y_:Integer ) :Integer;
71
Result := ( _DivR + 1 ) * Y_ + X_;
74
procedure TTwistRod.MakeModel;
85
Length := ( _DivR + 1 ) * ( _DivH + 1 );
87
for Y := 0 to _DivH do
92
P.Y := Height * ( T.Y - 0.5 );
94
S := ( 1 - Cos( Pi * T.Y ) ) / 2;
96
B := ( _AngleB - _AngleT ) * S + _AngleT;
100
for X := 0 to _DivR do
123
Length := 3{Poin} * 2{Face} * _DivR * _DivH;
126
for Y := 0 to _DivH-1 do
128
for X := 0 to _DivR-1 do
137
Indices[ I ] := XYtoI( X , Y ); Inc( I );
138
Indices[ I ] := XYtoI( X+1, Y ); Inc( I );
139
Indices[ I ] := XYtoI( X+1, Y+1 ); Inc( I );
141
Indices[ I ] := XYtoI( X+1, Y+1 ); Inc( I );
142
Indices[ I ] := XYtoI( X , Y+1 ); Inc( I );
143
Indices[ I ] := XYtoI( X , Y ); Inc( I );
150
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
152
/////////////////////////////////////////////////////////////////////// アクセス
154
procedure TTwistRod.SetHeight( const Radius_:Single );
161
procedure TTwistRod.SetRadius( const Radius_:Single );
163
_Radius := Radius_; MakeModel;
166
procedure TTwistRod.SetDivH( const DivH_:Integer );
168
_DivH := DivH_; MakeModel;
170
procedure TTwistRod.SetDivR( const DivR_:Integer );
172
_DivR := DivR_; MakeModel;
175
procedure TTwistRod.SetAngleT( const AngleT_:Single );
177
_AngleT := AngleT_; MakeModel;
180
procedure TTwistRod.SetAngleB( const AngleB_:Single );
182
_AngleB := AngleB_; MakeModel;
185
/////////////////////////////////////////////////////////////////////// メソッド
187
procedure TTwistRod.Render;
189
Context.SetMatrix( AbsoluteMatrix);
191
_Geometry.Render( Context, TMaterialSource.ValidMaterial(_Material), AbsoluteOpacity );
194
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
196
constructor TTwistRod.Create( Owner_:TComponent );
200
_Geometry := TMeshData.Create;
212
destructor TTwistRod.Destroy;
219
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
221
//############################################################################## □
223
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
225
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
227
end. //######################################################################### ■