FreeCAD Logo FreeCAD 1.0
  • Englisch Afrikaans Arabisch Weißrussisch Katalanisch Tschechisch Deutsch Griechisch Spanisch Spanisch Baskisch Finnisch Philippinisch Französisch Galicisch Kroatisch Ungarisch Indonesisch Italienisch Japanisch Kabylisch Koreanisch Litauisch Niederländisch Norwegisches Bokmål Polnisch Portugiesisch Portugiesisch Rumänisch Russisch Slowakisch Slowenisch Serbisch Schwedisch Türkisch Ukrainisch Valencianisch Vietnamesisch Chinesisch Chinesisch
  • Funktionen
  • Herunterladen
  • Blog
  • Dokumentation
    Inhaltsverzeichnis Erste Schritte Benutzerdokumentation Das FreeCAD-Handbuch Dokumentation der Arbeitsbereiche Python-Dokumentation Dokumentation der C++ Programmierung Anleitungen Häufig gestellte Fragen Datenschutzrichtlinie Über FreeCAD
  • Mitwirken
    Wie kann ich helfen Sponsor Einen Fehler melden Einen Pull Request durchführen Jobs und Finanzierung Richtlinien für Beiträge Entwicklerhandbuch Übersetzungen
  • Community
    Verhaltenskodex Forum The FPA GitHub GitLab Codeberg Mastodon Matrix IRC IRC via Webchat Gitter Discord Reddit Twitter Facebook LinkedIn Kalender
  • ♥ Donate

Donate

$
SEPA-Informationen
Bitte richten Sie Ihre SEPA-Überweisung an:
Beneficiary: The FreeCAD project association
IBAN: BE04 0019 2896 4531
BIC/SWIFT: GEBABEBBXXX
Kreditinstitut: BNP Paribas Fortis
Adresse: Rue de la Station 64, 1360 Perwez, Belgium

While Stripe doesn't support monthly donations, you can still become a sponsor! Simply make a one-time donation equivalent to 12 months of support, and you'll gain access to the corresponding sponsoring tier. It's an easy and flexible way to contribute.

If you are not sure or not able to commit to a regular donation, but still want to help the project, you can do a one-time donation, of any amount.

Choose freely the amount you wish to donate one time only.

You can support FreeCAD by sponsoring it as an individual or organization through various platforms. Sponsorship provides a steady income for developers, allowing the FPA to plan ahead and enabling greater investment in FreeCAD. To encourage sponsorship, we offer different tiers, and unless you choose to remain anonymous, your name or company logo will be featured on our website accordingly.

from 1 USD / 1 EUR per month. You will not have your name displayed here, but you will have helped the project a lot anyway. Together, normal sponsors maintain the project on its feet as much as the bigger sponsors.

from 25 USD / 25 EUR per month. Your name or company name is displayed on this page.

from 100 USD / 100 EUR per month. Your name or company name is displayed on this page, with a link to your website, and a one-line description text.

from 200 USD / 200 EUR per month. Your name or company name and logo displayed on this page, with a link to your website and a custom description text. Companies that have helped FreeCAD early on also appear under Gold sponsors.

Instead of donating each month, you might find it more comfortable to make a one-time donation that, when divided by twelve, would give you right to enter a sponsoring tier. Don't hesitate to do so!

Choose freely the amount you wish to donate each month.

Please inform your forum name or twitter handle as a notein your transfer, or reach to us, so we can give you proper credits!

Die Größe ist eine Kombination einer Fließkommazahl und einer Einheit. Sie wird überall in FreeCAD benutzt, um Parameter und alle Arten von Ein- und Ausgaben zu behandeln.

Allgemein

In einem CAD- oder CAE-System ist es sehr wichtig, die Einheit eines Wertes im Auge zu behalten. Viel Ärger kann entstehen, wenn Einheiten durcheinander geworfen oder Ergebnisse in unterschiedlichen Einheitensystemen berechnet werden. Ein berühmtes Missgeschick ist der Verlust des Mars Climate Orbiter durch unterschiedliche Einheiten. Selbst innerhalb des gleichen Einheitensystems kommen die Einheiten in unterschiedlichen Varianten abhängig vom Verwendungszweck. Einfache Beispiele sind die Geschwindigkeit in km/h (Autos), m/s (Robotik) oder mm/min (Fräsen). Ein CAD-System muss verlässlich auf die Einheiten achten. Es muss auch mit ihnen rechnen und auf die richtige Einheit bei speziellen Parametern achten.

