Skip to content

Latest commit

 

History

History
393 lines (359 loc) · 34.3 KB

Property.md

File metadata and controls

393 lines (359 loc) · 34.3 KB

Property

Introduction

A property is a piece of information like a number or a text string that is attached to a FreeCAD document or an object in a document. Public properties can be viewed and modified in the Property editor.

Properties play a very important role in FreeCAD. As objects in FreeCAD are "parametric", this means that their behavior is defined by their properties, and how these properties are used as input for their class methods. See also FeaturePython Custom Properties and PropertyLink: InList and OutList

All property types

Custom scripted objects can use any of the property types defined in the base system:

++++ | Name | Unit (if any) | Remark | +=======================================+=========================+===============================================================================================+ | Acceleration | m/s^2 | | ++++ | AmountOfSubstance | mol | | ++++ | Angle | ° | | ++++ | Area | m^2 | | ++++ | Bool | | | ++++ | BoolList | | | ++++ | Color | | | ++++ | ColorList | | | ++++ | CurrentDensity | A/m^2 | | | | | (v0.21) | | | | | ++++ | Density | kg/m^3 | | ++++ | Direction | | | ++++ | DissipationRate | m^2/s^3 | | | | | (v0.21) | | | | | ++++ | Distance | m | | ++++ | DynamicViscosity | Pa*s | | | | | (v0.21) | | | | | ++++ | ElectricalCapacitance | F | | | | | (v0.21) | | | | | ++++ | ElectricalConductance | S | | | | | (v0.21) | | | | | ++++ | ElectricalConductivity | S/m | | | | | (v0.21) | | | | | ++++ | ElectricalInductance | H | | | | | (v0.21) | | | | | ++++ | ElectricalResistance | Ohm | | | | | (v0.21) | | | | | ++++ | ElectricCharge | C | | | | | (v0.21) | | | | | ++++ | ElectricCurrent | A | | | | | (v0.21) | | | | | ++++ | ElectricPotential | V | | | | | (v0.20) | | | | | ++++ | Enumeration | | | ++++ | ExpressionEngine | | | ++++ | File | | | ++++ | FileIncluded | | | ++++ | Float | | | ++++ | FloatConstraint | | | ++++ | FloatList | | | ++++ | Font | | | ++++ | Force | N | | ++++ | Frequency | Hz | | ++++ | HeatFlux | W/m^2 | | | | | (v0.21) | | | | | ++++ | Integer | | | ++++ | IntegerConstraint | | | ++++ | IntegerList | | | ++++ | IntegerSet | | | ++++ | InverseArea | 1/m^2 | | | | | (v0.21) | | | | | ++++ | InverseLength | 1/m | | | | | (v0.21) | | | | | ++++ | InverseVolume | 1/m^3 | | | | | (v0.21) | | | | | ++++ | KinematicViscosity | m^2/s | | | | | (v0.21) | | | | | ++++ | Length | m | | ++++ | Link | | | ++++ | LinkChild | | | ++++ | LinkGlobal | | | ++++ | LinkHidden | | | ++++ | LinkList | | | ++++ | LinkListChild | | | ++++ | LinkListGlobal | | | ++++ | LinkListHidden | | | ++++ | LinkSub | | | ++++ | LinkSubChild | | | ++++ | LinkSubGlobal | | | ++++ | LinkSubHidden | | | ++++ | LinkSubList | | | ++++ | LinkSubListChild | | | ++++ | LinkSubListGlobal | | | ++++ | LinkSubListHidden | | | ++++ | LuminousIntensity | cd | | | | | (v0.21) | | | | | ++++ | MagneticFieldStrength | A/m | | | | | (v0.21) | | | | | ++++ | MagneticFlux | Wb or V*s | | | | | (v0.21) | | | | | ++++ | MagneticFluxDensity | T | | | | | (v0.21) | | | | | ++++ | Magnetization | A/m | | | | | (v0.21) | | | | | ++++ | Map | | | ++++ | Mass | kg | | | | | (v0.21) | | | | | ++++ | Material | | | ++++ | MaterialList | | | ++++ | Matrix | | | ++++ | PartShape | | a Part property, is accessed asPart::PropertyPartShape | ++++ | Path | | | ++++ | Percent | | | ++++ | PersistentObject | | | ++++ | Placement | | | ++++ | PlacementLink | | | ++++ | PlacementList | | | ++++ | Position | | | ++++ | Power | W | | | | | (v0.21) | | | | | ++++ | Precision | | | ++++ | Pressure | Pa | | ++++ | PythonObject | | | ++++ | Quantity | | | ++++ | QuantityConstraint | | | ++++ | Rotation | | | ++++ | ShearModulus | Pa | | | | | (v0.21) | | | | | ++++ | SpecificEnergy | m^2/s^2 or J/kg | | | | | (v0.21) | | | | | ++++ | SpecificHeat | J/kg/K | | | | | (v0.21) | | | | | ++++ | Speed | m/s | | ++++ | Stiffness | m/s^2 | | ++++ | Stress | Pa | | | | | (v0.21) | | | | | ++++ | String | | | ++++ | StringList | | | ++++ | Temperature | K | | | | | (v0.21) | | | | | ++++ | ThermalConductivity | W/m/K | | | | | (v0.21) | | | | | ++++ | ThermalExpansionCoefficient | 1/K | | | | | (v0.21) | | | | | ++++ | ThermalTransferCoefficient | W/m^2/K | | | | | (v0.21) | | | | | ++++ | Time | s | | | | | (v0.21) | | | | | ++++ | UltimateTensileStrength | Pa | | | | | (v0.21) | | | | | ++++ | UUID | | | ++++ | VacuumPermittivity | s^4*A^2 / (m^3*kg) | | ++++ | Vector | | | ++++ | VectorDistance | | | ++++ | VectorList | | | ++++ | Velocity | m/s | | | | | (v0.21) | | | | | ++++ | Volume | l or m^3 | | ++++ | VolumeFlowRate | l/s or m^3/s | | | | | (v0.21) | | | | | ++++ | VolumetricThermalExpansionCoefficient | 1/K | | | | | (v0.21) | | | | | ++++ | Work | J | | | | | (v0.21) | | | | | ++++ | XLink | | | ++++ | XLinkList | | | ++++ | XLinkSub | | | ++++ | XLinkSubList | | | ++++ | YieldStrength | Pa | | | | | (v0.21) | | | | | ++++ | YoungsModulus | Pa | | | | | (v0.21) | | | | | ++++

