Nome do objeto
Introdução
All objects in the program have an object name that uniquely identifies them in a given document.
This information applies to all objects derived from App DocumentObject (App::DocumentObject class), which essentially comprises all objects that are possible to create in a document.
Nomes
There are various properties for Names:
- The
Namecan only include simple alphanumeric characters, and the underscore,[_0-9a-zA-Z]. - The
Namecannot start with a number; it must start with a letter or the underscore,[_a-zA-Z]. - The
Nameis assigned at the creation time of the object; afterwards it is no longer editable. The object can never be renamed. - The
Namemust be unique in the entire document. It doesn't matter if two objects are of completely different types, for example, one is a PartDesign Pocket and the other is an Arch Wall. They must have different names. - When creating an object of the same type, normally the name is increased with a sequential number, thus
Box,Box001,Box002, etc. This prevents naming collision. - Once the object is deleted, its
Namebecomes available to be used by a newly created object. This means that ifBox,Box001, andBox002exist, and we delete the first item, the next box created with Part Box will not beBox003, it will beBoxagain, because this string is available to be used once more. Notice that it is not possible to renameBox001orBox002toBoxsince their names are fixed.
In summary, the Name essentially acts like a unique identifier (UID) for an object. Since a unique Name is very restrictive, all objects also have a Label property which allows "renaming" the object to something more descriptive. The internal Name actually remains fixed, but the user editable Label can be used in most situations where the Name would be used. In common usage in the program and the documentation, "renaming" means changing the Label and not the actual Name of the object.
Labels
There are various properties for Labels:
- The
Labelcan accept any UTF8 string, including accents and spaces. - The tree view actually displays the
Labelof the object, not theName. Therefore, whenever a new object is created, it is a good practice to change theLabelto a more descriptive string. To rename (relabel) the object, select it in the tree view and press F2 (or rather Return on macOS), or open the context menu (right-click) and choose Rename. - Even after an object was renamed (relabelled), the internal
Namewill still be reported in many places, for example, in the status bar or in the selection view, when the object is selected. - Since the internal functions of the program refer to the objects by
Name, many dialogs will display theNamefirst, followed by the user editableLabelin parentheses, for example,Box (Extruded piece). - By default the
Labelis unique, just like theName. However, this behavior can be changed in the preferences editor, Edit → Preferences → General → Document → Allow duplicate object labels in one document. This means that in general theLabelis not unique in the document, and may actually be repeated. However, the recommendation is to keep theLabelunique, as this is probably what is most useful to identify different objects. When writing custom functions that manipulate objects, the methods should use theNameof the object rather than itsLabelto guarantee that the correct object is used. - When using expressions, for example, in the property editor or in a spreadsheet, the Label can be referenced using double brackets made of the less than and greater than symbols.
<<Custom Label With Spaces>>.Height
<<Label may use UTF8 characters>>.Width
Label2
It is a simple string that can contain arbitrary text, and therefore can be used for documenting (describing with more detail) the created object.
- In the tree view edit the field next to the icon, under "Description", by clicking on it and pressing F2 (or rather Return on macOS).
- You can also change this property by modifying the
Label2attribute from the Python console. - The DadosLabel2 attribute is normally hidden in the property editor but can be made visible by opening the context menu (right click) and selecting Show all.
Scripting
See also: FreeCAD Scripting Basics, and scripted objects.
Any object in the software is internally created with the addObject() method of the document. The majority of 2D and 3D objects that the user will see in the 3D view are derived from a Part Feature. In the following example, the object created is a Part Box.
import FreeCAD as App
doc = App.newDocument()
obj = doc.addObject("Part::Box", "Name")
obj.Label = "Custom label"
Name
The addObject function has two basic string arguments.
- The first argument indicates the type of object, in this case,
"Part::Box". - The second argument is a string that defines the
Nameattribute. If it is not provided, it defaults to the same name as the class of the object, that is,"Part__Box", where the two invalid symbols, the colons::, are replaced by two underscores__.- The
Namecan only include simple alphanumeric characters, and the underscore,[_0-9a-zA-Z]. If other symbols are given, these will be converted to underscores; for example,"A+B:C*"is converted to"A_B_C_". - The
Namecannot start with a number; it must start with a letter or the underscore,[_a-zA-Z]. For example,"123ABC"is converted to"_23ABC". - The
Nameis fixed at creation time; it cannot be modified afterwards. - The
Namemust be unique in the entire document. If the same"Name"is used, a sequential number will be appended automatically so that the resulting names are unique; for example, if"Name"already exists, then new objects will be called"Name001","Name002","Name003", etc.
- The
Label
The Label is a property of the created object and can be changed to a more meaningful text.
- Upon creating the object, the
Labelis the same as theName. - However, unlike the
Name, theLabelcan accept any UTF8 string, including accents and spaces. - The
Labelcan be changed at any point in time just by assigning the desired string,obj.Label = "New label"
Getting an object by Name or Label
All objects in a document are data attributes of the corresponding Document object. The attribute's name correspond to the internal Name of the object.
import FreeCAD as App
obj1 = App.ActiveDocument.Box
obj2 = App.ActiveDocument.Box001
obj3 = App.ActiveDocument.Box002
This is equivalent to using the getObject method of the Document.
import FreeCAD as App
obj1 = App.ActiveDocument.getObject('Box')
obj2 = App.ActiveDocument.getObject('Box001')
obj3 = App.ActiveDocument.getObject('Box002')
However, it is also possible to get the object by the more descriptive Label.
import FreeCAD as App
obj1 = App.ActiveDocument.getObjectsByLabel("Concrete wall")[0]
obj2 = App.ActiveDocument.getObjectsByLabel("Custom parallelepiped")[0]
obj3 = App.ActiveDocument.getObjectsByLabel("Some special name for this cube__002")[0]
Given that the Label is in general not unique, the getObjectsByLabel method returns a list with all objects found with that Label. However, if the Label is unique in the document then the first element in that list should be the desired object.
- Getting started
- Installation: Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap
- Basics: About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate
- Help: Tutorials, Video tutorials
- Workbenches: Std Base, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub