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. Properties can be viewed and modified with the Property editor.
Properties play a very important part in FreeCAD, since it has been designed to work with parametric objects, which are objects defined only by their properties.
Custom scripted objects in FreeCAD can have properties of the following types:
Boolean Float FloatList FloatConstraint Angle Distance Integer IntegerConstraint Percent Enumeration IntegerList String StringList Link LinkList Matrix Vector VectorList Placement PlacementLink Color ColorList Material Path File FileIncluded PartShape FilletContour Circle
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 PropertyLink:_InList_and_OutList
All property types
Custom scripted objects can use any of the property types defined in the base system:
Bool Float FloatList FloatConstraint Angle Distance ExpressionEngine Integer IntegerConstraint Percent Enumeration IntegerList String StringList Length Link LinkList LinkSubList Matrix Vector VectorList VectorDistance Placement PlacementLink PythonObject Color ColorList Material Path File FileIncluded PartShape FilletContour Circle
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.
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.
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.
- Deriving from
App::FeaturePythonprovides only 4 View properties: "Display Mode", "On Top When Selected", "Show In Tree", and "Visibility".
- Deriving from
Part::Featureprovides 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
obj.ViewObject.addProperty("App::PropertyBool", "SuperVisibility", "Base", "Make the object glow")
In the source code, properties are located in various src/App/Property* files.
They are imported and initialized in
#include "Property.h" #include "PropertyContainer.h" #include "PropertyUnits.h" #include "PropertyFile.h" #include "PropertyLinks.h" #include "PropertyPythonObject.h" #include "PropertyExpressionEngine.h"