AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Alle Objekte in einer GLScene löschen?
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Objekte in einer GLScene löschen?

Ein Thema von Pyr0cracker · begonnen am 11. Jan 2004 · letzter Beitrag vom 25. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pyr0cracker
Pyr0cracker

Registriert seit: 15. Nov 2002
Ort: Norddeutschland
232 Beiträge
 
Delphi 7 Personal
 
#1

Alle Objekte in einer GLScene löschen?

  Alt 11. Jan 2004, 03:46
Moin!
Ich möchte gerne alle Objekte in meiner GLScene löschen.
Wie kann ich das machen? hab schon quelltext undhilfen durchgesucht...

Danke schonmal,
Dorian Vasco
dorianvasco.de
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#2

Re: Alle Objekte in einer GLScene löschen?

  Alt 11. Jan 2004, 10:53
Tag

Normales OpenGL benutzen, da geht das viel einfacher

Gruß
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 12:08
Ich möchte das hier nochmal aufleben lassen. Auch ich möchte das versuchen, allerdings scheitere ich. Aus irgend einem Grund geht
Delphi-Quellcode:
  for x:=0 to Form9.ComponentCount-1 do
    if Form9.Components[x] is TGLCube then
      TGLCube(Form9.Components[x]).Free;
nicht.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 12:36
"Geht nicht", toll . Woran scheitert es denn? Wenn die Würfel gar nicht in der Collection enthalten sind, hast du wohl vergessen, bei deren Erstellung die Form als Owner anzugeben.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 13:21
Zitat von inherited:
Aus irgend einem Grund geht
Delphi-Quellcode:
  for x:=0 to Form9.ComponentCount-1 do
    if Form9.Components[x] is TGLCube then
      TGLCube(Form9.Components[x]).Free;
nicht.
Hi,
Irgendeiner ist schon etwas ungenau. Es liegt eigentlich nur daran, dass du hier etwas frei geben möchtest, was noch benutzt wird. Damit du etwas in GLScene ohne Probleme freigeben kannst, solltest du erstmal dafür sorgen, dass es aus der Szene entfernt wird. Dazu gab es eine Methode (die ich nicht im Kopf habe). Hab auch gerade kein GLScene da um nach zu schauen (und keine Lust es jetzt zu installieren). Die Methode erklärt sich einfach mal von selbst. Wenn du Objekte erzeugst und anzeigst, dann glaube ich wird das GLScene Objekt mit insertNewChild oder sowas aufgerufen (ist echt lange her), ganz analog gab es sowas wie removeChild. Hier gibt es auch die Methode removeAll... musst du mal schauen. Wenn man jedenfalls erst aus der Szene entfernt kann man die ohne Probleme frei geben!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 13:41
Sorry, es wird nicht removed, die Cubes bleiben.
Hab es jetzt so probiert, da removeall nicht existiert
Delphi-Quellcode:
  for x:=0 to GLScene1.Objects.Count-1 do
    if GLScene1.Objects[x] is TGLCube then
      GLScene1.Objects[x].DeleteChildren;
Doch dann werden die auch nicht removed
€dit: ohne die überprüfung     if GLScene1.Objects[x] is TGLCube then werden offenbar alle Objekte gelöscht, allerdings auch die Camera. wie kann ich das verhindern?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 14:08
Ah ja, da ist ein kleiner Fehler drin. GLScene.Objects gibt dir immer ein Wurzelelement zurück. Dieses enthält alle BaseSceneObjects (wenn ich mich richtig erinner), die wiederum als Elternteil für weitere BaseSceneObjects dienen können.
Versuch es mal mit etwas wie:
Delphi-Quellcode:
var buffer : TGLBaseSceneObject;
begin
  if GLScene.Objects.Count > 0 then
  begin
    for i := 0 to GLScene.Objects.Count - 1 do
    begin
      if GLScene.Objects.Children[i] is TGLCube then
      begin
        buffer := GLScene.Objects.Children[i];
        GLScene.Objects.Remove(buffer);
        buffer.Free;
      end; // if GLScene.Objects.Children[i] is TGLCube
    end; // for i := 0 to GLScene.Objects.Count - 1
  end; // if GLScene.Objects.Count > 0
end;
Also so ungefähr, irgendwie konnte man glaube ich noch sagen, was mit den Kindern von einem Objekt geschehen soll, wenn dieses entfernt wird. Musst du ggf. anpassen, ist leider ungetestet. Sitze gerade vor einem sehr langsamen Rechner, da würde es wirklich lange dauern Delphi mit GLScene zum laufen zu bekommen.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 14:47
"Invalide Pointer Operation"
Tut mir leid, aber so gehts nicht?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#9

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 14:56
Hier die funktion um alle glscene objekte aufzulisten dannnach noch die liste abarbeiten und die objekte freigeben, am besten mit findchild und einer abfrage auf <>nil.
Delphi-Quellcode:
type
  TElement = class(TObject)
    Node : TTreeNode;
    Obj : TGLBaseSceneObject;
    constructor create(Node : TTreeNode; Obj : TGLBaseSceneObject);
  end;

constructor TElement.create(Node : TTreeNode; Obj : TGLBaseSceneObject);
begin
  self.Node := Node;
  self.Obj := Obj;
end;

function scenetolist: tstringlist;
var i : Integer;
    List : TObjectList;
    element : TElement;
    buffer : TTreeNode;
begin
  result:=tstringlist.Create;
  List := TObjectList.Create;
  if root.Count > 0 then
    begin
      for i := 0 to root.Count - 1 do
        begin
              List.Add(TElement.Create(nil, root.Children[i]));
        end;
    end;

  while List.Count > 0 do
    begin
      element := TElement(List.Extract(List.First));
      result.Add(element.Obj.Name);
      if element.Obj.Count > 0 then
        begin
          for i := 0 to element.Obj.Count - 1 do
            begin
                  List.Add(TElement.Create(nil, element.Obj.Children[i]));
            end;
        end;
      element.Free;
    end;
end;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: Alle Objekte in einer GLScene löschen?

  Alt 14. Aug 2006, 14:57
Hüstel, na ja, ist halt auch ein kluger Fehler, was für Profis so zu sagen. Dreh einfach mal die Schleifenvariable um, also von GLScene.Objects.Count - 1 downto 0 ... da würde ich sagen könnte ein solcher Fehler her kommen, wenn man etwas entfernt verschiebt sich natürlich die Position aller Elemente!

Dann sollte es aber auch klappen, der Rest müsste schon stimmen, denke ich.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:34 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