Naming project/de

Diese Vorlage ist der Leitfaden für ein FreeCAD Entwicklungsprojekt. Sie folgt den Regeln des Getting Things Done (GTD) Prozesses. Die Projekte sind in der Development roadmap/de zusammengefasst.

Zweck und Prinzipien
Dies ist ein Entwicklungs- und Designvorhaben zur Implementierung einer robusten topologischen Benennung in FreeCAD.

Weitere Details zur topologischen Benennung findest Du unter Topologisches Benennungsproblem.

Ergebnis

 * 1) Interface in (Part::TopoShape), um (Namens)Formen und Unterformen (Flächen, Kanten, Eckpunkte) durch eine Zeichenfolge (Sub Elementname wie "Face1") robust zu referenzieren Hier brauchen wir ein Interface, um Part::TopoShape mit allen Informationen zu versorgen, die für die Benennung benötigt werden, z.B. NewShape, zusätzliche Informationen aus einem Algos wie gelöschte Flächen, Modellierungsschritt (für 2.) und ...
 * 2) Assoziation" von Modellierungsschritten mit den resultierenden Gesichtern/Kanten. Im Falle eines großen Modells ist der Anwender verloren, wenn er hunderte von Verrundungen oder Bohrungen hat. Wenn die Flächen/Kanten also wüssten, welcher Modellierungsschritt erzeugt wurde, könnten wir durch einen Doppelklick auf Kante/Fläche das richtige Feature aufrufen!
 * 3) Ein Algorithmus, um die Benennung bei Änderungen in der Modellierungsgeschichte stabil zu halten, wie z.B. das Aufteilen von Kanten/Flächen und das Verschieben von Vertexen [[Datei:Benennungsbeispiel.jpg]]
 * 4) (optional) speicheroptimierte Datenstruktur, um nur geänderte Flächen/Kanten in jeder Modellierungsfunktion zu behalten. Dies wird wichtig, wenn die Modelle größer werden. Es ist nicht effizient, den größten Teil der Form einfach durchzukopieren. Es wäre viel effektiver, die unveränderten Flächen/Kanten zwischen den Features zu teilen und nur die geänderten zu kopieren.

Ideenfindung
Vieles wurde in dem "Robust Reference" Post diskutiert von jrheinlaender.

Weitere

 * Catia V5 and Topology Naming und CAAMmrGenericNaming
 * Naming in OpenCasCade OCAF

Literatur & Aufsätze

 * J Kripac, "A mechanism for persistently naming topological entities in history-based parametric solid models"
 * Beschreibt eine Methode, um die ersten drei Punkte in der Liste zu erledigen. Würde sagen, das ist der Ansatz, der von Catia und OCC-TNaming verwendet wird. Zumindest sieht das Interface gleich aus. Das Papier war nirgendwo herunterzuladen. Ich musste es kaufen. Wenn jemand interessiert ist, kann ich es per E-Mail schicken.


 * Dago AGBODAN, David MARCHEIX and Guy PIERRA, "PERSISTENT NAMING FOR PARAMETRIC MODELS"
 * Interessanter Ansatz über Shell-Grafiken, geht den vierten Punkt der Liste an, indem er nicht veränderte Flächen/Kanten wiederverwendet.


 * Duhwan Mun and Soonhung Han, "Identification of Topological Entities and Naming Mapping for Parametric CAD Model Exchanges"
 * Sehr gute Übersicht und Beispiele


 * und es werden noch einige kommen.....

Zusammenfassung der bisherigen Arbeit
Mit Stand 13. Juni 2016 ist hier eine Zusammenfassung der Arbeiten, die für dieses Projekt geleistet wurden:


 * jrheinlaender produzierte 2012 eine Menge Code, der sich stark auf den Skizzierer Arbeitsbereich verlässt, um "Robuste Referenzen" aufzulösen.
 * Ickby hatte einen Versuch unternommen, einige oder jrheinländische Codes in die moderne Freecad zu integrieren. Dieser Beitrag hat einen Link zu seinem Github-Repo.
 * Im Jahr 2016 hat Ezzieyguywuf jrheinlaenders Thread wiederbelebt und anschließend seinen eigenen gestartet. Ihr könnt ihn hier sehen.
 * ezzieyguywuf hat ein "leichtes" Open Cascade Programm entwickelt, um das Problem der topologischen Benennung zu duplizieren und mögliche Lösungen zu testen. Siehe sein github-Repo hier
 * ezzieyguywuf hat das opencascade TNaming Werkzeugsatz in seinen Testcode integriert und gezeigt, wie dies helfen könnte, einige der Topologischen Benennungsprobleme zu lösen. Siehe das github Repo

Information über TNaming
Siehe hier für einen anständigen Bericht über Ezzieyguywufs Github-Repo. Hier sind einige Highlights:


 * opencascade's TNaming relies upon the TDF_Data data framework.
 * TDF_Data is a key component of the opencascade OCAF thing, but can be used independent of it
 * TDF_Data is essentially a tree in which data is added and then read at a later date
 * Whenever a TNaming_NamedShape attribute is added to a node on the TDF_Data tree, a TNaming_UsedShapes attribute is added to the root of the tree
 * NOTE: this TNaming_UsedShapes attribute is critical to the utility of the TNaming toolkit. It contains a history of all the TopoDS_Shape used during the 'history' of the part
 * TNaming_Builder is used to add information to the TDF_Data tree. It adds a TNaming_NamedShape to a given node on the tree, as well as updating the TNaming_UsedShapes database as necessary.
 * Any time the TopoDS_Shape is changed, it must be logged in the TDF_Data structure
 * Again, TNaming_Builder is used for this
 * See here in the opencascade documentation for a table listing what must be stored in the database. NOTE: this table appears to be incomplete. Some additional testing may need to be done
 * In short, any time the TopoDS_Shape is modified, any modified/generated/deleted features must be logged. For the most part, since we're dealing with solids, this means we must log the modified/generated/deleted Faces on the solid
 * The TNaming_Selector class is used to "select" a feature that is being tracked on the TDF_Data tree
 * a "selected" feature is one that opencascade's TNaming algorithm will maintain a constant reference to, regardless of topological changes

Next actions

 * Defining the scope
 * Python test cases
 * Interface in Part::TopoShape (+ python binding)

Next Steps (as of June 13th, 2016)

 * 1) Determine if opencascade TNaming toolkit fully resolves Topological Naming issue in FreeCAD
 * 2) * What are all instances where Topological Naming is a problem?
 * 3) *What are complex scenarios where this approach will need to work?
 * 4) Incorporate TNaming code into FreeCAD
 * 5) Start with a bare-bones approach, i.e. Make a Cube and a Cylinder, Fuse, Fillet, and then re-size the Cylinder. Fillet should not move
 * 6) Gradually add more functionality
 * 7) Determine if TNaming will be the solution long-term
 * 8) Whether or not TNaming is the long-term solution, figure out a way to 'serialize/deserialize' the data that TNaming uses for persistence across sessions