FreeCAD-Doc/localwiki/Quantity-cs.html
2018-07-19 18:47:02 -05:00

279 lines
18 KiB
HTML

<html><head><title>Quantity/cs</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>Quantity/cs</h1></div>
<div id="mw-content-text" lang="cs" dir="ltr" class="mw-content-ltr"><hr/><div class="mw-parser-output"><p>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ů.
</p>
<div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Z.C3.A1kladn.C3.AD"><span class="tocnumber">1</span> <span class="toctext">Základní</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Podporovan.C3.A9_jednotky"><span class="tocnumber">2</span> <span class="toctext">Podporované jednotky</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#Intern.C3.AD_reprezentace"><span class="tocnumber">3</span> <span class="toctext">Interní reprezentace</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#Kalkul.C3.A1tor_jednotek"><span class="tocnumber">4</span> <span class="toctext">Kalkulátor jednotek</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#Vstupn.C3.ADPole"><span class="tocnumber">5</span> <span class="toctext">VstupníPole</span></a></li>
<li class="toclevel-1 tocsection-6"><a href="#Skriptov.C3.A1n.C3.AD_v_Pythonu"><span class="tocnumber">6</span> <span class="toctext">Skriptování v Pythonu</span></a>
<ul>
<li class="toclevel-2 tocsection-7"><a href="#Jednotka"><span class="tocnumber">6.1</span> <span class="toctext">Jednotka</span></a></li>
<li class="toclevel-2 tocsection-8"><a href="#Veli.C4.8Dina"><span class="tocnumber">6.2</span> <span class="toctext">Veličina</span></a></li>
<li class="toclevel-2 tocsection-9"><a href="#Hodnoty_pro_u.C5.BEivatele"><span class="tocnumber">6.3</span> <span class="toctext">Hodnoty pro uživatele</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-10"><a href="#Dodatek"><span class="tocnumber">7</span> <span class="toctext">Dodatek</span></a>
<ul>
<li class="toclevel-2 tocsection-11"><a href="#Jednotky_podporovan.C3.A9_parserem"><span class="tocnumber">7.1</span> <span class="toctext">Jednotky podporované parserem</span></a></li>
</ul>
</li>
</ul>
</div>
<h3><span class="mw-headline" id="Z.C3.A1kladn.C3.AD">Základní</span></h3>
<p>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 <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure">havárie Mars Climate Orbiteru</a> 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ů.
</p><p>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.
</p>
<h3><span class="mw-headline" id="Podporovan.C3.A9_jednotky">Podporované jednotky</span></h3>
<p>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'.
</p>
<ul><li> Délka
<ul><li> "nm" </li>
<li> "µm" </li>
<li> "mm" </li>
<li> "cm" </li>
<li> "dm" </li>
<li> "m" </li>
<li> "km" </li>
<li> "in" </li>
<li> "ft" </li>
<li> "thou"</li>
<li> "mil" </li>
<li> "yd" </li>
<li> "mi" </li></ul></li></ul>
<p>Todo: všechny ostatní ...
</p><p><br />
Detailní informace najdete v kódu:
</p>
<ul><li> Slovník veličin: <a rel="nofollow" class="external free" href="http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/QuantityParser.l">http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/QuantityParser.l</a> </li>
<li> Definice veličin: <a rel="nofollow" class="external free" href="http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/Quantity.cpp#l167">http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/Quantity.cpp#l167</a></li></ul>
<h2><span class="mw-headline" id="Intern.C3.AD_reprezentace">Interní reprezentace</span></h2>
<p>Všechny fyzické jednotky mohou být vyjádřeny jako kombinace sedmi <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/International_System_of_Units">SI-jednotek</a>:
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:SI-Derived-Units.jpg" class="image"><img alt="SI-Derived-Units.jpg" src="750px-SI-Derived-Units.jpg" width="750" height="592" srcset="/wiki/images/4/4b/SI-Derived-Units.jpg 1.5x" /></a>
</p><p><br />
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:
</p>
<ul><li> DĚLKA: [1,0,0,0,0,0,0]</li>
<li> HMOTNOST: [0,1,0,0,0,0,0]</li>
<li> ČAS: [0,0,1,0,0,0,0]</li>
<li> ELEKTRICKÝ PROUD: [0,0,0,1,0,0,0]</li>
<li> TERMODYNAMICKÁ TEPLOTA: [0,0,0,0,1,0,0]</li>
<li> LÁTKOVÉ MNOŽSTVÍ: [0,0,0,0,0,1,0]</li>
<li> SVĚTELNÁ INTENZITA: [0,0,0,0,0,0,1]</li></ul>
<p>Těmito 7 jednotkami můžeme vyjádřit všechny odvozené jednotky definované v <a rel="nofollow" class="external text" href="http://physics.nist.gov/cuu/pdf/sp811.pdf">Průvodci pro použití Mezinárodního jednotkového systému (SI)</a> a vytvářet nové jednotky podle potřeby jako například:
</p>
<ul><li> MĚRNÁ HMOTNOST: [-3,1,0,0,0,0,0]</li>
<li> PLOCHA: [0,2,0,0,0,0,0]</li></ul>
<p>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.
</p>
<h2><span class="mw-headline" id="Kalkul.C3.A1tor_jednotek">Kalkulátor jednotek</span></h2>
<p>Č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.
</p><p>Detailní popis je zde:
<a href="Std_UnitsCalculator.html" title="Std UnitsCalculator">Std_UnitsCalculator</a>
</p>
<h2><span class="mw-headline" id="Vstupn.C3.ADPole">VstupníPole</span></h2>
<p>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:
</p>
<ul><li> zpracovává libovolné hodnoty/jednotky na vstupu</li>
<li> kontrola na správnou jednotku (je-li zadána) a dává uživatelskou odezvu</li>
<li> speciální kontextové menu pro operace s veličinami/jednotkami</li>
<li> správa historie (ukládá poslední použitou hodnotu)</li>
<li> ukládá často používané hodnoty jako klávesové zkratky v kontextovém menu</li>
<li> vytáčené hodnoty pomocí kolečka myši a klávesových šipek (tbd)</li>
<li> vytáčené hodnoty pomocí středního tlačítka myši a posunů myši (tbd)</li>
<li> integrace do Pythonu pro použití v dialogových oknech Pythonu (tbd)</li></ul>
<p>Kalkulátor jednotek již VstupníPole používá.
</p><p>Hlavní dokument: <a href="https://www.freecadweb.org/wiki/index.php?title=InputField/cs" title="InputField/cs">InputField/cs</a>
</p><p>Kód:
</p>
<ul><li> <a rel="nofollow" class="external free" href="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.h</a></li>
<li> <a rel="nofollow" class="external free" href="http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Gui/InputField.cpp">http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Gui/InputField.cpp</a></li></ul>
<h2><span class="mw-headline" id="Skriptov.C3.A1n.C3.AD_v_Pythonu">Skriptování v Pythonu</span></h2>
<p>Systém veličin a jednotek ve FreeCADu je (jako téměř všechno) plně přístupný v Pythonu.
</p>
<h3><span class="mw-headline" id="Jednotka">Jednotka</span></h3>
<p>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.
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>from Units import Unit
# creating a Unit with certain signature
Unit(0,1) # Mass (kg)
Unit(1) # Length (mm)
Unit(-1,1,-2) # Pressure (kg/mm*s^2)
# using predefined constats
Unit(FreeCAD.Units.Length)
Unit(FreeCAD.Units.Mass)
Unit(FreeCAD.Units.Pressure)
# parsing unit out of an string
Unit('kg/(m*s^2)') # Pressure
Unit('Pa') # the same as combined Unit Pascale
Unit('J') # Joul (Work,Energy) mm^2*kg/(s^2)
# you can use units from all supported unit-systems
Unit('psi') # Imperial pressure
Unit('lb') # Mass
Unit('ft^2') # Area
# comparing units
Unit(0,1) == Unit(FreeCAD.Units.Mass)
# getting type of unit
Unit('kg/(m*s^2)').Type == 'Pressure'
# calculating
Unit('kg') * Unit('m^-1*s^-2') == Unit('kg/(m*s^2)')</pre></div>
<p>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.
</p>
<h3><span class="mw-headline" id="Veli.C4.8Dina">Veličina</span></h3>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>from Units import Unit,Quantity
# to create a quantity you need a value (float) and a Unit
Quantity(1.0,Unit(0,1)) # Mass 1.0 kg
Quantity(1.0,Unit(1)) # Length 1.0 mm
Quantity(1.0,Unit(-1,1,-2)) # Pressure 1.0 kg/mm*s^2
Quantity(1.0,FreeCAD.Units.Pressure) # Pressure 1.0 kg/mm*s^2
# you can directly give a signature
Quantity(1.0,0,1) # Mass 1.0 kg
Quantity(1.0,1) # Length 1.0 mm
Quantity(1.0,-1,1,-2) # Pressure 1.0 kg/mm*s^2
# parsing Quantitis out of a string
Quantity('1.0 kg/(m*s^2)') # Pressure
Quantity('1.0 Pa') # the same as combined Unit Pascale
Quantity('1.0 J') # Joul (Work,Energy) mm^2*kg/(s^2)
# You can using a point or comma as float delimiter
Quantity('1,0 m')
Quantity('1.0 m')
# you can use units from all supported unit-systems
Quantity('1.0 psi') # Imperial pressure
Quantity('1.0 lb') # Mass
Quantity('1.0 ft^2')
# the quantity parser can do calculations too
Quantity('360/5 deg') # splitting circle
Quantity('1/16 in') # fractions
Quantity('5.3*6.3 m^2') # calculating an area
Quantity('1/(log(2.3)/sin(pi)*3.4)+1.8e-3 m')
Quantity('1ft 3in') # imperial style
# and for sure calculation and comparison
Quantity('1 Pa')* Quantity(2.0) == Quantity('2 Pa')
Quantity('1 m')* Quantity('2 m') == Quantity('2 m^2')
Quantity('1 m')* Quantity('2 ft') + Quantity('2 mm^2')
Quantity('1 m') > Quantity('2 ft')
# accessing the components
Quantity('1 m').Value # get the number (allways internal system (mm/kg/s)
Quantity('1 m').Unit # get the unit
Quantity('1 m') == Quantity( Quantity('1 m').Value , Quantity('1 m').Unit )
# translating the value into other units then the internal system (mm/kg/s)
Quantity('1 km/h').getValueAs('m/s') # translate value
Quantity('1 m').getValueAs(2.45,1) # translation value and unit signature
Quantity('1 kPa').getValueAs(FreeCAD.Units.Pascal) # predefined standard units
Quantity('1 MPa').getValueAs(Quantity('N/m^2')) # a quantity</pre></div>
<h3><span class="mw-headline" id="Hodnoty_pro_u.C5.BEivatele">Hodnoty pro uživatele</span></h3>
<p>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>
<ul><li> 1: Vnitřní (mm/kg/s) </li>
<li> 2: MKS (m/kg/s)</li>
<li> 3: US customary (in/lb) </li></ul>
<p>Přidální dalších schemat bude v budoucnosti snadné ...
</p><p>Třída pro veličinu má dvě možnosti použití aktuálních převodového schematu:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>from Units import Unit,Quantity
# Use the translated string:
Quantity('1m').UserString # '1000 mm' in 1; '1 m' in 2; and '1.09361 yr' in 3</pre></div>
<p>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():
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>Quantity('22 m').getUserPrefered() # gets a tubple:('22 m', 1000.0, 'm')
Quantity('2 m').getUserPrefered() # Tuple: ('2000 mm', 1.0, 'mm')</pre></div>
<p>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.
</p><p>Kódy pro převodní schema můžete najít zde:
</p>
<ul><li> <a rel="nofollow" class="external free" href="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/UnitsSchemaInternal.cpp</a></li>
<li> <a rel="nofollow" class="external free" href="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/UnitsSchemaMKS.cpp</a></li>
<li> <a rel="nofollow" class="external free" href="http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/UnitsSchemaImperial1.cpp">http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Base/UnitsSchemaImperial1.cpp</a></li></ul>
<h2><span class="mw-headline" id="Dodatek">Dodatek</span></h2>
<h3><span class="mw-headline" id="Jednotky_podporovan.C3.A9_parserem">Jednotky podporované parserem</span></h3>
<p>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.
</p><p><br />
</p>
<pre>"nm" = Quantity(1.0e-6 ,Unit(1)); // nano meter
"µm" = Quantity(1.0e-3 ,Unit(1)); // micro meter
"mm" = Quantity(1.0 ,Unit(1)); // milli meter
"cm" = Quantity(10.0 ,Unit(1)); // centi meter
"dm" = Quantity(100.0 ,Unit(1)); // deci meter
"m" = Quantity(1.0e3 ,Unit(1)); // meter
"km" = Quantity(1.0e6 ,Unit(1)); // kilo meter
"l" = Quantity(1000000.0 ,Unit(3)); // Liter dm^3
"µg" = Quantity(1.0e-9 ,Unit(0,1)); // micro gram
"mg" = Quantity(1.0e-6 ,Unit(0,1)); // milli gram
"g" = Quantity(1.0e-3 ,Unit(0,1)); // gram
"kg" = Quantity(1.0 ,Unit(0,1)); // kilo gram
"t" = Quantity(1000.0 ,Unit(0,1)); // ton
"s" = Quantity(1.0 ,Unit(0,0,1)); // second (internal standard time)
"min" = Quantity(60.0 ,Unit(0,0,1)); // minute
"h" = Quantity(3600.0 ,Unit(0,0,1)); // hour
"A" = Quantity(1.0 ,Unit(0,0,0,1)); // Ampere (internal standard electric current)
"mA" = Quantity(0.001 ,Unit(0,0,0,1)); // milli Ampere
"kA" = Quantity(1000.0 ,Unit(0,0,0,1)); // kilo Ampere
"MA" = Quantity(1.0e6 ,Unit(0,0,0,1)); // Mega Ampere
"K" = Quantity(1.0 ,Unit(0,0,0,0,1)); // Kelvin (internal standard thermodynamic temperature)
"mK" = Quantity(0.001 ,Unit(0,0,0,0,1)); // Kelvin
"µK" = Quantity(0.000001 ,Unit(0,0,0,0,1)); // Kelvin
</pre>
<pre>"mol" = Quantity(1.0 ,Unit(0,0,0,0,0,1)); // Mole (internal standard amount of substance)
</pre>
<pre>"cd" = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); // Candela (internal standard luminous intensity)
</pre>
<pre>"deg" = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle)
"rad" = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); // radian
"gon" = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // gon
</pre>
<pre>"in" = Quantity(25.4 ,Unit(1)); // inch
"\"" = Quantity(25.4 ,Unit(1)); // inch
"fo" = Quantity(304.8 ,Unit(1)); // foot
"'" = Quantity(304.8 ,Unit(1)); // foot
"th" = Quantity(0.0254 ,Unit(1)); // thou
"yd" = Quantity(914.4 ,Unit(1)); // yard
</pre>
<p><br />
</p>
<pre>"lb" = Quantity(0.45359237 ,Unit(0,1)); // pound
"oz" = Quantity(0.0283495231 ,Unit(0,1)); // ounce
"st" = Quantity(6.35029318 ,Unit(0,1)); // Stone
"cwt" = Quantity(50.80234544 ,Unit(0,1)); // hundredweights
</pre>
<div style="clear:both"></div>
</div>
</div>
</div><div class="printfooter">
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=Quantity/cs&amp;oldid=83987">http://www.freecadweb.org/wiki/index.php?title=Quantity/cs&amp;oldid=83987</a>"</div>
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
</div>
</div>
<div id="mw-navigation">
<h2>Navigation menu</h2>
</body></html>