Internally, the property name is prefixed with

App::PropertyBool
App::PropertyFloat
App::PropertyFloatList
...

Remember that these are property types. A single object may have many properties of the same type, but with different names.

For example:

obj.addProperty("App::PropertyFloat", "Length")
obj.addProperty("App::PropertyFloat", "Width")
obj.addProperty("App::PropertyFloat", "Height")

This indicates an object with three properties of type "Float", named "Length", "Width", and "Height", respectively.

Scripting

See also:

FreeCAD scripting basics

A scripted object is created first, and then properties are assigned.

obj = App.ActiveDocument.addObject("Part::Feature", "CustomObject")

obj.addProperty("App::PropertyFloat", "Velocity", "Parameter", "Body speed")
obj.addProperty("App::PropertyBool", "VelocityEnabled", "Parameter", "Enable body speed")

In general, Data properties are assigned by using the object's addProperty() method. On the other hand, View properties are normally provided automatically by the parent object from which the scripted object is derived.

For example:

  • Deriving from App::FeaturePython provides only 4 View properties: "Display Mode", "On Top When Selected", "Show In Tree", and "Visibility".
  • Deriving from Part::Feature provides 17 View properties: the previous four, plus "Angular Deflection", "Bounding Box", "Deviation", "Draw Style", "Lighting", "Line Color", "Line Width", "Point Color", "Point Size", "Selectable", "Selection Style", "Shape Color", and "Transparency".

Nevertheless, View properties can also be assigned using the view provider object's addProperty() method.

obj.ViewObject.addProperty("App::PropertyBool", "SuperVisibility", "Base", "Make the object glow")

Source code

In the source code, properties are located in various src/App/Property* files.

They are imported and initialized in [https://github.com/FreeCAD/FreeCAD/blob/9c27f1078e5ec516fe882aac1a27f5c6c6174554/src/App/Application.cpp#L1681-L1758 src/App/Application.cpp].

{{Code|lang=cpp|code= #include "Property.h" #include "PropertyContainer.h" #include "PropertyUnits.h" #include "PropertyFile.h" #include "PropertyLinks.h" #include "PropertyPythonObject.h" #include "PropertyExpressionEngine.h" }}


documentation index > [Developer Documentation](Category_Developer Documentation.md) > [Python Code](Category_Python Code.md) > Property