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
Posts: 2984
Joined: Wed Oct 05, 2011 7:36 am

Re: Python Object Tree?

Postby ickby » Thu Feb 19, 2015 12:44 pm

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
Posts: 2823
Joined: Thu Dec 01, 2011 5:24 pm

Re: Python Object Tree?

Postby shoogen » Thu Feb 19, 2015 1:21 pm

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?

Postby ubit » Thu Feb 19, 2015 1:35 pm

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

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

Re: Python Object Tree?

Postby bernd » Thu Feb 19, 2015 6:10 pm

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
Site Admin
Posts: 16645
Joined: Thu Feb 19, 2009 10:32 am

Re: Python Object Tree?

Postby wmayer » Sat Feb 21, 2015 4:26 pm

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
Posts: 4690
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Python Object Tree?

Postby microelly2 » Wed May 27, 2015 7:12 pm

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.