Quantity/cs

Veličina je kombinace čísla a jednotky. Je využívána všude ve FreeCADu k práci s parametry a všemi dalšími druhy vstupů a výstupů.

Základní
V CAD a CAE systémech je velmi důležité sledovat jednotky hodnot. Mnoho problémů může nastat když se míchají různé jednotky nebo vypočítané výsledky v různých jednotkových systémech. Jeden známý případ je havárie Mars Climate Orbiteru kvůli pomíchání jednotek. I ve stejném jednotkovém systému přicházejí jednotky se spoustou variant šitých vždy na dané použití. Jednoduché příklady jsou např. rychlost v km/h (auta), m/s (roboti) nebo mm/min (frézování). CAD systém musí spolehlivě sledovat jednotky. Také s nimi dělat výpočty a kontrolovat správné jednoty u speciálních parametrů.

Z těchto důvodů byl vytvořen Framework veličin FreeCADu. Zahrnuje všechny kódy a objekty, které pracují s jednotkami, výpočty jednotek, uživatelské vstupy, konverze do jiných jednotkových systémů a pěkný výstup jednotek a hodnot. V dlouhodobém horizontu by žádný paramater ve FreeCADu neměl být pouze jen číslo.

Podporované jednotky
Vstupní parser FreeCADu podporuje balík jednotek a jednotkových systémů. Používáme řecké písmeno pro mikro, ale jako náhrada je akceptováno i 'u'.

Detailní informace najdete v kódu:
 * Slovník veličin: http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/QuantityParser.l
 * Definice veličin: http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/Quantity.cpp#l167

Interní reprezentace
Všechny fyzické jednotky mohou být vyjádřeny jako kombinace sedmi SI-jednotek:



Jednoduchým způsobem jak vyjádřit jednotku je celočíselné pole 7 čísel (počet základních jednotek), které definuje o jakou jednotku se jedná. Signatury 7 základních jednotek jsou:
 * DĚLKA: [1,0,0,0,0,0,0]
 * HMOTNOST: [0,1,0,0,0,0,0]
 * ČAS: [0,0,1,0,0,0,0]
 * ELEKTRICKÝ PROUD: [0,0,0,1,0,0,0]
 * TERMODYNAMICKÁ TEPLOTA: [0,0,0,0,1,0,0]
 * LÁTKOVÉ MNOŽSTVÍ: [0,0,0,0,0,1,0]
 * SVĚTELNÁ INTENZITA: [0,0,0,0,0,0,1]

Těmito 7 jednotkami můžeme vyjádřit všechny odvozené jednotky definované v Průvodci pro použití Mezinárodního jednotkového systému (SI) a vytvářet nové jednotky podle potřeby jako například:
 * MĚRNÁ HMOTNOST: [-3,1,0,0,0,0,0]
 * PLOCHA: [0,2,0,0,0,0,0]

Protože úhly jsou fyzikálně bezrozměrné, ale ne méně důležité v CAD systému, přidali jsme jednu další virtuální jednotku pro úhel. To dotváří 8-mi místný vektor v jednotkové signatuře FreeCADu.

Kalkulátor jednotek
Často potřebujete přepočítávat jednotky z jednoho systému do druhého. Například máte starou tabulku parametrů s drátovými jednotkami. Pro takový případ FreeCAD nabízí konverzní nástroj nazývaný Kalkulátor jednotek, který pomáhá s přepočtem jednotek.

Detailní popis je zde: Std_UnitsCalculator

VstupníPole
VstupníPole je QLineEdit odvozený z Qt widgetu k práci se všemi druhy uživatelských vstupů veličin a parametrů. Má následující vlastnosti:
 * zpracovává libovolné hodnoty/jednotky na vstupu
 * kontrola na správnou jednotku (je-li zadána) a dává uživatelskou odezvu
 * speciální kontextové menu pro operace s veličinami/jednotkami
 * správa historie (ukládá poslední použitou hodnotu)
 * ukládá často používané hodnoty jako klávesové zkratky v kontextovém menu
 * vytáčené hodnoty pomocí kolečka myši a klávesových šipek (tbd)
 * vytáčené hodnoty pomocí středního tlačítka myši a posunů myši (tbd)
 * integrace do Pythonu pro použití v dialogových oknech Pythonu (tbd)

Kalkulátor jednotek již VstupníPole používá.

Hlavní dokument: InputField/cs

Kód:
 * http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Gui/InputField.h
 * http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Gui/InputField.cpp

Skriptování v Pythonu
Systém veličin a jednotek ve FreeCADu je (jako téměř všechno) plně přístupný v Pythonu.

Jednotka
Třída Unit (jednotka) reprezentuje identifikaci fyzické jednotky. Jek je popsáno v základní části je pro reprezentaci jednotky použít vektor 8 čísel. Třída Unit umožňuje práci a výpočty s těmito informacemi.

Jednotka je používaná hlavně k popisu typu jednotky parametru. Proto speciální typ vlastnosti ve FreeCADu může předávat jednotky pro jejich kontrolu a zaručuje správnou jednotku. Hodnota jednotky a čísla je nazývána Veličina.

Hodnoty pro uživatele
Ve skriptech můžete používat veličiny pro všechny druhy výpočtů a kontrol, přijde čas, kdy budete muset vytvořit výstupní informaci pro uživatele. Můžete použít getValueAs pro vynucení určité jednotky, ale normálně uživatel nastaví svoje preferované jednotkové schéma v předvolbách. Toto jednotkové schema dělá všechny převody do reprezentace, kterou chce uživatel vidět. V této době jsou implementována 3 schemata: Přidální dalších schemat bude v budoucnosti snadné ...
 * 1: Vnitřní    (mm/kg/s)
 * 2: MKS         (m/kg/s)
 * 3: US customary (in/lb)

Třída pro veličinu má dvě možnosti použití aktuálních převodového schematu:

To funguje jenom když potřebujete řetězce (texty). Ale někdy potřebujete větší řízení, např. když máte dialogové tlačítko a možností posunu nahoru a dolu. Pak potřebujete mnohe víc informací o převodu do výstupu. Proto je pro veličiny používána metoda getUserPrefered:

Zde získáte dvě další informace jako pole o velikosti 3. Dostanete řetězec jako předtím, plus faktor, kterým je číslo převedeno a neupravený řetězec pouze s jednotkou vybranou převodovým schematem. S takovou informací můžete implementovat mnohem bohatší odezvu.

Kódy pro převodní schema můžete najít zde:
 * http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/UnitsSchemaInternal.cpp
 * http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/UnitsSchemaMKS.cpp
 * http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/UnitsSchemaImperial1.cpp

Precision
The precision of quantities is within FreeCAD dialogs the number of decimals specified in the preferences. To use this settings for your script (for example in dialogs), you can get it with this code:

Jednotky podporované parserem
Ačkoliv všechny fyzické jednotky mohou být popsány 7 jednotkami SI, většina jednotek používaných v technické oblasti jsou obecné kombinované jednotky (jako Pa = N/m^2 Pascal ). Proto parser jednotek ve FreeCADu podporuje spoustu SI a Imperiálních jednotek. Tyto jednotky jsou jsou definovány v souboru src/Base/QuantityParser.l a mohou být v budoucnosti dále rozšiřovány.