Aus diesem Grund wurde das FreeCAD-Mengengerüst geschaffen. Es umfasst den gesamten Code und die Objekte zum Umgang mit Einheiten, Berechnungen, Benutzereingaben, Umrechnung in andere Einheitensysteme und die schöne Ausgabe von Werten und Einheiten. Langfristig sollte in FreeCAD kein Parameter nur eine Zahl sein.

Unterstützte Einheiten

Der FreeCAD-Eingabe-Parser unterstützt eine Vielzahl von Einheiten und Einheitensystemen. FreeCAD unterstützt den griechischen Buchstaben 'µ' für micro, akzeptiert aber auch 'u' als Ersatz. Eine vollständige Liste aller unterstützter Einheiten befindet sich hier.

Die detaillierten technischen Einzelheiten findet man im Code:

  • Quantity lexer
  • Quantity definitions

Interne Darstellung

Alle physikalischen Einheiten können als eine Kombination der sieben SI-Einheiten ausgedrückt werden:

Ein einfacher Weg, eine Einheit auszudrücken, ist ein Feld mit Integerwerten der Größe 7 (Anzahl der Basiseinheiten), das festlegt, was die Einheit darstellt.

Die Kennzeichnung der sieben Basiseinheiten ist:

  • LÄNGE: [1,0,0,0,0,0,0]
  • MASSE: [0,1,0,0,0,0,0]
  • ZEIT: [0,0,1,0,0,0,0]
  • STROMSTÄRKE: [0,0,0,1,0,0,0]
  • THERMODYNAMISCHE TEMPERATUR: [0,0,0,0,1,0,0]
  • STOFFMENGE: [0,0,0,0,0,1,0]
  • LICHTSTÄRKE: [0,0,0,0,0,0,1]

Mit diesen sieben Einheiten können wir alle abgeleiteten Einheiten (in Guide for the Use of the International System of Units (SI) nachzulesen) ausdrücken und weitere neue nach Bedarf erstellen, wie etwa:

  • MASSENDICHTE: [-3,1,0,0,0,0,0]
  • FLÄCHE: [0,2,0,0,0,0,0]

Weil Winkel pysikalisch dimensionslos, aber trotzdem wichtig für ein CAD-System sind, haben wir eine weitere virtuelle Einheit für den Winkel. Das ergibt einen Vektor von 8 in der FreeCAD-Einheitenkennzeichnung.

Einheitenrechner

Oft muss man Einheiten von einem System in ein anderes umrechnen. Beispielsweise alte Parametertabellen (mit ungewöhnlichen Einheiten). Für diese Fällen stellt FreeCAD ein Umrechnungswerkzeug bereit, genannt Units-Calculator, das bei der Umwandlung von Einheiten hilft.

Seine detaillierte Beschreibung befindet sich hier: Std Einheitenrechner.

Eingabefeld

Das InputField ist ein von QLineEdit abgeleitetes Qt-Widget zur Verarbeitung aller Arten von Benutzerinteraktionen mit Größen und Parametern. Es verfügt über die folgenden Eigenschaften:

  • Parsen beliebiger Werte-/Einheiteneingaben
  • Überprüfen der richtigen Einheit (falls angegeben) und Rückmeldung an den Benutzer
  • Spezielles Kontextmenü für Operationen mit Größen/Werten
  • Verlaufsverwaltung (Speichern der zuletzt verwendeten Werte)
  • Speichern häufig benötigter Werte als Verknüpfung im Kontextmenü
  • Auswahl von Werten mit dem Mausrad und den Pfeiltasten (tbd)
  • Auswahl mit der mittleren Maustaste und Mausbewegung (tbd)
  • Python-Integration für die Verwendung in Python-only-Dialogfeldern (tbd)

Der UnitsCalculator nutzt ebenfalls das InputField.

Code:

  • InputField.h
  • InputField.cpp

Skripterstellung mit Python

Das Einheiten- und Mengensystem in FreeCAD ist (wie fast alles) vollständig über Python ansprechbar.

