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

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.