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 le forme (nome) 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....

Sintesi del lavoro fino ad oggi
Questa è la sintesi del lavoro che è stato fatto per questo progetto fino al 13 giugno 2016:


 * jrheinlaender nel 2012 ha prodotto un sacco di codice basato essenzialmente sull'ambiente Schizzo per risolvere il "Riferimento Robusto"
 * ickby ha provato a incorporare alcuni codici di jrheinlaender in FreeCAD moderno. Questo post ha un link al suo repo GitHub.
 * Nel 2016, ezzieyguywuf ha rianimato il progetto di jrheinlaender e, successivamente, ha iniziato il suo. E' visibile qui
 * ezzieyguywuf ha messo a punto un programma di opencascade "leggero" per duplicare il problema della Denominazione Topologica e per testare le possibili soluzioni. Vedere il suo repo github qui
 * ezzieyguywuf ha incorporato il TNaming toolkit opencascade nel suo codice di test, e ha mostrato come questo potrebbe contribuire a risolvere alcuni dei problemi di Denominazione Topologica. Vedere il repo github

Informazioni su TNaming
Vedere qui per un dignitoso rapporto sul repo GitHub di ezzieyguywuf. Ecco alcuni punti salienti:


 * 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)

Passi successivi (a partire dal 13 giugno 2016)

 * 1) Determinare se opencascade TNaming toolkit risolve completamente il problema della Denominazione Topologica in FreeCAD
 * 2) * Quali sono tutti i casi in cui la Denominazione Topologica è un problema?
 * 3) *Quali sono gli scenari complessi in cui questo approccio dovrà lavorare?
 * 4) Incorporare il codice di TNaming in FreeCAD
 * 5) Iniziare con un approccio essenziale, vale a dire creare un Cubo e un Cilindro, Fonderli, fare un Raccordo, e poi ridimensionare il cilindro. Il raccordo non deve muoversi
 * 6) Gradualmente aggiungere ulteriori funzionalità
 * 7) Determinare se TNaming è la soluzione a lungo termine
 * 8) O se TNaming non è la soluzione a lungo termine, trovare un modo per 'serializzare / deserializzare' i dati che TNaming utilizza per la persistenza tra le sessioni