![]() |
3D-Objekt / Dummy
hey ich benutze folgenden Code (zumindest so ähnlich):
Code:
Meine Frage: ich möchte ein OnClick Ereignis haben. aber mit dem Dummy1.onclick funktioniert das nicht.. Ich möchte auf meine (z.B.) TSphere klicken können. Ideen?:/
procedure TF_Main.bnAdd3DControlClick(Sender: TObject);
var s: string; C3D: TControl3D; begin if cb3DObjNames.ItemIndex <> -1 then begin s := cb3DObjNames.Items[cb3DObjNames.ItemIndex]; if s = 'Sphere' then begin C3D := TControl3D (TSphere.Create(Dummy1)); TSphere (C3D).SubdivisionsAxes := 50; TSphere (C3D).SubdivisionsHeight := 50; end; if s = 'Cube' then begin C3D := TControl3D (TCube.Create(Dummy1)); end; if s = 'Cone' then begin C3D := TControl3D (TCone.Create(Dummy1)); TCone (C3D).SubdivisionsAxes := 50; TCone (C3D).SubdivisionsHeight := 50; end; C3D.Name := C3D.ClassName + Dummy1.ChildrenCount.ToString; C3d.Parent := Dummy1; C3D.Width := 2; C3D.Height := 2; C3D.Depth := 2; C3d.Visible := True; C3D.Position.X := -2; // Set Eventhandlers to react on User-Actions C3D.OnMouseDown := Control3DMouseDown; C3D.OnMouseMove := Control3DMouseMove; C3D.OnMouseUp := Control3DMouseUp; // Add created 3D-Object to List, to select programaticaly at runtime or by user cbCreated3DObjects.Items.AddObject(c3D.name, C3D); C3d.BringToFront; Viewport3D1.Repaint; end; end; |
AW: 3D-Objekt / Dummy
Hallo derseitzer,
eigentlich hast Du die Lösung selbst schon erarbeitet. Wenn Du in Deiner Prozedur noch ergänzt:
Delphi-Quellcode:
C3D.OnClick := Klick;
Als nächstes erstellst Du die Prozedur Klick:
Delphi-Quellcode:
und deklarierst sie im Interface-Abschnitt (beispielsweise im Private-Abschnitt)
procedure TF_Main.Klick(Sender:TObject);
begin showmessage('Klick'); end; VG ZYL |
AW: 3D-Objekt / Dummy
Vielen Dank, nun stehe ich vor einem weiteren problem:
ich drehe mithilfe meiner Sensoren eine Sphere.. mit der x koordinate drehe ich x und mit y eben y. Problem ist schwierig zu erklären aber ich gebe mein bestes: wenn ich nun z.b. die y koordinate erhöhe und sich meine tsphere nach oben dreht und ich danach die x koordinate ändere, dreht sich die sphere nicht dort, wo ich eben schaue, sondern eben wo ganz anders (nämlich dort wo am anfang meine x achse liegt). Meine achsen drehen sich also nicht mit.. ich dachte zuerst, das ist ja eigentlich kein Problem, ich müsste nur die kamera position ändern oder den rotationangle von der camera aber bei beidem funktioniert einfach garnichts... so als könnte ich die kamera garnicht bewegen :?: Edit @ZYLAGON soganz funktioniert das nicht.. wenn ich nun Klicke stürzt meine App ab.. :/ |
AW: 3D-Objekt / Dummy
Hallo derseitzer,
was den Code betrifft, habe ich ihn gestern getestet und funktioniert auch bei mir. Hier der komplette Code:
Delphi-Quellcode:
unit Temp;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Math.Vectors, FMX.Controls3D, FMX.Objects3D, FMX.Viewport3D, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Viewport3D1: TViewport3D; Dummy1: TDummy; bnAdd3DControl: TButton; procedure bnAdd3DControlClick(Sender: TObject); private { Private-Deklarationen } procedure Klick(Sender:TObject); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Klick(Sender:TObject); begin showmessage('Klick'); end; procedure TForm1.bnAdd3DControlClick(Sender: TObject); var s: string; C3D: TControl3D; begin s := 'Sphere'; if s = 'Sphere' then begin C3D := TControl3D (TSphere.Create(Dummy1)); TSphere (C3D).SubdivisionsAxes := 50; TSphere (C3D).SubdivisionsHeight := 50; end; if s = 'Cube' then begin C3D := TControl3D (TCube.Create(Dummy1)); end; if s = 'Cone' then begin C3D := TControl3D (TCone.Create(Dummy1)); TCone (C3D).SubdivisionsAxes := 50; TCone (C3D).SubdivisionsHeight := 50; end; C3D.Name := C3D.ClassName + Dummy1.ChildrenCount.ToString; C3d.Parent := Dummy1; C3D.Width := 2; C3D.Height := 2; C3D.Depth := 2; C3d.Visible := True; C3D.Position.X := -2; // Set Eventhandlers to react on User-Actions {C3D.OnMouseDown := Control3DMouseDown; C3D.OnMouseMove := Control3DMouseMove; C3D.OnMouseUp := Control3DMouseUp;} C3D.OnClick := Klick; C3d.BringToFront; Viewport3D1.Repaint; end; end. Zu der Problematik mit den Sensoren kann ich leider nichts beitragen, da ich diese noch nicht getestet habe. VG ZYL |
AW: 3D-Objekt / Dummy
Sehr sehr komisch.. hab delphi neu gestartet und den code rausgenommen und wieder eingefügt nun funktioniert es.. danke :oops:
kurze Frage: Für was steht eigentlich dieser "SubdivionsAxes:=50" Befehl?.. Nun eben noch dieses "Drehproblem", das eben dadurch entsteht das die Axen sich mitdrehen und nicht für den Zuschauer statisch bleiben.. Weiß nicht inwiefern das lösbar ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz