Naming project/it

Questo modello contiene le linea guida per il progetto di sviluppo di FreeCAD. Esso segue le regole della metodologia | Getting things done. I progetti sono raccolti nel Piano di sviluppo (Development roadmap).

Finalità e principi
Si tratta di un lavoro di sviluppo e progettazione per implementare un sistema di denominazione topologica robusta (persistente e coerente) in FreeCAD.

Risultati

 * 1) Interfaccia in (Part::TopoShape) per referenziare in modo robusto (nome) le forme e le sotto-forme (facce, bordi, vertici) attraverso una stringa (nome dei sotto-elementi del tipo "Face1"). Per fare questo bisogna fornire una interfaccia per Part::TopoShape con tutte le informazioni necessarie per produrre la Denimonazione (Naming), ad esempio, NewShape, con le informazioni addizionali di un algoritmo come le facce cancellate, i passaggi della modellazione (es. suddivisione in 2) e ......


 * 1) Associazione dei passaggi della modellazione con le facce o i bordi risultanti. Nel caso di un grande modello l'utente si perde se ha a che fare con centinaia di raccordi o di fori. Per questo motivo, se le facce o i bordi ricordano quale fase della modellazione le ha create, è possibile implementare che un doppio click sul bordo o sulla faccia apra l'operazione corrispondente!


 * 1) Algoritmo per mantenere coerente la denominazione nello storico della modellazione durante le modifiche, come la suddivisione di bordi o di facce e il movimento dei vertici [[File:NamingExample.jpg]]


 * 1) (opzional) Ottimizzare la struttura dei dati in memoria  per mantenere in memoria solo le facce o i bordi modificati nelle operazioni di modellazione. Questo diventa importante quando i modelli diventano grandi. Non è efficace copiare la maggior parte della forma. E' molto più efficace condividere le facce o i bordi rimasti invariati nelle operazioni (Features) e copiare solo quello che viene modificato.

Riflessioni
Si è discusso molto nel post "Robust Reference" di jrheinlaender.

Altro

 * Catia V5 and Topology Naming e CAAMmrGenericNaming


 * Naming in OpenCasCade OCAF

Letteratura & documentazione

 * J Kripac, "Un meccanismo per la denominazione persistente delle entità topologiche costantemente basata sullo storico dei modelli solidi parametrici"
 * Descrive un metodo per realizzare i primi tre punti della lista. Direi che è l'approccio utilizzato da Catia e OCC-TNaming. Almeno l'interfaccia sembra la stessa. Il documento non è disponibile per essere scaricato. Ho dovuto comprarlo. Se qualcuno è interessato posso inviarlo via e-mail.


 * Dago AGBODAN, David MARCHEIX e Guy PIERRA, "Denominazione persistente per modelli parametrici"
 * Approccio interessante via shell-grafica, affronta il quarto punto della lista per il riutilizzo delle facce o dei bordi non modificati.


 * Duhwan Mun and Soonhung Han, "Identification of Topological Entities and Naming Mapping for Parametric CAD Model Exchanges"
 * Panoramica molto buona e esempi


 * e alcune altre da aggiungere....

Summary of Work To-Date
As of June 13th, 2016, here is a summary of the work that has been done for this project:


 * jrheinlaender produced a lot of code in 2012 that relies heavily on the Sketch workbench for resolving "Robust References"
 * ickby had taken a stab at incorporating some or jrheinlaender's code into modern freecad. This post has a link to his github repo.
 * In 2016, ezzieyguywuf revived jrheinlaender's thread and subsequently started his own. You can see it here
 * ezzieyguywuf developed a "light weight" opencascade program for duplicating the Topological Naming issue and for testing potential solutions. See his github repo here
 * ezzieyguywuf incorporated the opencascade TNaming toolkit into his test code, and showed how this could help resolve some of the Topological Naming issues. See the github repo

Organizzazione

 * 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

Azioni successive

 * Definire il campo di applicazione
 * Testare in Python
 * Interfaccia in Part::TopoShape (+ legami con Python)

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