Scripted objects with attachment/pl

Introduction
The purpose of this page is to show a minimal example of Part Attachment feature using Scripted objects in Python.

See full and complete minimal example below.

The following GIF demonstrates attaching our custom box to a cylinder, and automatically updating it's position when the cylinder's position changes.



NOTE: The box is our custom scripted object, and the cylinder is a regular FreeCAD object generated from the Part workbench.

Add Attach Extension
First, we need to add the  extension to our   oject in the constructor, or   method, of our custom scripted object. Without adding this code, we'll see the following warning dialog when attaching our custom scripted object to another object.



Update Position Based on Attached Object
Then, in the `execute` method of our custom scripted object, we need to call the `positionBySupport` on our `Part::FeaturePython` object. Without calling, our custom scripted object won't update it's position when the position of the attached-to object changes.

Tested With the Following FreeCAD Version
Tested with the following FreeCAD version information: OS: Ubuntu 18.04.3 LTS Word size of OS: 64-bit Word size of FreeCAD: 64-bit Version: 0.18.16146 (Git) AppImage Build type: Release Branch: (HEAD detached at 0.18.4) Hash: 980bf9060e28555fecd9e3462f68ca74007b70f8 Python version: 3.6.7 Qt version: 5.6.2 Coin version: 4.0.0a OCC version: 7.3.0 Locale: English/UnitedStates (en_US)

Note: For FreeCAD 0.19 this tutorial needs a minor update: The second argument of the`addExtension` method got deprecated. For details see https://forum.freecadweb.org/viewtopic.php?f=10&t=54370