|Introduced in version|
|Std Group, PartDesign Body|
The Std Part element was developed to be the basic building block to create mechanical assemblies. In particular, it is meant to arrange objects that have a Part TopoShape, like Part Primitives, PartDesign Bodies, and other Part Features. The Std Part provides an Origin object with local X, Y, and Z axes, and standard planes, that can be used as reference to position the contained objects. In addition, Std Parts may be nested inside other Std Parts to create a big assembly from smaller sub-assemblies.
Although it is primarily intended for solid bodies, the Std Part can be used to manage any object that has a Placement property, so it can also contain Mesh Features, sketches, and other objects derived from the App GeoFeature class.
Do not confuse the PartDesign Workbench, intended to model a single contiguous solid by means of PartDesign Features. On the other hand, the Std Part is not used for modelling, just to arrange different objects in space, with the intention to create assemblies.with the . The first one is a specific object used in the
The workbenches. To group objects arbitrarily without considering their position, use ; this object does not affect the placements of the elements that it contains, it is essentially just a folder that is used to keep the tree view organized.tool is not defined by a particular workbench, but by the base system, thus it is found in the structure toolbar that is available in all
Left: elements inside a Std Part in the tree view. Right: objects positioned in space, referred to the Origin of the Std Part.
- Press the active. button. An empty Part is created and automatically becomes
- To add objects to a Part, select them in tree view, and then drag and drop them over the Part.
- To remove objects from a Part, drag them out of the Part, and onto the document label at the top of the tree view.
- As of v0.19, a given object can only belong to a single Part.
- Double-click the Part in the tree view or open the context menu (right-click) and select Toggle active part to activate or deactivate the Part. If another Part is active, it will be deactivated. See active status for more information.
- At this time, Draft Snap methods do not work on selected Part containers nor on the objects inside of them.
- A Part has no topological shape, therefore 3D operations like Part Boolean cannot be used on a Part itself. For example, you cannot select two Parts, and perform a Part Fuse or Part Cut with them.
In addition to the properties described in App GeoFeature, the App Part class has some properties that help it manage information in the context of an assembly, for example, DataType, DataId, DataLicense, DataLicenseURL, DataColor, and DataGroup.
- DataType (
String): a description for this object. By default, it is an empty string
- DataId (
String): an identification or part number for this object. By default, it is an empty string
- DataLicense (
String): a field to specify the license for this object. By default, it is an empty string
- DataLicenseURL (
String): a field to specify the web address to the license or contract for this object. By default, it is an empty string
- DataColor (
Color): a tuple of four floating point RGBA values
(r,g,b,a)to define the color of the object; by default it is
(1.0, 1.0, 1.0, 1.0), which is displayed as
[255,255,255]on base 255, .
- DataPlacement (
Placement): the position of the object in the 3D view. The placement is defined by a
Basepoint (vector), and a
Rotation(axis and angle). See Placement.
- DataAngle: the angle of rotation around the DataAxis. By default, it is
- DataAxis: the unit vector that defines the axis of rotation for the placement. Each component is a floating point value between
1. If any value is above
1, the vector is normalized so that the magnitude of the vector is
1. By default, it is the positive Z axis,
(0, 0, 1).
- DataPosition: a vector with the 3D coordinates of the base point. By default, it is the origin
(0, 0, 0).
- DataAngle: the angle of rotation around the DataAxis. By default, it is
- DataLabel (
String): the user editable name of this object, it is an arbitrary UTF8 string.
- DataGroup (
LinkList): a list of referenced objects. By default, it is empty
Hidden properties Data
- DataMaterial (
Map): map with material properties. By default, it is empty
- DataMeta (
Map): map with additional meta information. By default, it is empty
- DataUid (
UUID): the universally unique identifier (UUID) (128-bit number) of the object. This is assigned at creation time.
- DataLabel2 (
String): a longer, user editable description of this object, it is an arbitrary UTF8 string that may include newlines. By default, it is an empty string
- DataExpression Engine (
ExpressionEngine): a list of expressions. By default, it is empty
- DataVisibility (
Bool): whether to display the object or not.
- DataOrigin (
Link): the App Origin object that is the positional reference for all elements listed in DataGroup.
- Data_ Group Touched (
Bool): whether the group is touched or not.
The App Part only has the five properties of the basic App FeaturePython, and it does not have hidden properties.
- ViewDisplay Mode (
- ViewOn Top When Selected (
- ViewSelection Style (
BoundBox. If the option is
Shape, the entire shape (vertices, edges, and faces) will be highlighted in the 3D view; if it is
BoundBoxonly the bounding box will be highlighted.
- ViewShow In Tree (
Bool): if it is
true, the object appears in the tree view. Otherwise, it is set as invisible.
- ViewVisibility (
Bool): if it is
true, the object appears in the 3D view; otherwise it is invisible. By default this property can be toggled on and off by pressing the bar in the keyboard.
The Std Part is intended to be the basic building block to create assemblies. Unlike a PartDesign Body, an assembly is meant to be a collection of separate, distinguishable elements which are connected in some way in the physical world, for example, through pressure, screws, or glue.
Examples that could be Parts:
- A wooden table that consists of individual wooden pieces (legs, top), which are put together by glue or metal screws.
- A ball bearing that is composed of multiple steel balls, an inner ring, a retainer, a seal, and an outer ring.
- An assembly of a screw with a washer, and a matching nut.
Left: three individual contiguous solids, each of them modelled by a PartDesign Body. Right: the individual Bodies put together inside a Std Part to create an assembly.
In general terms, when importing a STEP file into the program, the main assembly and its sub-assemblies will be imported as Part containers, each of them containing a simple Part Feature.
An open document can contain multiple Parts. An active Part will be displayed in the tree view with the background color specified by the Active container value in the preferences editor (by default, light blue). An active part will also be shown in bold text.
To activate or de-activate a Part:
- Double click on it on the tree view, or
- Open the context menu (right click) and select Toggle active part.
- The active status of Parts was developed in v0.17 in parallel with the active status of PartDesign Bodies; however, as of v0.19 this status does not serve a real purpose for Parts.
- Even when a Part is active, newly created objects are not placed inside of it automatically. In this case, simply drag these new objects, and drop them onto the desired Part.
- Only a single Part can be active at a time.
Document with two Std Parts, of which the second one is active.
The Origin consists of the three standard axes (X, Y, Z) and three standard planes (XY, XZ and YZ). Sketches and other objects can be attached to these elements when creating them.
Note: the Origin is an App Origin object (
App::Origin class), while the axes and planes are objects of type
App::Plane respectively. Each of these elements can be hidden and unhidden individually with the bar; this is useful to choose the correct reference when creating other objects.
Note 2: all elements inside the Part are referenced to the Part's Origin which means that the Part can be moved and rotated in reference to the global coordinate system without affecting the placement of the elements inside.
The Part's visibility supersedes the visibility of any object it contains. If the Part is hidden, the objects it contains will be hidden as well, even if their individual ViewVisibility property is set to
true. If the Part is visible, then each object's ViewVisibility determines whether the object is shown or not.
The visibility of the Std Part determines whether the objects grouped under it are shown in the 3D view or not. Left: the Part is hidden, so none of the objects will be shown in the 3D view. Right: the Part is visible, so each object controls its own visibility.
Simplified diagram of the relationships between the core objects in the program. The
App::Part class is a simple container that has a position in 3D space, and has an Origin to control the placement of the objects grouped under it.
See Part Feature for the general information on adding objects to the document.
A Std Part (App Part) is created with the
addObject() method of the document. Once a Part exists, other objects can be added to it with the
addObjects() methods of this Part.
import FreeCAD as App doc = App.newDocument() obj = App.ActiveDocument.addObject("App::Part", "Part") bod1 = App.ActiveDocument.addObject("PartDesign::Body", "Body") bod2 = App.ActiveDocument.addObject("Part::Box", "Box") obj.addObjects([bod1, bod2]) App.ActiveDocument.recompute()
You cannot create a scripted
App::Part. However, you can add
App::Part behaviour to a scripted
Part::FeaturePython object by using the following code:
class MyGroup(object): def __init__(self, obj=None): self.Object = obj if obj: self.attach(obj) def __getstate__(self): return def __setstate__(self, _state): return def attach(self, obj): obj.addExtension('App::OriginGroupExtensionPython') obj.Origin = FreeCAD.ActiveDocument.addObject('App::Origin', 'Origin') def onDocumentRestored(self, obj): self.Object = obj class ViewProviderMyGroup(object): def __init__(self, vobj=None): if vobj: vobj.Proxy = self self.attach(vobj) else: self.ViewObject = None def attach(self, vobj): vobj.addExtension('Gui::ViewProviderOriginGroupExtensionPython') self.ViewObject = vobj def __getstate__(self): return None def __setstate__(self, _state): return None App.ActiveDocument.addObject('Part::FeaturePython', 'Group', group.MyGroup(), group.ViewProviderMyGroup(), True)