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
- 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 ......
- 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!
- 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
- (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
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.
- Approccio interessante via shell-grafica, affronta il quarto punto della lista per il riutilizzo delle facce o dei bordi non modificati.
- 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
Organizzazione
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)
- Determinare se opencascade TNaming toolkit risolve completamente il problema della Denominazione Topologica in FreeCAD
- Quali sono tutti i casi in cui la Denominazione Topologica è un problema?
- Quali sono gli scenari complessi in cui questo approccio dovrà lavorare?
- Incorporare il codice di TNaming in FreeCAD
- 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
- Gradualmente aggiungere ulteriori funzionalità
- Determinare se TNaming è la soluzione a lungo termine
- 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