Einheit

Die Klasse „Unit“ repräsentiert den Fingerabdruck jeder physikalischen Einheit. Wie im Abschnitt „Grundlagen“ beschrieben, wird zur Darstellung dieses Fingerabdrucks ein Vektor aus acht Zahlen verwendet. Die Klasse „Unit“ ermöglicht die Verarbeitung und Berechnung auf Grundlage dieser Informationen.

from FreeCAD import Units

# creating a unit with certain signature
Units.Unit(0,1)      # Mass     (kg)
Units.Unit(1)        # Length   (mm)
Units.Unit(-1,1,-2)  # Pressure (kg/mm*s^2)

# using predefined constants
Units.Unit(Units.Length)
Units.Unit(Units.Mass)
Units.Unit(Units.Pressure)

# parsing unit out of a string
Units.Unit('kg/(m*s^2)')    # Pressure
Units.Unit('Pa')            # the same as combined unit Pascale
Units.Unit('J')             # Joule (work,energy) mm^2*kg/(s^2)

# you can use units from all supported systems of units
Units.Unit('psi')           # imperial pressure
Units.Unit('lb')            # imperial  mass
Units.Unit('ft^2')          # imperial area

# comparing units
Units.Unit(0,1) == Unit(Units.Mass)

# getting type of unit
Units.Unit('kg/(m*s^2)').Type == 'Pressure'

# calculating
Units.Unit('kg') * Units.Unit('m^-1*s^-2') == Units.Unit('kg/(m*s^2)')

Die Einheit wird hauptsächlich verwendet, um einen bestimmten Einheitentyp für einen Parameter zu beschreiben. Daher kann ein spezieller Eigenschaftstyp in FreeCAD eine Einheit übergeben, um die richtige Einheit zu überprüfen und sicherzustellen. Eine Einheit und ein Fließkommawert werden als Menge bezeichnet.

Größe

from FreeCAD import Units

# to create a quantity you need a value (float) and a unit
Units.Quantity(1.0,Units.Unit(0,1))     # Mass       1.0 kg
Units.Quantity(1.0,Units.Unit(1))       # Length    1.0 mm
Units.Quantity(1.0,Units.Unit(-1,1,-2)) # Pressure  1.0 kg/mm*s^2
Units.Quantity(1.0,Units.Pressure)      # Pressure  1.0 kg/mm*s^2

# you can directly give a signature
Units.Quantity(1.0,0,1)     # Mass       1.0 kg
Units.Quantity(1.0,1)       # Length    1.0 mm
Units.Quantity(1.0,-1,1,-2) # Pressure  1.0 kg/mm*s^2

# parsing quantities out of a string
Units.Quantity('1.0 kg/(m*s^2)') # Pressure
Units.Quantity('1.0 Pa')         # the same as combined Unit Pascale
Units.Quantity('1.0 J')          # Joule (Work,Energy) mm^2*kg/(s^2)

# You can use a point or comma as float delimiter
Units.Quantity('1,0 m')
Units.Quantity('1.0 m')

# you can use units from all supported systems of units
Units.Quantity('1.0 psi')  # imperial pressure
Units.Quantity('1.0 lb')   # imperial mass
Units.Quantity('1.0 ft^2') # imperial area

# the quantity parser can do calculations too
Units.Quantity('360/5 deg')        # splitting circle 
Units.Quantity('1/16 in')          # fractions
Units.Quantity('5.3*6.3 m^2')      # calculating an area
Units.Quantity('1/(log(2.3)/sin(pi)*3.4)+1.8e-3 m')
Units.Quantity('1ft 3in')          # imperial style

# and for sure calculation and comparison
Units.Quantity('1 Pa') * Units.Quantity(2.0) == Units.Quantity('2 Pa')
Units.Quantity('1 m') * Units.Quantity('2 m') == Units.Quantity('2 m^2')
Units.Quantity('1 m') * Units.Quantity('2 ft') + Units.Quantity('2 mm^2')
Units.Quantity('1 m') > Units.Quantity('2 ft')

