{$IF DEFINED(__VECTOR_HELPER_INTERFACE)} {$IFDEF __HELPER} type __HELPER = type helper for __VEC public {$IF __SIZE = 2} class function Create(const s: __IMPL.TBaseType): __IMPL.TVector2; static; inline; class function Create(const x, y: __IMPL.TBaseType): __IMPL.TVector2; static; inline; {$ELSEIF __SIZE = 3} class function Create(const s: __IMPL.TBaseType): __IMPL.TVector3; static; inline; class function Create(const x, y, z: __IMPL.TBaseType): __IMPL.TVector3; static; inline; {$ELSEIF __SIZE = 4} class function Create(const s: __IMPL.TBaseType): __IMPL.TVector4; static; inline; class function Create(const x, y, z, w: __IMPL.TBaseType): __IMPL.TVector4; static; inline; {$ELSE} {$ERROR only vectors of size 2, 3 or 4 are supported} {$ENDIF} {$IFDEF __MAXCOLOR} function ToColor: TColor; {$ENDIF} function ToString(const aRound: Integer = -3): String; inline; class function FromString(const s: String): __VEC; static; inline; class function TryFromString(const s: String; out v: __VEC): Boolean; static; inline; class function Zero: __VEC; static; inline; {$IF __SIZE = 2} function x: __IMPL.TBaseType; inline; function y: __IMPL.TBaseType; inline; function yx: __IMPL.TVector2; inline; {$ENDIF} {$IF __SIZE = 3} function x: __IMPL.TBaseType; inline; function y: __IMPL.TBaseType; inline; function z: __IMPL.TBaseType; inline; function xx: __IMPL.TVector2; inline; function xy: __IMPL.TVector2; inline; function xz: __IMPL.TVector2; inline; function yx: __IMPL.TVector2; inline; function yy: __IMPL.TVector2; inline; function yz: __IMPL.TVector2; inline; function zx: __IMPL.TVector2; inline; function zy: __IMPL.TVector2; inline; function zz: __IMPL.TVector2; inline; function xxx: __IMPL.TVector3; inline; function xxy: __IMPL.TVector3; inline; function xxz: __IMPL.TVector3; inline; function xyx: __IMPL.TVector3; inline; function xyy: __IMPL.TVector3; inline; function xyz: __IMPL.TVector3; inline; function xzx: __IMPL.TVector3; inline; function xzy: __IMPL.TVector3; inline; function xzz: __IMPL.TVector3; inline; function yxx: __IMPL.TVector3; inline; function yxy: __IMPL.TVector3; inline; function yxz: __IMPL.TVector3; inline; function yyx: __IMPL.TVector3; inline; function yyy: __IMPL.TVector3; inline; function yyz: __IMPL.TVector3; inline; function yzx: __IMPL.TVector3; inline; function yzy: __IMPL.TVector3; inline; function yzz: __IMPL.TVector3; inline; function zxx: __IMPL.TVector3; inline; function zxy: __IMPL.TVector3; inline; function zxz: __IMPL.TVector3; inline; function zyx: __IMPL.TVector3; inline; function zyy: __IMPL.TVector3; inline; function zyz: __IMPL.TVector3; inline; function zzx: __IMPL.TVector3; inline; function zzy: __IMPL.TVector3; inline; function zzz: __IMPL.TVector3; inline; {$ENDIF} {$IF __SIZE = 4} function x: __IMPL.TBaseType; inline; function y: __IMPL.TBaseType; inline; function z: __IMPL.TBaseType; inline; function w: __IMPL.TBaseType; inline; function xx: __IMPL.TVector2; inline; function xy: __IMPL.TVector2; inline; function xz: __IMPL.TVector2; inline; function xw: __IMPL.TVector2; inline; function yx: __IMPL.TVector2; inline; function yy: __IMPL.TVector2; inline; function yz: __IMPL.TVector2; inline; function yw: __IMPL.TVector2; inline; function zx: __IMPL.TVector2; inline; function zy: __IMPL.TVector2; inline; function zz: __IMPL.TVector2; inline; function zw: __IMPL.TVector2; inline; function wx: __IMPL.TVector2; inline; function wy: __IMPL.TVector2; inline; function wz: __IMPL.TVector2; inline; function ww: __IMPL.TVector2; inline; function xxx: __IMPL.TVector3; inline; function xxy: __IMPL.TVector3; inline; function xxz: __IMPL.TVector3; inline; function xxw: __IMPL.TVector3; inline; function xyx: __IMPL.TVector3; inline; function xyy: __IMPL.TVector3; inline; function xyz: __IMPL.TVector3; inline; function xyw: __IMPL.TVector3; inline; function xzx: __IMPL.TVector3; inline; function xzy: __IMPL.TVector3; inline; function xzz: __IMPL.TVector3; inline; function xzw: __IMPL.TVector3; inline; function xwx: __IMPL.TVector3; inline; function xwy: __IMPL.TVector3; inline; function xwz: __IMPL.TVector3; inline; function xww: __IMPL.TVector3; inline; function yxx: __IMPL.TVector3; inline; function yxy: __IMPL.TVector3; inline; function yxz: __IMPL.TVector3; inline; function yxw: __IMPL.TVector3; inline; function yyx: __IMPL.TVector3; inline; function yyy: __IMPL.TVector3; inline; function yyz: __IMPL.TVector3; inline; function yyw: __IMPL.TVector3; inline; function yzx: __IMPL.TVector3; inline; function yzy: __IMPL.TVector3; inline; function yzz: __IMPL.TVector3; inline; function yzw: __IMPL.TVector3; inline; function ywx: __IMPL.TVector3; inline; function ywy: __IMPL.TVector3; inline; function ywz: __IMPL.TVector3; inline; function yww: __IMPL.TVector3; inline; function zxx: __IMPL.TVector3; inline; function zxy: __IMPL.TVector3; inline; function zxz: __IMPL.TVector3; inline; function zxw: __IMPL.TVector3; inline; function zyx: __IMPL.TVector3; inline; function zyy: __IMPL.TVector3; inline; function zyz: __IMPL.TVector3; inline; function zyw: __IMPL.TVector3; inline; function zzx: __IMPL.TVector3; inline; function zzy: __IMPL.TVector3; inline; function zzz: __IMPL.TVector3; inline; function zzw: __IMPL.TVector3; inline; function zwx: __IMPL.TVector3; inline; function zwy: __IMPL.TVector3; inline; function zwz: __IMPL.TVector3; inline; function zww: __IMPL.TVector3; inline; function wxx: __IMPL.TVector3; inline; function wxy: __IMPL.TVector3; inline; function wxz: __IMPL.TVector3; inline; function wxw: __IMPL.TVector3; inline; function wyx: __IMPL.TVector3; inline; function wyy: __IMPL.TVector3; inline; function wyz: __IMPL.TVector3; inline; function wyw: __IMPL.TVector3; inline; function wzx: __IMPL.TVector3; inline; function wzy: __IMPL.TVector3; inline; function wzz: __IMPL.TVector3; inline; function wzw: __IMPL.TVector3; inline; function wwx: __IMPL.TVector3; inline; function wwy: __IMPL.TVector3; inline; function wwz: __IMPL.TVector3; inline; function www: __IMPL.TVector3; inline; function xxxx: __IMPL.TVector4; inline; function xxxy: __IMPL.TVector4; inline; function xxxz: __IMPL.TVector4; inline; function xxxw: __IMPL.TVector4; inline; function xxyx: __IMPL.TVector4; inline; function xxyy: __IMPL.TVector4; inline; function xxyz: __IMPL.TVector4; inline; function xxyw: __IMPL.TVector4; inline; function xxzx: __IMPL.TVector4; inline; function xxzy: __IMPL.TVector4; inline; function xxzz: __IMPL.TVector4; inline; function xxzw: __IMPL.TVector4; inline; function xxwx: __IMPL.TVector4; inline; function xxwy: __IMPL.TVector4; inline; function xxwz: __IMPL.TVector4; inline; function xxww: __IMPL.TVector4; inline; function xyxx: __IMPL.TVector4; inline; function xyxy: __IMPL.TVector4; inline; function xyxz: __IMPL.TVector4; inline; function xyxw: __IMPL.TVector4; inline; function xyyx: __IMPL.TVector4; inline; function xyyy: __IMPL.TVector4; inline; function xyyz: __IMPL.TVector4; inline; function xyyw: __IMPL.TVector4; inline; function xyzx: __IMPL.TVector4; inline; function xyzy: __IMPL.TVector4; inline; function xyzz: __IMPL.TVector4; inline; function xyzw: __IMPL.TVector4; inline; function xywx: __IMPL.TVector4; inline; function xywy: __IMPL.TVector4; inline; function xywz: __IMPL.TVector4; inline; function xyww: __IMPL.TVector4; inline; function xzxx: __IMPL.TVector4; inline; function xzxy: __IMPL.TVector4; inline; function xzxz: __IMPL.TVector4; inline; function xzxw: __IMPL.TVector4; inline; function xzyx: __IMPL.TVector4; inline; function xzyy: __IMPL.TVector4; inline; function xzyz: __IMPL.TVector4; inline; function xzyw: __IMPL.TVector4; inline; function xzzx: __IMPL.TVector4; inline; function xzzy: __IMPL.TVector4; inline; function xzzz: __IMPL.TVector4; inline; function xzzw: __IMPL.TVector4; inline; function xzwx: __IMPL.TVector4; inline; function xzwy: __IMPL.TVector4; inline; function xzwz: __IMPL.TVector4; inline; function xzww: __IMPL.TVector4; inline; function xwxx: __IMPL.TVector4; inline; function xwxy: __IMPL.TVector4; inline; function xwxz: __IMPL.TVector4; inline; function xwxw: __IMPL.TVector4; inline; function xwyx: __IMPL.TVector4; inline; function xwyy: __IMPL.TVector4; inline; function xwyz: __IMPL.TVector4; inline; function xwyw: __IMPL.TVector4; inline; function xwzx: __IMPL.TVector4; inline; function xwzy: __IMPL.TVector4; inline; function xwzz: __IMPL.TVector4; inline; function xwzw: __IMPL.TVector4; inline; function xwwx: __IMPL.TVector4; inline; function xwwy: __IMPL.TVector4; inline; function xwwz: __IMPL.TVector4; inline; function xwww: __IMPL.TVector4; inline; function yxxx: __IMPL.TVector4; inline; function yxxy: __IMPL.TVector4; inline; function yxxz: __IMPL.TVector4; inline; function yxxw: __IMPL.TVector4; inline; function yxyx: __IMPL.TVector4; inline; function yxyy: __IMPL.TVector4; inline; function yxyz: __IMPL.TVector4; inline; function yxyw: __IMPL.TVector4; inline; function yxzx: __IMPL.TVector4; inline; function yxzy: __IMPL.TVector4; inline; function yxzz: __IMPL.TVector4; inline; function yxzw: __IMPL.TVector4; inline; function yxwx: __IMPL.TVector4; inline; function yxwy: __IMPL.TVector4; inline; function yxwz: __IMPL.TVector4; inline; function yxww: __IMPL.TVector4; inline; function yyxx: __IMPL.TVector4; inline; function yyxy: __IMPL.TVector4; inline; function yyxz: __IMPL.TVector4; inline; function yyxw: __IMPL.TVector4; inline; function yyyx: __IMPL.TVector4; inline; function yyyy: __IMPL.TVector4; inline; function yyyz: __IMPL.TVector4; inline; function yyyw: __IMPL.TVector4; inline; function yyzx: __IMPL.TVector4; inline; function yyzy: __IMPL.TVector4; inline; function yyzz: __IMPL.TVector4; inline; function yyzw: __IMPL.TVector4; inline; function yywx: __IMPL.TVector4; inline; function yywy: __IMPL.TVector4; inline; function yywz: __IMPL.TVector4; inline; function yyww: __IMPL.TVector4; inline; function yzxx: __IMPL.TVector4; inline; function yzxy: __IMPL.TVector4; inline; function yzxz: __IMPL.TVector4; inline; function yzxw: __IMPL.TVector4; inline; function yzyx: __IMPL.TVector4; inline; function yzyy: __IMPL.TVector4; inline; function yzyz: __IMPL.TVector4; inline; function yzyw: __IMPL.TVector4; inline; function yzzx: __IMPL.TVector4; inline; function yzzy: __IMPL.TVector4; inline; function yzzz: __IMPL.TVector4; inline; function yzzw: __IMPL.TVector4; inline; function yzwx: __IMPL.TVector4; inline; function yzwy: __IMPL.TVector4; inline; function yzwz: __IMPL.TVector4; inline; function yzww: __IMPL.TVector4; inline; function ywxx: __IMPL.TVector4; inline; function ywxy: __IMPL.TVector4; inline; function ywxz: __IMPL.TVector4; inline; function ywxw: __IMPL.TVector4; inline; function ywyx: __IMPL.TVector4; inline; function ywyy: __IMPL.TVector4; inline; function ywyz: __IMPL.TVector4; inline; function ywyw: __IMPL.TVector4; inline; function ywzx: __IMPL.TVector4; inline; function ywzy: __IMPL.TVector4; inline; function ywzz: __IMPL.TVector4; inline; function ywzw: __IMPL.TVector4; inline; function ywwx: __IMPL.TVector4; inline; function ywwy: __IMPL.TVector4; inline; function ywwz: __IMPL.TVector4; inline; function ywww: __IMPL.TVector4; inline; function zxxx: __IMPL.TVector4; inline; function zxxy: __IMPL.TVector4; inline; function zxxz: __IMPL.TVector4; inline; function zxxw: __IMPL.TVector4; inline; function zxyx: __IMPL.TVector4; inline; function zxyy: __IMPL.TVector4; inline; function zxyz: __IMPL.TVector4; inline; function zxyw: __IMPL.TVector4; inline; function zxzx: __IMPL.TVector4; inline; function zxzy: __IMPL.TVector4; inline; function zxzz: __IMPL.TVector4; inline; function zxzw: __IMPL.TVector4; inline; function zxwx: __IMPL.TVector4; inline; function zxwy: __IMPL.TVector4; inline; function zxwz: __IMPL.TVector4; inline; function zxww: __IMPL.TVector4; inline; function zyxx: __IMPL.TVector4; inline; function zyxy: __IMPL.TVector4; inline; function zyxz: __IMPL.TVector4; inline; function zyxw: __IMPL.TVector4; inline; function zyyx: __IMPL.TVector4; inline; function zyyy: __IMPL.TVector4; inline; function zyyz: __IMPL.TVector4; inline; function zyyw: __IMPL.TVector4; inline; function zyzx: __IMPL.TVector4; inline; function zyzy: __IMPL.TVector4; inline; function zyzz: __IMPL.TVector4; inline; function zyzw: __IMPL.TVector4; inline; function zywx: __IMPL.TVector4; inline; function zywy: __IMPL.TVector4; inline; function zywz: __IMPL.TVector4; inline; function zyww: __IMPL.TVector4; inline; function zzxx: __IMPL.TVector4; inline; function zzxy: __IMPL.TVector4; inline; function zzxz: __IMPL.TVector4; inline; function zzxw: __IMPL.TVector4; inline; function zzyx: __IMPL.TVector4; inline; function zzyy: __IMPL.TVector4; inline; function zzyz: __IMPL.TVector4; inline; function zzyw: __IMPL.TVector4; inline; function zzzx: __IMPL.TVector4; inline; function zzzy: __IMPL.TVector4; inline; function zzzz: __IMPL.TVector4; inline; function zzzw: __IMPL.TVector4; inline; function zzwx: __IMPL.TVector4; inline; function zzwy: __IMPL.TVector4; inline; function zzwz: __IMPL.TVector4; inline; function zzww: __IMPL.TVector4; inline; function zwxx: __IMPL.TVector4; inline; function zwxy: __IMPL.TVector4; inline; function zwxz: __IMPL.TVector4; inline; function zwxw: __IMPL.TVector4; inline; function zwyx: __IMPL.TVector4; inline; function zwyy: __IMPL.TVector4; inline; function zwyz: __IMPL.TVector4; inline; function zwyw: __IMPL.TVector4; inline; function zwzx: __IMPL.TVector4; inline; function zwzy: __IMPL.TVector4; inline; function zwzz: __IMPL.TVector4; inline; function zwzw: __IMPL.TVector4; inline; function zwwx: __IMPL.TVector4; inline; function zwwy: __IMPL.TVector4; inline; function zwwz: __IMPL.TVector4; inline; function zwww: __IMPL.TVector4; inline; function wxxx: __IMPL.TVector4; inline; function wxxy: __IMPL.TVector4; inline; function wxxz: __IMPL.TVector4; inline; function wxxw: __IMPL.TVector4; inline; function wxyx: __IMPL.TVector4; inline; function wxyy: __IMPL.TVector4; inline; function wxyz: __IMPL.TVector4; inline; function wxyw: __IMPL.TVector4; inline; function wxzx: __IMPL.TVector4; inline; function wxzy: __IMPL.TVector4; inline; function wxzz: __IMPL.TVector4; inline; function wxzw: __IMPL.TVector4; inline; function wxwx: __IMPL.TVector4; inline; function wxwy: __IMPL.TVector4; inline; function wxwz: __IMPL.TVector4; inline; function wxww: __IMPL.TVector4; inline; function wyxx: __IMPL.TVector4; inline; function wyxy: __IMPL.TVector4; inline; function wyxz: __IMPL.TVector4; inline; function wyxw: __IMPL.TVector4; inline; function wyyx: __IMPL.TVector4; inline; function wyyy: __IMPL.TVector4; inline; function wyyz: __IMPL.TVector4; inline; function wyyw: __IMPL.TVector4; inline; function wyzx: __IMPL.TVector4; inline; function wyzy: __IMPL.TVector4; inline; function wyzz: __IMPL.TVector4; inline; function wyzw: __IMPL.TVector4; inline; function wywx: __IMPL.TVector4; inline; function wywy: __IMPL.TVector4; inline; function wywz: __IMPL.TVector4; inline; function wyww: __IMPL.TVector4; inline; function wzxx: __IMPL.TVector4; inline; function wzxy: __IMPL.TVector4; inline; function wzxz: __IMPL.TVector4; inline; function wzxw: __IMPL.TVector4; inline; function wzyx: __IMPL.TVector4; inline; function wzyy: __IMPL.TVector4; inline; function wzyz: __IMPL.TVector4; inline; function wzyw: __IMPL.TVector4; inline; function wzzx: __IMPL.TVector4; inline; function wzzy: __IMPL.TVector4; inline; function wzzz: __IMPL.TVector4; inline; function wzzw: __IMPL.TVector4; inline; function wzwx: __IMPL.TVector4; inline; function wzwy: __IMPL.TVector4; inline; function wzwz: __IMPL.TVector4; inline; function wzww: __IMPL.TVector4; inline; function wwxx: __IMPL.TVector4; inline; function wwxy: __IMPL.TVector4; inline; function wwxz: __IMPL.TVector4; inline; function wwxw: __IMPL.TVector4; inline; function wwyx: __IMPL.TVector4; inline; function wwyy: __IMPL.TVector4; inline; function wwyz: __IMPL.TVector4; inline; function wwyw: __IMPL.TVector4; inline; function wwzx: __IMPL.TVector4; inline; function wwzy: __IMPL.TVector4; inline; function wwzz: __IMPL.TVector4; inline; function wwzw: __IMPL.TVector4; inline; function wwwx: __IMPL.TVector4; inline; function wwwy: __IMPL.TVector4; inline; function wwwz: __IMPL.TVector4; inline; function wwww: __IMPL.TVector4; inline; {$ENDIF} end; operator = (const v1, v2: __VEC): Boolean; inline; {$IFDEF __HELPER_I} type __HELPER_I = type helper(__HELPER) for __VEC public function Length: Double; inline; function SqrLength: Double; inline; function Abs: __VEC; function Add(const v: __VEC): __VEC; inline; function Subtract(const v: __VEC): __VEC; inline; function Multiply(const v: __IMPL.TBaseType): __VEC; overload; inline; function Multiply(const v: __VEC): __VEC; overload; inline; function Clamp(const min, max: __VEC): __VEC; inline; function Clamp(const min, max: __IMPL.TBaseType): __VEC; inline; end; operator + (const v1, v2: __VEC): __VEC; inline; operator - (const v1, v2: __VEC): __VEC; inline; {$IFDEF __HELPER_F} type __HELPER_F = type helper(__HELPER_I) for __VEC public function Normalize: __VEC; inline; function Divide(const v: __IMPL.TBaseType): __VEC; inline; function Dot(const v: __VEC): __IMPL.TBaseType; inline; {$IF __SIZE <> 4} function Angle(const v: __VEC): Double; inline; {$ENDIF} {$IF __SIZE = 2} function Angle2(const v: __VEC): Double; inline; {$ENDIF} {$IF __SIZE = 3} function Cross(const v: __VEC): __VEC; inline; {$ENDIF} end; operator * (const v: __VEC; const s: __IMPL.TBaseType): __VEC; inline; operator * (const s: __IMPL.TBaseType; const v: __VEC): __VEC; inline; operator * (const v1, v2: __VEC): __VEC; inline; operator / (const v: __VEC; const s: __IMPL.TBaseType): __VEC; inline; {$ENDIF} {$ENDIF} {$ENDIF} {$ELSEIF DEFINED (__VECTOR_HELPER_IMPL)} {$IFDEF __HELPER} {$IF __SIZE = 2} class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector2(s, s); end; class function __HELPER.Create(const x, y: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector2(x, y); end; {$ELSEIF __SIZE = 3} class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector3(s, s, s); end; class function __HELPER.Create(const x, y, z: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector3(x, y, z); end; {$ELSEIF __SIZE = 4} class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector4(s, s, s, s); end; class function __HELPER.Create(const x, y, z, w: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector4(x, y, z, w); end; {$ENDIF} {$IFDEF __MAXCOLOR} function __HELPER.ToColor: TColor; var tmp: __VEC; begin tmp := __IMPL.Clamp(self, 0, __MAXCOLOR); result := (Round(255 * (tmp[0] / __MAXCOLOR)) shl 0) or (Round(255 * (tmp[1] / __MAXCOLOR)) shl 8) or (Round(255 * (tmp[2] / __MAXCOLOR)) shl 16); end; {$ENDIF} function __HELPER.ToString(const aRound: Integer): String; begin result := __IMPL.ToString(self, aRound); end; class function __HELPER.FromString(const s: String): __VEC; begin if not __IMPL.TryFromString(s, result) then result := Zero; end; class function __HELPER.TryFromString(const s: String; out v: __VEC): Boolean; begin result := __IMPl.TryFromString(s, v); end; class function __HELPER.Zero: __VEC; begin FillByte(result{%H-}[0], Length(result) * SizeOf(result[0]), 0); end; {$IF __SIZE = 2} function __HELPER.x: __IMPL.TBaseType; begin result := self[0]; end; function __HELPER.y: __IMPL.TBaseType; begin result := self[1]; end; function __HELPER.yx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[0]); end; {$ENDIF} {$IF __SIZE = 3} function __HELPER.x: __IMPL.TBaseType; begin result := self[0]; end; function __HELPER.y: __IMPL.TBaseType; begin result := self[1]; end; function __HELPER.z: __IMPL.TBaseType; begin result := self[2]; end; function __HELPER.xx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[0]); end; function __HELPER.xy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[1]); end; function __HELPER.xz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[2]); end; function __HELPER.yx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[0]); end; function __HELPER.yy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[1]); end; function __HELPER.yz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[2]); end; function __HELPER.zx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[0]); end; function __HELPER.zy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[1]); end; function __HELPER.zz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[2]); end; function __HELPER.xxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[0]); end; function __HELPER.xxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[1]); end; function __HELPER.xxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[2]); end; function __HELPER.xyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[0]); end; function __HELPER.xyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[1]); end; function __HELPER.xyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[2]); end; function __HELPER.xzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[0]); end; function __HELPER.xzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[1]); end; function __HELPER.xzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[1]); end; function __HELPER.yxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[0]); end; function __HELPER.yxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[1]); end; function __HELPER.yxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[2]); end; function __HELPER.yyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[0]); end; function __HELPER.yyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[1]); end; function __HELPER.yyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[2]); end; function __HELPER.yzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[0]); end; function __HELPER.yzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[1]); end; function __HELPER.yzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[2]); end; function __HELPER.zxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[0]); end; function __HELPER.zxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[1]); end; function __HELPER.zxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[2]); end; function __HELPER.zyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[0]); end; function __HELPER.zyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[1]); end; function __HELPER.zyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[2]); end; function __HELPER.zzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[0]); end; function __HELPER.zzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[1]); end; function __HELPER.zzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[2]); end; {$ENDIF} {$IF __SIZE = 4} function __Helper.x: __IMPL.TBaseType; begin result := self[0]; end; function __Helper.y: __IMPL.TBaseType; begin result := self[1]; end; function __Helper.z: __IMPL.TBaseType; begin result := self[2]; end; function __Helper.w: __IMPL.TBaseType; begin result := self[3]; end; function __Helper.xx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[0]); end; function __Helper.xy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[1]); end; function __Helper.xz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[2]); end; function __Helper.xw: __IMPL.TVector2; begin result := __IMPL.Vector2(self[0], self[3]); end; function __Helper.yx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[0]); end; function __Helper.yy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[1]); end; function __Helper.yz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[2]); end; function __Helper.yw: __IMPL.TVector2; begin result := __IMPL.Vector2(self[1], self[3]); end; function __Helper.zx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[0]); end; function __Helper.zy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[1]); end; function __Helper.zz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[2]); end; function __Helper.zw: __IMPL.TVector2; begin result := __IMPL.Vector2(self[2], self[3]); end; function __Helper.wx: __IMPL.TVector2; begin result := __IMPL.Vector2(self[3], self[0]); end; function __Helper.wy: __IMPL.TVector2; begin result := __IMPL.Vector2(self[3], self[1]); end; function __Helper.wz: __IMPL.TVector2; begin result := __IMPL.Vector2(self[3], self[2]); end; function __Helper.ww: __IMPL.TVector2; begin result := __IMPL.Vector2(self[3], self[3]); end; function __Helper.xxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[0]); end; function __Helper.xxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[1]); end; function __Helper.xxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[2]); end; function __Helper.xxw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[0], self[3]); end; function __Helper.xyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[0]); end; function __Helper.xyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[1]); end; function __Helper.xyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[2]); end; function __Helper.xyw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[1], self[3]); end; function __Helper.xzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[0]); end; function __Helper.xzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[1]); end; function __Helper.xzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[2]); end; function __Helper.xzw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[2], self[3]); end; function __Helper.xwx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[3], self[0]); end; function __Helper.xwy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[3], self[1]); end; function __Helper.xwz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[3], self[2]); end; function __Helper.xww: __IMPL.TVector3; begin result := __IMPL.Vector3(self[0], self[3], self[3]); end; function __Helper.yxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[0], self[0]); end; function __Helper.yxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[0], self[1]); end; function __Helper.yxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[0], self[2]); end; function __Helper.yxw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[0], self[3]); end; function __Helper.yyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[1], self[0]); end; function __Helper.yyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[1], self[1]); end; function __Helper.yyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[1], self[2]); end; function __Helper.yyw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[1], self[3]); end; function __Helper.yzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[2], self[0]); end; function __Helper.yzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[2], self[1]); end; function __Helper.yzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[2], self[2]); end; function __Helper.yzw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[2], self[3]); end; function __Helper.ywx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[3], self[0]); end; function __Helper.ywy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[3], self[1]); end; function __Helper.ywz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[3], self[2]); end; function __Helper.yww: __IMPL.TVector3; begin result := __IMPL.Vector3(self[1], self[3], self[3]); end; function __Helper.zxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[0], self[0]); end; function __Helper.zxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[0], self[1]); end; function __Helper.zxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[0], self[2]); end; function __Helper.zxw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[0], self[3]); end; function __Helper.zyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[1], self[0]); end; function __Helper.zyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[1], self[1]); end; function __Helper.zyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[1], self[2]); end; function __Helper.zyw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[1], self[3]); end; function __Helper.zzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[2], self[0]); end; function __Helper.zzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[2], self[1]); end; function __Helper.zzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[2], self[2]); end; function __Helper.zzw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[2], self[3]); end; function __Helper.zwx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[3], self[0]); end; function __Helper.zwy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[3], self[1]); end; function __Helper.zwz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[3], self[2]); end; function __Helper.zww: __IMPL.TVector3; begin result := __IMPL.Vector3(self[2], self[3], self[3]); end; function __Helper.wxx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[0], self[0]); end; function __Helper.wxy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[0], self[1]); end; function __Helper.wxz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[0], self[2]); end; function __Helper.wxw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[0], self[3]); end; function __Helper.wyx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[1], self[0]); end; function __Helper.wyy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[1], self[1]); end; function __Helper.wyz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[1], self[2]); end; function __Helper.wyw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[1], self[3]); end; function __Helper.wzx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[2], self[0]); end; function __Helper.wzy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[2], self[1]); end; function __Helper.wzz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[2], self[2]); end; function __Helper.wzw: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[2], self[3]); end; function __Helper.wwx: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[3], self[0]); end; function __Helper.wwy: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[3], self[1]); end; function __Helper.wwz: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[3], self[2]); end; function __Helper.www: __IMPL.TVector3; begin result := __IMPL.Vector3(self[3], self[3], self[3]); end; function __Helper.xxxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[0], self[0]); end; function __Helper.xxxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[0], self[1]); end; function __Helper.xxxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[0], self[2]); end; function __Helper.xxxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[0], self[3]); end; function __Helper.xxyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[1], self[0]); end; function __Helper.xxyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[1], self[1]); end; function __Helper.xxyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[1], self[2]); end; function __Helper.xxyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[1], self[3]); end; function __Helper.xxzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[2], self[0]); end; function __Helper.xxzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[2], self[1]); end; function __Helper.xxzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[2], self[2]); end; function __Helper.xxzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[2], self[3]); end; function __Helper.xxwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[3], self[0]); end; function __Helper.xxwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[3], self[1]); end; function __Helper.xxwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[3], self[2]); end; function __Helper.xxww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[0], self[3], self[3]); end; function __Helper.xyxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[0], self[0]); end; function __Helper.xyxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[0], self[1]); end; function __Helper.xyxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[0], self[2]); end; function __Helper.xyxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[0], self[3]); end; function __Helper.xyyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[1], self[0]); end; function __Helper.xyyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[1], self[1]); end; function __Helper.xyyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[1], self[2]); end; function __Helper.xyyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[1], self[3]); end; function __Helper.xyzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[2], self[0]); end; function __Helper.xyzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[2], self[1]); end; function __Helper.xyzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[2], self[2]); end; function __Helper.xyzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[2], self[3]); end; function __Helper.xywx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[3], self[0]); end; function __Helper.xywy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[3], self[1]); end; function __Helper.xywz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[3], self[2]); end; function __Helper.xyww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[1], self[3], self[3]); end; function __Helper.xzxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[0], self[0]); end; function __Helper.xzxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[0], self[1]); end; function __Helper.xzxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[0], self[2]); end; function __Helper.xzxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[0], self[3]); end; function __Helper.xzyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[1], self[0]); end; function __Helper.xzyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[1], self[1]); end; function __Helper.xzyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[1], self[2]); end; function __Helper.xzyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[1], self[3]); end; function __Helper.xzzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[2], self[0]); end; function __Helper.xzzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[2], self[1]); end; function __Helper.xzzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[2], self[2]); end; function __Helper.xzzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[2], self[3]); end; function __Helper.xzwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[3], self[0]); end; function __Helper.xzwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[3], self[1]); end; function __Helper.xzwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[3], self[2]); end; function __Helper.xzww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[2], self[3], self[3]); end; function __Helper.xwxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[0], self[0]); end; function __Helper.xwxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[0], self[1]); end; function __Helper.xwxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[0], self[2]); end; function __Helper.xwxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[0], self[3]); end; function __Helper.xwyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[1], self[0]); end; function __Helper.xwyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[1], self[1]); end; function __Helper.xwyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[1], self[2]); end; function __Helper.xwyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[1], self[3]); end; function __Helper.xwzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[2], self[0]); end; function __Helper.xwzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[2], self[1]); end; function __Helper.xwzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[2], self[2]); end; function __Helper.xwzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[2], self[3]); end; function __Helper.xwwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[3], self[0]); end; function __Helper.xwwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[3], self[1]); end; function __Helper.xwwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[3], self[2]); end; function __Helper.xwww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[0], self[3], self[3], self[3]); end; function __Helper.yxxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[0], self[0]); end; function __Helper.yxxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[0], self[1]); end; function __Helper.yxxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[0], self[2]); end; function __Helper.yxxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[0], self[3]); end; function __Helper.yxyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[1], self[0]); end; function __Helper.yxyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[1], self[1]); end; function __Helper.yxyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[1], self[2]); end; function __Helper.yxyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[1], self[3]); end; function __Helper.yxzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[2], self[0]); end; function __Helper.yxzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[2], self[1]); end; function __Helper.yxzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[2], self[2]); end; function __Helper.yxzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[2], self[3]); end; function __Helper.yxwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[3], self[0]); end; function __Helper.yxwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[3], self[1]); end; function __Helper.yxwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[3], self[2]); end; function __Helper.yxww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[0], self[3], self[3]); end; function __Helper.yyxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[0], self[0]); end; function __Helper.yyxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[0], self[1]); end; function __Helper.yyxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[0], self[2]); end; function __Helper.yyxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[0], self[3]); end; function __Helper.yyyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[1], self[0]); end; function __Helper.yyyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[1], self[1]); end; function __Helper.yyyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[1], self[2]); end; function __Helper.yyyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[1], self[3]); end; function __Helper.yyzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[2], self[0]); end; function __Helper.yyzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[2], self[1]); end; function __Helper.yyzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[2], self[2]); end; function __Helper.yyzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[2], self[3]); end; function __Helper.yywx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[3], self[0]); end; function __Helper.yywy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[3], self[1]); end; function __Helper.yywz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[3], self[2]); end; function __Helper.yyww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[1], self[3], self[3]); end; function __Helper.yzxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[0], self[0]); end; function __Helper.yzxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[0], self[1]); end; function __Helper.yzxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[0], self[2]); end; function __Helper.yzxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[0], self[3]); end; function __Helper.yzyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[1], self[0]); end; function __Helper.yzyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[1], self[1]); end; function __Helper.yzyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[1], self[2]); end; function __Helper.yzyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[1], self[3]); end; function __Helper.yzzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[2], self[0]); end; function __Helper.yzzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[2], self[1]); end; function __Helper.yzzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[2], self[2]); end; function __Helper.yzzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[2], self[3]); end; function __Helper.yzwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[3], self[0]); end; function __Helper.yzwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[3], self[1]); end; function __Helper.yzwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[3], self[2]); end; function __Helper.yzww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[2], self[3], self[3]); end; function __Helper.ywxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[0], self[0]); end; function __Helper.ywxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[0], self[1]); end; function __Helper.ywxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[0], self[2]); end; function __Helper.ywxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[0], self[3]); end; function __Helper.ywyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[1], self[0]); end; function __Helper.ywyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[1], self[1]); end; function __Helper.ywyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[1], self[2]); end; function __Helper.ywyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[1], self[3]); end; function __Helper.ywzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[2], self[0]); end; function __Helper.ywzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[2], self[1]); end; function __Helper.ywzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[2], self[2]); end; function __Helper.ywzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[2], self[3]); end; function __Helper.ywwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[3], self[0]); end; function __Helper.ywwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[3], self[1]); end; function __Helper.ywwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[3], self[2]); end; function __Helper.ywww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[1], self[3], self[3], self[3]); end; function __Helper.zxxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[0], self[0]); end; function __Helper.zxxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[0], self[1]); end; function __Helper.zxxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[0], self[2]); end; function __Helper.zxxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[0], self[3]); end; function __Helper.zxyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[1], self[0]); end; function __Helper.zxyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[1], self[1]); end; function __Helper.zxyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[1], self[2]); end; function __Helper.zxyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[1], self[3]); end; function __Helper.zxzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[2], self[0]); end; function __Helper.zxzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[2], self[1]); end; function __Helper.zxzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[2], self[2]); end; function __Helper.zxzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[2], self[3]); end; function __Helper.zxwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[3], self[0]); end; function __Helper.zxwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[3], self[1]); end; function __Helper.zxwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[3], self[2]); end; function __Helper.zxww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[0], self[3], self[3]); end; function __Helper.zyxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[0], self[0]); end; function __Helper.zyxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[0], self[1]); end; function __Helper.zyxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[0], self[2]); end; function __Helper.zyxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[0], self[3]); end; function __Helper.zyyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[1], self[0]); end; function __Helper.zyyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[1], self[1]); end; function __Helper.zyyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[1], self[2]); end; function __Helper.zyyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[1], self[3]); end; function __Helper.zyzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[2], self[0]); end; function __Helper.zyzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[2], self[1]); end; function __Helper.zyzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[2], self[2]); end; function __Helper.zyzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[2], self[3]); end; function __Helper.zywx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[3], self[0]); end; function __Helper.zywy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[3], self[1]); end; function __Helper.zywz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[3], self[2]); end; function __Helper.zyww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[1], self[3], self[3]); end; function __Helper.zzxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[0], self[0]); end; function __Helper.zzxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[0], self[1]); end; function __Helper.zzxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[0], self[2]); end; function __Helper.zzxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[0], self[3]); end; function __Helper.zzyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[1], self[0]); end; function __Helper.zzyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[1], self[1]); end; function __Helper.zzyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[1], self[2]); end; function __Helper.zzyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[1], self[3]); end; function __Helper.zzzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[2], self[0]); end; function __Helper.zzzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[2], self[1]); end; function __Helper.zzzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[2], self[2]); end; function __Helper.zzzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[2], self[3]); end; function __Helper.zzwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[3], self[0]); end; function __Helper.zzwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[3], self[1]); end; function __Helper.zzwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[3], self[2]); end; function __Helper.zzww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[2], self[3], self[3]); end; function __Helper.zwxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[0], self[0]); end; function __Helper.zwxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[0], self[1]); end; function __Helper.zwxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[0], self[2]); end; function __Helper.zwxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[0], self[3]); end; function __Helper.zwyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[1], self[0]); end; function __Helper.zwyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[1], self[1]); end; function __Helper.zwyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[1], self[2]); end; function __Helper.zwyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[1], self[3]); end; function __Helper.zwzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[2], self[0]); end; function __Helper.zwzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[2], self[1]); end; function __Helper.zwzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[2], self[2]); end; function __Helper.zwzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[2], self[3]); end; function __Helper.zwwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[3], self[0]); end; function __Helper.zwwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[3], self[1]); end; function __Helper.zwwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[3], self[2]); end; function __Helper.zwww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[2], self[3], self[3], self[3]); end; function __Helper.wxxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[0], self[0]); end; function __Helper.wxxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[0], self[1]); end; function __Helper.wxxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[0], self[2]); end; function __Helper.wxxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[0], self[3]); end; function __Helper.wxyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[1], self[0]); end; function __Helper.wxyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[1], self[1]); end; function __Helper.wxyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[1], self[2]); end; function __Helper.wxyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[1], self[3]); end; function __Helper.wxzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[2], self[0]); end; function __Helper.wxzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[2], self[1]); end; function __Helper.wxzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[2], self[2]); end; function __Helper.wxzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[2], self[3]); end; function __Helper.wxwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[3], self[0]); end; function __Helper.wxwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[3], self[1]); end; function __Helper.wxwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[3], self[2]); end; function __Helper.wxww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[0], self[3], self[3]); end; function __Helper.wyxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[0], self[0]); end; function __Helper.wyxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[0], self[1]); end; function __Helper.wyxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[0], self[2]); end; function __Helper.wyxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[0], self[3]); end; function __Helper.wyyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[1], self[0]); end; function __Helper.wyyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[1], self[1]); end; function __Helper.wyyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[1], self[2]); end; function __Helper.wyyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[1], self[3]); end; function __Helper.wyzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[2], self[0]); end; function __Helper.wyzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[2], self[1]); end; function __Helper.wyzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[2], self[2]); end; function __Helper.wyzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[2], self[3]); end; function __Helper.wywx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[3], self[0]); end; function __Helper.wywy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[3], self[1]); end; function __Helper.wywz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[3], self[2]); end; function __Helper.wyww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[1], self[3], self[3]); end; function __Helper.wzxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[0], self[0]); end; function __Helper.wzxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[0], self[1]); end; function __Helper.wzxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[0], self[2]); end; function __Helper.wzxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[0], self[3]); end; function __Helper.wzyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[1], self[0]); end; function __Helper.wzyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[1], self[1]); end; function __Helper.wzyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[1], self[2]); end; function __Helper.wzyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[1], self[3]); end; function __Helper.wzzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[2], self[0]); end; function __Helper.wzzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[2], self[1]); end; function __Helper.wzzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[2], self[2]); end; function __Helper.wzzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[2], self[3]); end; function __Helper.wzwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[3], self[0]); end; function __Helper.wzwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[3], self[1]); end; function __Helper.wzwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[3], self[2]); end; function __Helper.wzww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[2], self[3], self[3]); end; function __Helper.wwxx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[0], self[0]); end; function __Helper.wwxy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[0], self[1]); end; function __Helper.wwxz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[0], self[2]); end; function __Helper.wwxw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[0], self[3]); end; function __Helper.wwyx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[1], self[0]); end; function __Helper.wwyy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[1], self[1]); end; function __Helper.wwyz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[1], self[2]); end; function __Helper.wwyw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[1], self[3]); end; function __Helper.wwzx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[2], self[0]); end; function __Helper.wwzy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[2], self[1]); end; function __Helper.wwzz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[2], self[2]); end; function __Helper.wwzw: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[2], self[3]); end; function __Helper.wwwx: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[3], self[0]); end; function __Helper.wwwy: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[3], self[1]); end; function __Helper.wwwz: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[3], self[2]); end; function __Helper.wwww: __IMPL.TVector4; begin result := __IMPL.Vector4(self[3], self[3], self[3], self[3]); end; {$ENDIF} operator = (const v1, v2: __VEC): Boolean; begin result := __IMPL.Equals(v1, v2); end; {$IFDEF __HELPER_I} function __HELPER_I.Length: Double; begin result := __IMPL.Length(self); end; function __HELPER_I.SqrLength: Double; begin result := __IMPL.SqrLength(self); end; function __HELPER_I.Abs: __VEC; var i: Integer; begin for i := Low(self) to High(self) do result[i] := System.abs(self[i]); end; function __HELPER_I.Add(const v: __VEC): __VEC; begin result := __IMPL.Add(self, v); end; function __HELPER_I.Subtract(const v: __VEC): __VEC; begin result := __IMPL.Sub(self, v); end; function __HELPER_I.Multiply(const v: __IMPL.TBaseType): __VEC; begin result := __IMPL.Multiply(self, v); end; function __HELPER_I.Multiply(const v: __VEC): __VEC; begin result := __IMPL.Multiply(self, v); end; function __HELPER_I.Clamp(const min, max: __VEC): __VEC; begin result := __IMPL.Clamp(self, min, max); end; function __HELPER_I.Clamp(const min, max: __IMPL.TBaseType): __VEC; begin result := __IMPL.Clamp(self, min, max); end; operator + (const v1, v2: __VEC): __VEC; begin result := __IMPL.Add(v1, v2); end; operator - (const v1, v2: __VEC): __VEC; begin result := __IMPL.Sub(v1, v2); end; {$IFDEF __HELPER_F} function __HELPER_F.Normalize: __VEC; begin result := __IMPL.Normalize(self); end; function __HELPER_F.Divide(const v: __IMPL.TBaseType): __VEC; begin result := __IMPL.Divide(self, v); end; function __HELPER_F.Dot(const v: __VEC): __IMPL.TBaseType; begin result := __IMPL.Dot(self, v); end; {$IF __SIZE <> 4} function __HELPER_F.Angle(const v: __VEC): Double; begin result := __IMPL.Angle(self, v); end; {$ENDIF} {$IF __SIZE = 2} function __HELPER_F.Angle2(const v: __VEC): Double; begin result := __IMPL.Angle2(self, v); end; {$ENDIF} {$IF __SIZE = 3} function __HELPER_F.Cross(const v: __VEC): __VEC; inline; begin result := __IMPL.Cross(self, v); end; {$ENDIF} operator * (const v: __VEC; const s: __IMPL.TBaseType): __VEC; begin result := __IMPL.Multiply(v, s); end; operator * (const s: __IMPL.TBaseType; const v: __VEC): __VEC; begin result := __IMPL.Multiply(v, s); end; operator * (const v1, v2: __VEC): __VEC; begin result := __IMPL.Multiply(v1, v2); end; operator / (const v: __VEC; const s: __IMPL.TBaseType): __VEC; begin result := __IMPL.Divide(v, s); end; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$UNDEF __IMPL} {$UNDEF __SIZE} {$UNDEF __VEC} {$UNDEF __MAXCOLOR} {$UNDEF __HELPER} {$UNDEF __HELPER_I} {$UNDEF __HELPER_F}