Alcune letture sulle unità di misura:
# -- alcuni esempi del sistema di traduzione di unità di FreeCAD -- # creare un collegamento per gli esempi FreeCAD.Units.parseQuantity # 10 meters in internal numbers tu('10 m') # doing math tu('3/8 in') # combined stuff tu('100 km/h') # transfer to other units tu('100 km/h')/tu('m/s') # derived units (Ohm) tu('m^2*kg*s^-3*A^-2') # or tu('(m^2*kg)/(A^2*s^3)') # angles tu('2*pi rad') # full circle # as gon tu('2*pi rad') / tu('gon') # more imperial tu('1ft+(3+7/16)in') # or tu('1\'(3+7/16)"') # the ' we have to escape because of python # trigonometry tu('sin(pi)') # Using translated units as parameters, this command will create a 50.8mm x 20mm x 10mm box b = Part.makeBox(tu('2in'),tu('2m')/100,10)
Queste sono le unità finora definite in FreeCAD. È facile aggiungere una nuova unità definita dall'utente. La definizione si trova in http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Base/UnitsApi.l?view=markup.
Lunghezza metrica
"mm" 1.0; // millimetro (lunghezza standard interna) "m" 1000.0; // metro "cm" 10.0; // centimetro "dm" 100.0; // decimetro "km" 1000000.0; // kilometro
Lunghezza Imperiale
"in" "\"" 25.4; // inch "ft" "'" 304.8; // foot "th" 0.0254; // thou "yr" 914.4; // yard
Massa metrica
"kg" 1.0; // kilogrammo (massa standard interna) "g" 0.001; // grammo "mg" 0.000001; // milligrammo "t" 1000.0; // tonnellata
Massa Imperiale
"lb" 0.45359237; // pound "oz" 0.45359237; // ounce "st" 6.35029318; // Stone "cwt" 50.80234544;// hundredweights
Angolo
"deg" 1.0; // gradi (angolo standard interno) "rad" 180/M_PI; // radianti "gon" 360.0/400.0;// gon
Tempo
"s" 1.0; // secondo (tempo standard interno) "min" 60.0; // minuto "h" 3600.0; // ora
Altro del SI
"A" 1.0; // Ampere (internal standard electric current) "K" 1.0; // Kelvin (internal standard thermodynamic temperature) "cd" 1.0; // Candela (internal standard luminous intensity) "mol" 1.0; // Mole (internal standard amount of substance)
Volume metrico
"µl" 1.0; // microliter mm^3(volume standard derivato) "ml" 1000.0; // milliliter cm^3 "l" 1000000.0; // Liter dm^3
Nelle sezioni successive, sviluppando il concetto di sistema di unità, si propone un sistema di gestione delle unità di misura attivato nel corso dell'esecuzione di una istanza di FreeCAD. Definire tale nuovo concetto offre il vantaggio di lavorare più facilmente con tanti tipi di unità fisiche, quante si vuole, anche con quelle create dall'utente, senza aumentare la complessità di gestione delle unità, né per l'utente, né per gli sviluppatori di FreeCAD.
In breve, gli eventi di scalatura delle unità sono localizzati con precisione, e realizzati in modo globale.
Il raggiungimento di tale flessibilità è necessario specialmente quando si passa a lavorare con le proprietà dei materiali che possono avere unità molto diverse e quindi difficili da gestire manualmente una ad una.
Il ragionamento proposto permette di gestire le unità come descritto nella Guida per l'uso del Sistema Internazionale delle unità di misura (SI) e nel Sistema internazionale delle unità di misura (SI), entrambi documenti del NIST.
In questa proposta, la prima analisi nella sezione Riflessioni riguarda i possibili contesti per i quali è utile la gestione delle unità.
Nella sezione Organizzazione è presentato il modello di dati prescelto per realizzare la gestione delle unità, sulla base di 3 oggetti, la unità, il dizionario delle unità, e il sistema delle unità. Infine, è anche presentata una breve API di un quarto oggetto chiamato gestore delle unità.
Grazie a questa estensione, si mira ad agevolare la scalatura della unità che può verificarsi tra i differenti settori di lavoro di una azienda. Ad esempio, i disegni tecnici possono essere realizzati nel sistema di unità standard, mentre la modellazione per elementi finiti può essere gestita in un sistema di unità più adatto per questo scopo.
Con questa estensione lo scambio di dati tra questi due tipi di attività diventa più facile.
In questa sezione sono evidenziati i contesti (casi) di uso del sistema di gestione delle unità. Partendo da questi contesti, dopo siamo in grado di definire le loro specifiche tecniche.
Essenzialmente sono considerati 2 contesti, come esempio.
Questo caso probabilmente è quello più frequente. Si riceve un file contenente ad esempio un modello geometrico, o descrivente un materiale con un bel po' di proprietà. Il modello geometrico è espresso in metri, oppure le proprietà del materiale sono espresse secondo il sistema internazionale di unità di misura.
Peccato ...
Sei un esperto di modellazione di elementi finiti (FE modelling), e di solito lavori con i millimetri per la lunghezza, megapascal per la pressione, tonnellate per la massa ...
In questo contesto, la gestione delle unità è necessaria per scalare i dati da un sistema di unità iniziale definito nel file di input a un diverso sistema di unità definito dall'utente.
In questo caso, si può essere allo stesso tempo, la persona che realizza un disegno, e anche chi gestirà la modellazione per elementi finiti. Analogamente al caso precedente, i sistemi di unità di misura per questi due lavori non sono gli stessi, ed è necessario cambiare il sistema di unità iniziale in quello preferito durante l'esecuzione.
Nella sezione Riflessioni sono stati presentati due contesti in merito a quando si utilizza la scalatura delle unità. Devono essere evidenziati alcuni aspetti di questi due contesti.
Il sistema proposto si basa su un assunto primario: l'utente sta lavorando in un sistema di unità coerenti. Ad esempio, questo significa che, se l'utente esprime la lunghezza in millimetri, necessariamente le aree saranno espresse in termini di millimetri quadrati e non in metri quadrati. Questa è la Ipotesi numero uno.
In conseguenza della Ipotesi numero uno, è possibile e pertinente definire un sistema di unità. Un sistema di unità si applica a:
Secondo la Guida per l'uso del Sistema Internazionale di unità di misura (SI) del NIST, ci sono 7 unità fisiche di base. Abbiamo scelto di formulare un sistema di unità in termini di questi 7 unità di base.
Quando si lavora all'interno di un'istanza di FreeCAD, l'utente deve quindi definire il sistema di unità base con cui sta lavorando prima di decidere di passare a un altro sistema di unità, o prima di importare dati da un file di input.
Questo sistema di unità si applica fino a che l'utente non decide di cambiarlo. Se lo fà, tutti i dati con dimensioni vengono scalati.
Considerando l'Ipotesi numero uno, si presume che tutti i dati che l'utente inserirà manualmente in FreeCAD saranno coerenti con il sistema di unità prescelto.
Il vantaggio di lavorare con un sistema di unità definito a livello di un'istanza in esecuzione in FreeCAD, o a livello di file di dati (al posto delle singole unità che sono definite a livello di dati) consiste nella notevole semplificazione della gestione delle unità.
Ecco alcuni esempi di sistemi di unità.
Le Unità derivate sono create mediante la combinazione delle unità di base. Ad esempio, un'accelerazione (m/s2) unisce contemporaneamente la lunghezza e il tempo. Un quadro interessante che presenta le relazioni tra le unità base e le unità derivate si può vedere in questo documento, anche esso del NIST.
Grazie alla definizione del sistema di unità, l'utente può lavorare con qualsiasi tipo di unità derivata, senza la necessità che gli sviluppatori di FreeCAD le prevedano prima.
Secondo il Sistema Internazionale delle unità di misura (SI), i simboli per specificare una unità sono ufficialmente approvati. Da questo possono essere evidenziate due conseguenze.
Per superare queste limitazioni e rimanere flessibili, il sistema proposto privilegia l'impiego di unità di grandezze (magnitudini) invece dei simboli di unità, che rimangono comunque disponibili per motivi di ergonomia.
Sono presentati i tre oggetti principali del sistema di gestione di unità di misura , vale a dire l'unità, il dizionario delle unità e il sistema di unità.
Come premessa, è importante sottolineare che un oggetto unità di per sé indica solo una dimensione (grandezza fisica) come lunghezza, massa, tempo ... Esso non specifica una grandezza (unità di misura) come metro, millimetro, chilometri ... Questa ultima informazione è specificata attraverso il sistema di unità.
Stringa obbligatoria che indica la dimensione (grandezza fisica) dell'unità. La dimensione delle 7 unità di base (le 7 grandezze fisiche di base) sono indicate di seguito (dalla Guide for the Use of the International System of Units (SI)) (Guida per l'uso del Sistema Internazionale di unità di misura).
L'attributo Dimension permette di identificare l'unità. Due unità non possono condividere la stessa dimensione.
E' un gruppo di 7 cifre intere obbligatorie (numero delle unità di misura di base) che definisce di quale unità si tratta. La firma delle 7 unità di base sono:
Con queste 7 unità siamo poi in grado di esprimere tutte le unità di misura derivate definite nella Guida per l'uso del Sistema Internazionale di unità di misura (SI) e anche di crearne di nuove secondo le esigenze personali, quali ad esempio:
Signature è l'attributo grazie al quale la scalatura delle unità può essere realizzata in modo generale.
Insieme di [numero reale, stringa] (rappresentante [grandezza, simbolo]) che elenca tutti i simboli noti a FreeCAD. Grazie a questo insieme, l'API di scalatura delle unità diventa più ergonomica perché i simboli sono collegati alle grandezze correlate .
Questo insieme (array) può essere esteso quanto necessario.
Ad esempio, la lista dei simboli della unità di misura di lunghezza, e le loro relative grandezze è:
[1e+12,"Tm"],[1e+09,"Gm"],[1e+06,"Mm"], [1e+03,"km"],[1e+02,"hm"],[1e+01,"dam"], [1e+00,"m"],[1e-01,"dm"],[1e-02,"cm"], [1e-03,"mm"],[1e-06,"µm"],[1e-09,"nm"], [1e-12,"pm"],[1e-15,"fm"]
I simboli standard possono essere trovati sul sito web del NIST e da pag. 26 a pag. 23 e a pag. 32 (tonnellata metrica o tonnellata) di The International System of Units (SI).
Tutte le unità di misura disponibili in FreeCAD, e anche quelle nuove create dall'utente, devono essere conservate nel dizionario delle unità, che è un file XML (file di configurazione di FreeCAD), in modo da poter essere recuperate quando è necessario, ad esempio quando si realizza la scalatura delle unità.
Insieme delle unità, contenute nel dizionario delle unità.
Un sistema di unità è l'oggetto che permette all'utente di definire la grandezza dell'unità corrente di ciascuna delle unità di base con cui si sta lavorando. Ad esempio, sapendo che l'utente sta lavorando con i millimetri, le tonnellate e i secondi, grazie all'utilizzo di un sistema di unità, FreeCAD può sapere che l'energia è espressa in termini di milliJoule, la forza in termini di Newton, e la pressione in termini di MegaPascal. Quindi un sistema di unità è definito solo da un nome (ad esempio Sistema di unità standard) e da una tabella di grandezza specifica per ciascuna delle unità di base 7, che è la sua grandezza corrispondente.
Stringa che permette all'utente di identificare il sistema di unità.
Specificando la grandezza delle 7 unità di base si definisce un sistema di unità.
Ad esempio [1e-03, 1e+03, 1, 1, 1, 1, 1], significa millimetri, tonnellata, secondo, ampere, Kelvin, mole, candela
E' presentata solo la logica di alcuni metodi, per evidenziare alcune caratteristiche. Questi metodi potrebbero appartenere a un oggetto chiamato Gestore di unità.
Il dizionario delle unità può essere un file XML (file di configurazione di FreeCAD). Esso contiene la lista delle unità definite. Tale dizionario è necessario affinchè il sistema di gestione dell'unità proposto funzioni.
Deve soddisfare alcune condizioni che devono essere controllate prima di attivare il sistema di gestione dell'unità. Queste condizioni sono:
Un dizionario di unità definisce un insieme di unità e le loro grandezze note. Quando si gestisce una unità, è opportuno controllare che la sua firma sia compatibile con l'insieme di unità registrate nel dizionario di unità, in modo da elaborarla. Questo controllo comprende:
Conoscendo un valore, l'unità iniziale tramite il suo simbolo e l'unità di destinazione tramite il suo simbolo, scalare il valore.
Conoscendo un valore, l'unità iniziale tramite il suo simbolo e il sistema di unità di destinazione, scalare il valore.
Conoscendo un valore, un sistema di unità iniziale, l'unità di destinazione tramite il suo simbolo, scalare il valore.
Supponiamo di accingerci a creare un modello di elementi finiti. Per costruire il nostro modello, abbiamo bisogno della griglia (forma mesh), delle proprietà del materiale ed è necessario definire i parametri numerici. Considerando che possono esserci decine di proprietà dei materiali da gestire, espresse con diverse unità e a volte non sempre molto comuni, per l'utente è importante dover solo indicare un sistema globale di unità, senza altre preoccupazioni.
Poi FreeCAD farebbe lui il lavoro.
Per gli sviluppatori e gli utenti di FreeCAD non è necessario conoscere tutte le unità che possono essere definite nei file delle proprietà del materiale, è utile fare affidamento su un sistema generico.
Supponiamo che in un file abbiamo un buon numero di proprietà dei materiali esotiche espresse con unità esotiche, e che vogliamo lavorare in un sistema di unità specifico.
Con l'estensione proposta è facile scalare qualsiasi di queste proprietà conoscendo la loro firma, la grandezza e il sistema di unità di destinazione.
Per ciascuna delle proprietà, la scalatura si ottiene moltiplicando il valore iniziale della proprietà per il fattore <math>\frac{Grandezzainiziale}{Grandezzafinale}</math>.
La Grandezza finale viene ottenuta semplicemente con l'operazione <math>\prod_{bu} Grandezzafinale_{bu}^{firma_{bu}}</math>, dove bu stà per unità di base.
Diventa così molto facile gestire un numero qualsiasi di unità con qualsiasi tipo di unità tramite poche righe di Python.