123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- unit GBE.CubeExtend;
- interface
- uses
- System.SysUtils,
- System.Classes,
- FMX.Types,
- FMX.Controls3D,
- FMX.Objects3D,
- FMX.MaterialSources;
- type
- TGBECubeExtend = class(TDummy)
- private
- FMaterialSourceFaceFront, FMaterialSourceFaceRight, FMaterialSourceFaceBack,
- FMaterialSourceFaceLeft, FMaterialSourceFaceTop, FMaterialSourceFaceBottom
- : TMaterialSource;
- fSubdivisionsWidth, fSubdivisionsHeight, fSubdivisionsDepth: integer;
- fFaceFront, fFaceRight, fFaceBack, fFaceLeft, fFaceTop, fFaceBottom: TPlane;
- fFaceFrontVisible, fFaceRightVisible, fFaceBackVisible, fFaceLeftVisible,
- fFaceTopVisible, fFaceBottomVisible: boolean;
- fWidth, fDepth, fHeight: single;
- // Materials
- procedure SetMaterialSourceFaceFront(const Value: TMaterialSource);
- procedure SetMaterialSourceFaceBack(const Value: TMaterialSource);
- procedure SetMaterialSourceFaceBottom(const Value: TMaterialSource);
- procedure SetMaterialSourceFaceLeft(const Value: TMaterialSource);
- procedure SetMaterialSourceFaceRight(const Value: TMaterialSource);
- procedure SetMaterialSourceFaceTop(const Value: TMaterialSource);
- // Subdivisions
- procedure SetSubdivisionsDepth(const Value: integer);
- procedure SetSubdivisionsHeight(const Value: integer);
- procedure SetSubdivisionsWidth(const Value: integer);
- // Faces
- procedure SetFaceFrontVisible(const Value: boolean);
- procedure SetFaceRightVisible(const Value: boolean);
- procedure SetFaceBackVisible(const Value: boolean);
- procedure SetFaceLeftVisible(const Value: boolean);
- procedure SetFaceTopVisible(const Value: boolean);
- procedure SetFaceBottomVisible(const Value: boolean);
- // Drawing
- procedure DrawCube;
- procedure SetDepth(const Value: single);
- procedure SetHeight(const Value: single);
- procedure SetWidth(const Value: single);
- protected
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- published
- property SubdivisionsDepth: integer read fSubdivisionsDepth
- write SetSubdivisionsDepth;
- property SubdivisionsHeight: integer read fSubdivisionsHeight
- write SetSubdivisionsHeight;
- property SubdivisionsWidth: integer read fSubdivisionsWidth
- write SetSubdivisionsWidth;
- property MaterialSourceFaceFront: TMaterialSource
- read FMaterialSourceFaceFront write SetMaterialSourceFaceFront;
- property MaterialSourceFaceRight: TMaterialSource
- read FMaterialSourceFaceRight write SetMaterialSourceFaceRight;
- property MaterialSourceFaceBack: TMaterialSource
- read FMaterialSourceFaceBack write SetMaterialSourceFaceBack;
- property MaterialSourceFaceLeft: TMaterialSource
- read FMaterialSourceFaceLeft write SetMaterialSourceFaceLeft;
- property MaterialSourceFaceTop: TMaterialSource read FMaterialSourceFaceTop
- write SetMaterialSourceFaceTop;
- property MaterialSourceFaceBottom: TMaterialSource
- read FMaterialSourceFaceBottom write SetMaterialSourceFaceBottom;
- property Width: single read fWidth write SetWidth;
- property Height: single read fHeight write SetHeight;
- property Depth: single read fDepth write SetDepth;
- property FaceFrontVisible: boolean read fFaceFrontVisible
- write SetFaceFrontVisible;
- property FaceRightVisible: boolean read fFaceRightVisible
- write SetFaceRightVisible;
- property FaceBackVisible: boolean read fFaceBackVisible
- write SetFaceBackVisible;
- property FaceLeftVisible: boolean read fFaceLeftVisible
- write SetFaceLeftVisible;
- property FaceTopVisible: boolean read fFaceTopVisible
- write SetFaceTopVisible;
- property FaceBottomVisible: boolean read fFaceBottomVisible
- write SetFaceBottomVisible;
- end;
- procedure Register;
- implementation // -------------------------------------------------------------
- // TGBECube
- constructor TGBECubeExtend.Create(AOwner: TComponent);
- begin
- inherited;
- fWidth := 1;
- fHeight := 1;
- fDepth := 1;
- fSubdivisionsHeight := 1;
- fSubdivisionsWidth := 1;
- fSubdivisionsDepth := 1;
- fFaceFront := TPlane.Create(nil);
- fFaceFront.Parent := self;
- fFaceFront.Stored := false;
- fFaceFront.HitTest := false;
- fFaceFront.Locked := true;
- fFaceRight := TPlane.Create(nil);
- fFaceRight.Parent := self;
- fFaceRight.Stored := false;
- fFaceRight.HitTest := false;
- fFaceRight.Locked := true;
- fFaceBack := TPlane.Create(nil);
- fFaceBack.Parent := self;
- fFaceBack.Stored := false;
- fFaceBack.HitTest := false;
- fFaceBack.Locked := true;
- fFaceLeft := TPlane.Create(nil);
- fFaceLeft.Parent := self;
- fFaceLeft.Stored := false;
- fFaceLeft.HitTest := false;
- fFaceLeft.Locked := true;
- fFaceTop := TPlane.Create(nil);
- fFaceTop.Parent := self;
- fFaceTop.Stored := false;
- fFaceTop.HitTest := false;
- fFaceTop.Locked := true;
- fFaceBottom := TPlane.Create(nil);
- fFaceBottom.Parent := self;
- fFaceBottom.Stored := false;
- fFaceBottom.HitTest := false;
- fFaceBottom.Locked := true;
- fFaceFrontVisible := true;
- fFaceRightVisible := true;
- fFaceBackVisible := true;
- fFaceLeftVisible := true;
- fFaceTopVisible := true;
- fFaceBottomVisible := true;
- DrawCube;
- end;
- destructor TGBECubeExtend.Destroy;
- begin
- DeleteChildren;
- inherited;
- end;
- procedure TGBECubeExtend.DrawCube;
- begin
- fFaceFront.Visible := fFaceFrontVisible;
- if fFaceFrontVisible then
- begin
- fFaceFront.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceFront.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceFront.SubdivisionsHeight := 1;
- fFaceFront.SubdivisionsWidth := 1;
- end;
- fFaceRight.Visible := fFaceRightVisible;
- if fFaceRightVisible then
- begin
- fFaceRight.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceRight.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceRight.SubdivisionsHeight := 1;
- fFaceRight.SubdivisionsWidth := 1;
- end;
- fFaceBack.Visible := fFaceBackVisible;
- if fFaceBackVisible then
- begin
- fFaceBack.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceBack.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceBack.SubdivisionsHeight := 1;
- fFaceBack.SubdivisionsWidth := 1;
- end;
- fFaceLeft.Visible := fFaceLeftVisible;
- if fFaceLeftVisible then
- begin
- fFaceLeft.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceLeft.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceLeft.SubdivisionsHeight := 1;
- fFaceLeft.SubdivisionsWidth := 1;
- end;
- fFaceTop.Visible := fFaceTopVisible;
- if fFaceTopVisible then
- begin
- fFaceTop.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceTop.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceTop.SubdivisionsHeight := 1;
- fFaceTop.SubdivisionsWidth := 1;
- end;
- fFaceBottom.Visible := fFaceBottomVisible;
- if fFaceBottomVisible then
- begin
- fFaceBottom.SubdivisionsHeight := fSubdivisionsHeight;
- fFaceBottom.SubdivisionsWidth := fSubdivisionsWidth;
- end
- else
- begin
- fFaceBottom.SubdivisionsHeight := 1;
- fFaceBottom.SubdivisionsWidth := 1;
- end;
- fFaceFront.Position.X := 0;
- fFaceFront.Position.Y := 0;
- fFaceFront.Position.Z := -Depth * 0.5;
- fFaceRight.Position.X := Width * 0.5;
- fFaceRight.Position.Y := 0;
- fFaceRight.Position.Z := 0;
- fFaceRight.RotationAngle.Y := -90;
- fFaceBack.Position.X := 0;
- fFaceBack.Position.Y := 0;
- fFaceBack.Position.Z := Depth * 0.5;
- fFaceBack.RotationAngle.Y := 180;
- fFaceLeft.Position.X := -Width * 0.5;
- fFaceLeft.Position.Y := 0;
- fFaceLeft.Position.Z := 0;
- fFaceLeft.RotationAngle.Y := 90;
- fFaceTop.Position.X := 0;
- fFaceTop.Position.Y := -Height * 0.5;
- fFaceTop.Position.Z := 0;
- fFaceTop.RotationAngle.X := -90;
- fFaceBottom.Position.X := 0;
- fFaceBottom.Position.Y := Height * 0.5;
- fFaceBottom.Position.Z := 0;
- fFaceBottom.RotationAngle.X := 90;
- end;
- procedure TGBECubeExtend.SetDepth(const Value: single);
- begin
- fDepth := Value;
- fFaceFront.Depth := Value;
- fFaceRight.Width := Value;
- fFaceBack.Depth := Value;
- fFaceLeft.Width := Value;
- fFaceTop.Height := Value;
- fFaceBottom.Height := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceBackVisible(const Value: boolean);
- begin
- fFaceBackVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceBottomVisible(const Value: boolean);
- begin
- fFaceBottomVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceFrontVisible(const Value: boolean);
- begin
- fFaceFrontVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceLeftVisible(const Value: boolean);
- begin
- fFaceLeftVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceRightVisible(const Value: boolean);
- begin
- fFaceRightVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetFaceTopVisible(const Value: boolean);
- begin
- fFaceTopVisible := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetHeight(const Value: single);
- begin
- fHeight := Value;
- fFaceFront.Height := Value;
- fFaceRight.Height := Value;
- fFaceBack.Height := Value;
- fFaceLeft.Height := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceBack
- (const Value: TMaterialSource);
- begin
- FMaterialSourceFaceBack := Value;
- fFaceBack.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceBottom
- (const Value: TMaterialSource);
- begin
- FMaterialSourceFaceBottom := Value;
- fFaceBottom.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceFront
- (const Value: TMaterialSource);
- begin
- FMaterialSourceFaceFront := Value;
- fFaceFront.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceLeft
- (const Value: TMaterialSource);
- begin
- FMaterialSourceFaceLeft := Value;
- fFaceLeft.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceRight
- (const Value: TMaterialSource);
- begin
- FMaterialSourceFaceRight := Value;
- fFaceRight.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetMaterialSourceFaceTop(const Value: TMaterialSource);
- begin
- FMaterialSourceFaceTop := Value;
- fFaceTop.MaterialSource := Value;
- end;
- procedure TGBECubeExtend.SetSubdivisionsDepth(const Value: integer);
- begin
- fSubdivisionsDepth := Value;
- fFaceRight.SubdivisionsWidth := Value;
- fFaceLeft.SubdivisionsWidth := Value;
- fFaceTop.SubdivisionsHeight := Value;
- fFaceBottom.SubdivisionsHeight := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetSubdivisionsHeight(const Value: integer);
- begin
- fSubdivisionsHeight := Value;
- fFaceFront.SubdivisionsHeight := Value;
- fFaceBack.SubdivisionsHeight := Value;
- fFaceLeft.SubdivisionsHeight := Value;
- fFaceRight.SubdivisionsHeight := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetSubdivisionsWidth(const Value: integer);
- begin
- fSubdivisionsWidth := Value;
- fFaceFront.SubdivisionsWidth := Value;
- fFaceBack.SubdivisionsWidth := Value;
- fFaceTop.SubdivisionsWidth := Value;
- fFaceBottom.SubdivisionsWidth := Value;
- DrawCube;
- end;
- procedure TGBECubeExtend.SetWidth(const Value: single);
- begin
- fWidth := Value;
- fFaceFront.Width := Value;
- fFaceRight.Depth := Value;
- fFaceBack.Width := Value;
- fFaceLeft.Depth := Value;
- fFaceTop.Width := Value;
- fFaceBottom.Width := Value;
- DrawCube;
- end;
- // ----------------------------------------------------------------------------
- procedure Register;
- begin
- RegisterComponents('GXScene GBE', [TGBECubeExtend]);
- end;
- end.
|