# accessing the components
Units.Quantity('1 m').Value # get the number (always internal system (mm/kg/s))
Units.Quantity('1 m').Unit  # get the unit
Units.Quantity('1 m') == Units.Quantity( Units.Quantity('1 m').Value , Units.Quantity('1 m').Unit)

# translating the value into other units than the internal system (mm/kg/s)
Units.Quantity('1 km/h').getValueAs('m/s')                  # translate value
Units.Quantity('1 m').getValueAs(2.45,1)                    # translation value and unit signature
Units.Quantity('1 kPa').getValueAs(Units.Pascal)            # predefined standard units 
Units.Quantity('1 MPa').getValueAs(Units.Quantity('N/m^2')) # a quantity

Benutzerorientierte Werte

Normally in scripts you can use Quantity for all kinds of calculations and checking, but there comes the time you have to output information to the user. You could use getValueAs() to force a certain unit, but normally the user sets his preferred unit-schema in the preferences. This unit-schema does all the translations to the representation the user likes to see. At the moment there are the following schemes implemented:

  1. Standard (mm, kg, s)
  2. MKS (m, kg, s)
  3. US-Maßeinheiten (in, lb)
  4. Imperiales Dezimalsystem (in, lb)
  5. Gebäude Euro (cm, m^2, m^3)
  6. Gebäude US (ft-in, sqft, cft)
  7. Metrisch kleine Teile & CNC (mm, mm/min)
  8. Imperial für Bauingenieurwesen (ft, lb, mph)
  9. FEM (mm, N, s)
  10. Meter Dezimal (m, m^2, m^3)

Die Klasse Quantity verfügt über zwei Optionen zur Verwendung der tatsächlichen Schemaübersetzung:

from FreeCAD import Units

# Use the translated string:
Units.Quantity('1m').UserString           # '1000 mm' in 1; '1 m' in 2; and '1.09361 yr' in 3

Das reicht aus, wenn man nur eine Zeichenfolge benötigt. Manchmal benötigt man jedoch mehr Kontrolle, z. B. wenn man eine Dialogschaltfläche zum Hoch- und Runterdrehen haben möchten. Dann benötigt man mehr Informationen über die Übersetzungsausgabe. Daher wird die Methode getUserPreferred() von quantity verwendet:

Units.Quantity('22 m').getUserPreferred() # gets a tuple:('22 m', 1000.0, 'm')
Units.Quantity('2  m').getUserPreferred() # Tuple: ('2000 mm', 1.0, 'mm')

Hier erhält man weitere Informationen mithilfe eines Tupels (drei Elemente). Man erhält wie zuvor die Zeichenfolge sowie den Faktor des Werts und die Rohzeichenfolge mit nur der vom Übersetzungsschema ausgewählten Einheit. Mit diesen Informationen kann man eine viel reichhaltigere Benutzerinteraktion implementieren.

Der Code der Einheitenschemata befindet sich hier.

Präzision

Die Genauigkeit der Mengenangaben in den FreeCAD-Dialogfeldern entspricht der Anzahl der Dezimalstellen, die in den Einstellungen festgelegt wurde. Um diese Einstellung für das Skript (z. B. in Dialogfeldern) zu verwenden, kann man sie mit diesem Code abrufen:

import FreeCAD

params = App.ParamGet("User parameter:BaseApp/Preferences/Units")
params.GetInt('Decimals') # returns an int

Anhang

Vom Parser unterstützte Einheiten

Obwohl alle physikalischen Einheiten mit den sieben SI-Einheiten beschrieben werden können, bestehen die meisten in technischen Bereichen benutzten Einheiten aus üblichen zusammengesetzten Einheiten (wie Pa = N/m^2 Pascal). Deshalb unterstützt der Einheiten-Parser in FreeCAD viele SI- und Imperial-kombinierte Einheiten. Diese Einheiten sind in der Datei src/Base/QuantityParser.l definiert und können in der Zukunft noch erweitert werden.

