AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

3D-Objekt / Dummy

Ein Thema von derseitzer · begonnen am 6. Jun 2017 · letzter Beitrag vom 8. Jun 2017
Antwort Antwort
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#1

3D-Objekt / Dummy

  Alt 6. Jun 2017, 17:27
hey ich benutze folgenden Code (zumindest so ähnlich):
Code:
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;
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?:/
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: 3D-Objekt / Dummy

  Alt 7. Jun 2017, 19:27
Hallo derseitzer,

eigentlich hast Du die Lösung selbst schon erarbeitet.
Wenn Du in Deiner Prozedur noch ergänzt:
C3D.OnClick := Klick;

Als nächstes erstellst Du die Prozedur Klick:
Delphi-Quellcode:
procedure TF_Main.Klick(Sender:TObject);
begin
  showmessage('Klick');
end;
und deklarierst sie im Interface-Abschnitt (beispielsweise im Private-Abschnitt)

VG
ZYL
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: 3D-Objekt / Dummy

  Alt 8. Jun 2017, 17:06
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.. :/

Geändert von derseitzer ( 8. Jun 2017 um 17:18 Uhr)
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: 3D-Objekt / Dummy

  Alt 8. Jun 2017, 18:21
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 = 'Spherethen begin
      C3D := TControl3D (TSphere.Create(Dummy1));
      TSphere (C3D).SubdivisionsAxes := 50;
      TSphere (C3D).SubdivisionsHeight := 50;
    end;

    if s = 'Cubethen begin
      C3D := TControl3D (TCube.Create(Dummy1));
    end;

    if s = 'Conethen 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
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: 3D-Objekt / Dummy

  Alt 8. Jun 2017, 21:33
Sehr sehr komisch.. hab delphi neu gestartet und den code rausgenommen und wieder eingefügt nun funktioniert es.. danke
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz