Python Object Tree?

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
ickby
Veteran
Posts: 3116
Joined: Wed Oct 05, 2011 7:36 am

Re: Python Object Tree?

Post by ickby »

Klar kann ich mir die aus Doc.Objects heraussuchen, aber eine eingebaute C++-Funktion wäre sicherlich flotter
Das stimmt schon, aber soviel ich weis gibt es diese Funktion nicht. Wie der Code des Baumes genau aussieht weis ich nicht, aber im Grunde wird er auch nichts anderes machen.
User avatar
shoogen
Veteran
Posts: 2823
Joined: Thu Dec 01, 2011 5:24 pm

Re: Python Object Tree?

Post by shoogen »

ubit wrote:Klar kann ich mir die aus Doc.Objects heraussuchen, aber eine eingebaute C++-Funktion wäre sicherlich flotter.
Klar, aber dynamisch typisierte, interpretierte Sprachen benutzt man vor allem denn wenn die Programiererzeit teuerer ist als die Laufzeit. Wie oft pro Sekunde musst du dass den in deiner Anwendung machen?

Code: Select all

doc=FreeCAD.ActiveDocument
(obj for obj in doc.Objects if not obj.InList)
die funktion tuple(_) hilft um aus dem generator objekt ein tuple zu machen. Ich habe hier bewusst auf eine List comprehension verzichtet, da Performance ja wichtig ist.
ubit
Posts: 57
Joined: Mon Dec 15, 2014 8:58 am

Re: Python Object Tree?

Post by ubit »

Danke. Ich kann halt kein Python und wurstele mich da im Moment so durch :-(

Ciao, Udo
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Python Object Tree?

Post by bernd »

Danke an Udo fürs hartnäckige hinterfragen und vielen danke an Sebastian und Ickby fürs Erläutern trotz hartnäckigen Nachfragens von Udo.

Sehr interesant, ich verstehe das ganze zwar nur oberflächlig, aber es gibt einen einblick und von Interesse ist das für mich auch ...
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Python Object Tree?

Post by wmayer »

shoogen wrote:Den DAG hab ich auch noch nicht gefunden. Um den aufzufassen muss man wohl erst durch eine Menge boost durch.
Einen groben Überblick vermittelt der DepedencyGraph. (Und auch die Funktion um den zwecks Darstellung zu exportieren)
Also das mit der Wurzel würde ich nicht so ernst nehmen. Soweit ich weiß liegen die Objekte erst mal gleichwertig nebeneinander. Root ist für mich ein Objekt das keine Objekte in seiner InList hat.

PS: wenn du das mit dem Graphen durchblickt hast, könntest du mir helfen issue #1957 zu implementieren. ;)
Document::_rebuildDependencyList zeigt im Prinzip schon wie's geht, baut allerdings die Nachbarschaftsliste über alle Objekte auf. Um nur die Objekte zu berücksichtigen, die als Input für das gegebene Objekt dienen, geht man dessen Out-Liste und rekursiv die Out-Listen dieser Objekt durch und spannt sich somit einen Untergraphen auf. Danach ruft man boost::topological_sort auf und geht die Liste von hinten nach vorne durch wie in Document::recompute()

Bei der Implementierung muss man aber auf eines achten:
Prinzipiell muss damit gerechnet werden, dass der Graph Kreise enthält, was zu einer Endlosrekursion führt. Das ist zwar verboten, kann zur Laufzeit aber nicht effektiv unterbunden werden. Man merkt das erst bei einem Recompute, weil dort die "Not a dag"-Ausnahme geworfen wird.
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Python Object Tree?

Post by microelly2 »

Image

Gibt es außer dem Abhängigkeitsgraphen bereits irgendeine schöne Darstellung der Abhängigkeiten?

Neulich war da die Diskussion in der Wunschliste für 0.16 irgendwas in die Richtung zu machen.

Die Funktionalität für Catia scheint mir vernünftig und lässt sich mit dem QTreeWidget
zumindest nachempfinden. Ein Baum, der auf die Vorfahren zeigt und ein Baum auf die Nachkommen.

http://ps-2.kev009.com/CATIA-B18/cfyugp ... parent.htm

Wenn es bereits was gibt, wäre ich sehr dankbar für einen Hinweis, man muss ja das Rad nicht immer wieder neu erfinden.
ansonsten würde ich da mal anfangen,
ich brauche diese Abhängigkeitsdarstellung für die Beschreibung von Arbeitsabläufen beim Design.
Post Reply