Seite 1 von 1

Curves oder Faces in Display löschen?

Verfasst: Freitag 7. Juni 2013, 12:25
von Cirah
Vorab ich bin noch ein ziemlicher Neuling in Sachen Python.
Ich bitte daher um etwas Nachsicht, sollte meine Frage im falschen Forum gepostet sein, und oder sehr simpel für einige von euch zu lösen sein.

Zu meinem Problem:
Ich lese eine Stl Datei ein. Bearbeite und analysiere diese.
Nun zeichne ich dieses mit Hilfe von "curves" zuerst die Umrandungen des Objektes und dann später, je nach Auswahl des Benutzers, auch noch die Flächen, mit Hilfe von "faces".
Ich hoffe soweit erstmal verständlich.

Nun möchte ich dem Benutzer die Option geben einzelne Flächen auszublenden. Hierfür habe ich eine Auswahl List in der die Flächen ausgewählt werden können.
Möchte der Benutzer nun also die Vordere Fläche eines Quaders nicht sehen, so kann er diese Auswählen bzw. nicht mehr markieren.

Programmtechnisch würde ich nun einfach alle "faces" löschen. Und nur noch die gewollten nachzeichen. Ich habe es so versucht:

Code: Alles auswählen

for obj in scene_stl2.objects:
     if obj.__class__ == faces:
             del obj
Leider werden hiernach immer noch alle Oberflächen angezeigt. Ein erneuter Aufruf der Objekte zeigt auch, das keines der "faces" gelöscht wurde.

Ist das was ich vorhabe überhaupt möglich ?
Habe ich nur einen simplen Denkfehler ?!

Über Hilfe würde ich mich sehr freuen und danke schonmal im Voraus

Re: Curves oder Faces in Display löschen?

Verfasst: Freitag 7. Juni 2013, 12:59
von BlackJack
@Cirah: ``del name`` löscht kein Objekt sondern den Namen. Stell Dir mal vor was passieren würde wenn man tatsächlich Objekte löschen könnte. Wenn das noch irgendwo anders an einen Namen gebunden oder in einer Datenstruktur gespeichert ist, wie das ja in Deinem Fall auch so ist, was sollte denn dann bei einem Zugriff auf das gelöschte Objekt passieren?

Du musst das Objekt aus der Datenstruktur entfernen. Wie man das macht hängt von der Datenstruktur ab, was die dafür an Methoden zur Verfügung stellt.

Auf „magische” Attribute sollte man nur zugreifen wenn es keine andere Möglichkeit gibt. Statt also direkt auf `__class__` zuzugreifen, sollte man mit `isinstance()` arbeiten.

Re: Curves oder Faces in Display löschen?

Verfasst: Freitag 7. Juni 2013, 13:30
von Cirah
Hallo BlackJack,
danke für die schnelle Antwort.
Den oben verlinkten Code, hatte ich auch nur im Internet gefunden. Und es hörte sich so verlockend an, einfach mit "del" etwas aus dem Grafik Fenster zu löschen.
Aber natürlich ergibt es Sinn was du sagst.
Auch den Zugriff auf __class__ könnte ich komplett weglassen, wenn ich das Display Fenster irgendwie reseten könnte. Da ich dann einfach die noch gewünschten Oberflächen neu zeichnen würde.

Das hier ist eigentlich das einzige was ich bislang in dem "Grafik"/Display Fenster mache
(wobei curve und face natürlich in einer Schleife mehrfach ausgeführt werden):

Code: Alles auswählen

scene_stl2 = display(title='Darstellung der Analyse der stl-Datei', background=color.white,exit=False)
scene_stl2.select()
curve(pos=[vector1,vector2],color=color.magenta,radius=0.25)
faces(pos=[vector1,vector2,vector3],color=color.magenta).make_twosided()
Kann ich hieraus die Datenstruktur erkennen ?! Und herausbekommen mit welcher Methode ich einzelne Curves/Faces lösche?

Am einfachsten wäre es sicherlich wenn es eine Funktion scene_stl2.reset() geben würde. Das scheint allerdings nicht der Fall zu sein.

Re: Curves oder Faces in Display löschen?

Verfasst: Freitag 7. Juni 2013, 14:31
von BlackJack
@Cirah: Daraus kann man die Datenstruktur gar nicht erkennen. Es sei denn man rät zufällig richtig womit Du da überhaupt arbeitest. Wo kommen `display()`, `curves()` und `faces()`, und `color` denn her? Aus der Standardbibliothek sind die nicht.