from FreeCAD import Units

 "nm"  = Units.Quantity(1.0e-6    ,Units.Unit(1));         // nano meter
 "µm"  = Units.Quantity(1.0e-3    ,Units.Unit(1));         // micro meter
 "mm"  = Units.Quantity(1.0       ,Units.Unit(1));         // milli meter
 "cm"  = Units.Quantity(10.0      ,Units.Unit(1));         // centi meter
 "dm"  = Units.Quantity(100.0     ,Units.Unit(1));         // deci meter
 "m"   = Units.Quantity(1.0e3     ,Units.Unit(1));         // meter
 "km"  = Units.Quantity(1.0e6     ,Units.Unit(1));         // kilo meter
 "l"   = Units.Quantity(1000000.0 ,Units.Unit(3));         // liter dm^3
                                                  
 "µg"  = Units.Quantity(1.0e-9    ,Units.Unit(0,1));       // micro gram
 "mg"  = Units.Quantity(1.0e-6    ,Units.Unit(0,1));       // milli gram
 "g"   = Units.Quantity(1.0e-3    ,Units.Unit(0,1));       // gram
 "kg"  = Units.Quantity(1.0       ,Units.Unit(0,1));       // kilo gram
 "t"   = Units.Quantity(1000.0    ,Units.Unit(0,1));       // ton
                                                  
 "s"   = Units.Quantity(1.0       ,Units.Unit(0,0,1));     // second (internal standard time)
 "min" = Units.Quantity(60.0      ,Units.Unit(0,0,1));     // minute
 "h"   = Units.Quantity(3600.0    ,Units.Unit(0,0,1));     // hour  
                                                  
 "A"   = Units.Quantity(1.0       ,Units.Unit(0,0,0,1));   // Ampere (internal standard electric current)
 "mA"  = Units.Quantity(0.001     ,Units.Unit(0,0,0,1));   // milli Ampere         
 "kA"  = Units.Quantity(1000.0    ,Units.Unit(0,0,0,1));   // kilo Ampere         
 "MA"  = Units.Quantity(1.0e6     ,Units.Unit(0,0,0,1));   // Mega Ampere         
                                                  
 "K"   = Units.Quantity(1.0       ,Units.Unit(0,0,0,0,1)); // Kelvin (internal standard thermodynamic temperature)
 "mK"  = Units.Quantity(0.001     ,Units.Unit(0,0,0,0,1)); // Kelvin         
 "µK"  = Units.Quantity(0.000001  ,Units.Unit(0,0,0,0,1)); // Kelvin         

 "mol" = Units.Quantity(1.0       ,Units.Unit(0,0,0,0,0,1)); // Mole (internal standard amount of substance)        

 "cd"  = Units.Quantity(1.0       ,Units.Unit(0,0,0,0,0,0,1)); // Candela (internal standard luminous intensity)        

 "deg" = Units.Quantity(1.0         ,Units.Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle)
 "rad" = Units.Quantity(180/M_PI    ,Units.Unit(0,0,0,0,0,0,0,1)); // radian         
 "gon" = Units.Quantity(360.0/400.0 ,Units.Unit(0,0,0,0,0,0,0,1)); // gon         

 "in"  = Units.Quantity(25.4        ,Units.Unit(1));       // inch
 "\""  = Units.Quantity(25.4        ,Units.Unit(1));       // inch
 "fo"  = Units.Quantity(304.8       ,Units.Unit(1));       // foot
 "'"   = Units.Quantity(304.8       ,Units.Unit(1));       // foot
 "th"  = Units.Quantity(0.0254      ,Units.Unit(1));       // thou
 "yd"  = Units.Quantity(914.4       ,Units.Unit(1));       // yard

 "lb"  = Units.Quantity(0.45359237   ,Units.Unit(0,1));    // pound
 "oz"  = Units.Quantity(0.0283495231 ,Units.Unit(0,1));    // ounce
 "st"  = Units.Quantity(6.35029318   ,Units.Unit(0,1));    // Stone
 "cwt" = Units.Quantity(50.80234544  ,Units.Unit(0,1));    // hundredweights

Diese Seite wird abgerufen von https://wiki.freecad.org/Quantity

Kontaktiere uns!
Forum GitHub Mastodon Matrix IRC Gitter.im Discord Reddit Twitter Facebook LinkedIn

© Das FreeCAD-Team. Bildnachweis (von oben nach unten): ppemawm, r-frank, epileftric, regis, rider_mortagnais, bejant.

Dieses Projekt wird unterstützt von: , KiCad Services Corp. und andere Sponsoren

GitHubDiese Seite auf GitHub verbessern