Placement/fr

Description
Le Positionnement (Placement en anglais) est la fonction qu'utilise FreeCAD pour spécifier l'emplacement et la position (orientation) d'un objet dans l'espace. La fonction Positionnement peut être accessible de plusieurs manières :
 * via un script Python à partir de la console, et de son API.
 * ou dans la fenêtre Vue combinée → Propriétés → Données → Placement → ,
 * ou par le menu Édition → Positionnement....

L'accès aux propriétés de Placement
Les attributs de la fonction Placement d'un objet peuvent être accessibles et modifiables de 3 façons:







Angles, Axes et Position
Le placement est stocké en interne comme une position, et une rotation (axe de rotation et l'angle d'inclinaison sont transformé en un quaternion Quaternions_et_rotation_dans_l'espace). Bien qu'il existe plusieurs modes de spécifications pour une rotation, par exemple avec un centre de rotation. De même, si un axe de rotation (1,1,1) est spécifié, il est normalisé et stocké dans le quaternion et apparaissant comme (0,58, 0,58, 0,58).

Angle, Axis et Position
Placement = [Angle, Axis, Position]

Placement : fixe la Position de l'objet dans l'espace et décrit son orientation avec rotation autour d'un axe donné. Angle = r : est un scalaire qui indique les angles de rotation de l'objet sur l'axe donné. La saisie se fait en degrés, mais en interne la valeur est convertie et stockée en radians.

Axis = (ax,ay,az) est un vecteur décrivant l'axe de rotation (voir la note sur l'axe de rotation). les exemples sont: (1,0,0)      ==> sur l'axe X (0,1,0)      ==> sur l'axe Y (0,0,1)      ==> sur l'axe Z (0.71,0.71,0) ==> sur l'alignement y=x Position = (x,y,z) est un vecteur décrivant le point à partir duquel la géométrie de l'objet sera calculé ("position d'origine" de l'objet). Notez que dans les scripts, Placement.Base est utilisé pour désigner la composante de position du placement. L'éditeur de propriétés appelle cette valeur "Position" et la boîte de dialogue Placement s'appelle "Translation".

Note that it is also possible to translate (move) an object along this axis of rotation (axial motion) by entering the distance to move in the Axial spinbox and clicking the Apply axial button. (One way to envision axial motion is to think of an airplane with a propeller spinning on its nose -- the propeller spins about an axis of rotation while the plane moves along that same axis.) The values in the vector can be thought of as the relative amount of motion that will be applied in that direction. For example, in the y=x case (0.71,0.71,0) the value contained in the Axial spinbox gets applied in equal measure to the X and Y directions, but no movement happens in the Z direction. Position = (x,y,z) is a Vector describing the point from which the object's geometry will be calculated (in effect, a "local origin" for the object). Note that in scripts, Placement.Base is used to denote the Position component of a placement. The Property Editor calls this value "Position" and the Placement dialog calls it "Translation".

Position avec Yaw, Pitch et Roll


Placement = [Position, Yaw-Pitch-Roll]

La seconde forme de Placement fixe la position d'un objet dans l'espace (comme dans la première forme), mais il décrit l'orientation angulaire à l'aide de Yaw, Pitch et Roll (/ wiki / Yaw, _pitch, _and_roll Yaw, Pitch, Roll). Ces angles sont parfois appelés angles d'Euler ou Tait-Bryan angles (Euler angles). Lacet, Roulis et Tangage sont des termes communs en aviation pour l'orientation (ou l'attitude) d'un corps.

Position = (x,y,z) est le Vecteur décrivant le point à partir duquel la géométrie de l'objet sera calculée ("l'origine locale" de l'objet).

Yaw-Pitch-Roll = (y,p,r) est un tuple qui spécifie la rotation de l'objet. Les valeurs de y, p, r indiquent les angles de rotation autour des axes z, y, et x (voir note).

App.Rotation(10,20,30) = Euler Angle

Yaw = 10 degrés (Z)

Pitch = 20 degrés (Y)

Roll = 30 degrés (X)

Yaw est une rotation autour de l'axe Z, rotation de gauche à droite sur l'axe Z. (Lacet) (L'angle yaw est représenté par Psi ψ).

Pitch est la rotation sur l'axe Y, cabré ou piqué. (Tangage) (L'angle Pitch est représenté par Phi φ).

Roll est la rotation sur l'axe X, tangage latéral de gauche à droite. (Roulis) (L'angle Roll est représenté par Thêta θ).

Matrix
Placement = Matrix

La troisième forme de Placement, décrit la position de l'objet et l'orientation avec une matrice de transformation affine de 4 x 4 (Transformation Affine).

Matrice =

((r11,r12,r13,t1),   (r21,r22,r23,t2),    (r31,r32,r33,t3),    (0,0,0,1)), spécifie la rotation et la translation.

Boîte de dialogue Placement
La boîte de dialogue placement est accessible par le menu Édit. Il est utilisé pour faire pivoter et positionner les objets avec précision. Il est également utilisé lorsque nous avons besoin de créer une esquisse sur un plan "non standard" ou changer l'orientation d'une esquisse dans un nouveau plan. La section Translation déplace l'objet dans l'espace. La section 'Center permet d'ajuster l'axe de rotation qui ne passe pas par le point de référence de l'objet. La section Rotation ajuste l'angle(s) de rotation et la méthode de spécification de ces angles. Le Appliquer les modifications incrémentielles du placement des objets cette case est utile lorsque les translations/rotations doivent être faites par rapport à position position/attitude actuelle de l'objet, plutôt que de la position/attitude originale de l'objet. Une fois cochée cette case réinitialise à zéro tous les champs de la boîte de dialogue, mais ne modifie pas l'orientation ou l'emplacement de l'objet. Les entrées suivantes font changer l'orientation/emplacement, mais sont appliquées à partir de la position actuelle de l'objet.

But while the elements within each section generally apply to the purpose of that section there are also some elements in one section that can affect elements in another section. For example, clicking the Selected points button in the Center section with 2 points selected in the 3d view results in not only populating the Center coordinate spinboxes with the coordinates of the midpoint between those 2 selected points, but it also creates a custom axis along the line defined by those 2 selected points in the Rotation section. In another example, placing a value in the Axial spinbox and clicking the Apply axial button in the Translation section translates (moves) the object along the axis defined in the Rotation section. The Apply incremental changes to object placement tick box is useful when translations/rotations are to be made relative the object's current position/attitude, rather than to the original position/attitude. Ticking this box resets the dialogue input fields to zero, but does not change the object's orientation or location. Subsequent entries do change the orientation/location, but are applied from the object's current position. Enabling this checkbox is also useful when using the Selected points button as it can sometimes prevent undesired placement changes.

PS: since version 0.17 introduce new object Part, this object have his placement, and the Placement object created in the Part object is incremented with the Part Placement. For obtain the Part Placement use this code

Selected points button is used to populate the coordinates in the Center coordinates spinboxes and (when 2 or 3 points are selected) additionally to create a custom (user-defined) axis of rotation in the Rotation section. A point can be a vertex, but it can also be any point along an edge or on a face. When you select an edge or face the entire edge or face is selected, but FreeCAD also remembers which point on that face or edge the mouse pointer was hovering over when that edge or face was selected. It is this point's coordinates that get used in the Placement dialog when the Selected points button is clicked. You might be thinking this isn't a very precise way of selecting a point, and you are correct, but in many cases it is sufficient that the point selected is guaranteed to be on that edge or face. In cases where you need to precisely designate a point to be used you should select a vertex. When there is no vertex in the desired location consider creating one, perhaps in a temporary sketch attached to that face or edge, perhaps using a Draft workbench object, such as a line or point, etc.

Let us first consider the simple case of selecting 1 point. The workflow is to first select the desired point, then click the Selected points button. The coordinates of the selected point will be used to populate the X, Y, and Z spinboxes within the Center section. Now any rotation done on the object will about this center of rotation.

Now consider the case of selecting 2 points. You would select the 2 desired points, and then click the Selected points button. The coordinates of the midpoint between the 2 selected points get placed into the X, Y, and Z spinboxes within the Center section. Now any rotation done on the object will be about this center of rotation. But in addition to setting up the Center section coordinates a custom (user-defined) axis is also added to the Axis element within the Rotation section. (Note: if you were in Euler rotation mode, the mode gets switched to Rotation with an axis mode and the new custom axis is selected as the current axis of rotation.) Now any rotation done using the new custom axis will be about this axis of rotation. As an added bonus, the distance is measured between the 2 selected points, and this information is given in the Report View. (Note: Hold down the Shift key while clicking the Selected points button to copy the distance measurement to the clipboard.) By entering this distance into the Axial spinbox in the Translation section and clicking the Apply axial button you can translate (move) the object so that the first selected point now occupies the coordinates occupied by the second selected point (at the time the Selected points button was clicked).

Now consider the case of selecting 3 points. You would select the 3 desired points, and then click the Selected points button. The coordinates of the first selected point (order of selection is very important here) get placed into the X, Y, and Z spinboxes within the Center section. Since 3 points define a plane FreeCAD is able to take advantage of that and use those 3 points to create a new custom (user-defined) axis of rotation that is normal (perpendicular) to that defined plane. As with 2 selected points, the distance between points is also shown in the Report View, but this time it is the distance between the 2nd and 3rd selected points. (Note: Hold down the Shift key while clicking Selected points button -- Shift + Click -- to copy the angle measurement to the clipboard.) Additionally, the angle between the 2nd and 3rd points is also measured and displayed in the Report View. By entering this angle into the Angle spinbox within the Rotation section we can very precisely rotate the object such that now the 2nd selected point is in alignment with the coordinates occupied by the 3rd selected point. (Note: you might want to increase the number of digits used within the Edit menu -> Preferences -> General -> Units -> Number of decimals spinbox if you desire more precision.)

Examples
Rotations about a single axis:

Avant Rotation (top view)

Après Rotation sur l'axe Z (top view)

Après Rotation sur l'axe y=x (right view)

Rotation with offset centre point:

Avant Rotation (top view)

Après Rotation sur l'axe Z (top view)

Rotation en utilisant Euler angles:

Avant Rotation

Après Rotation

Placement.Base Définition d'un shape
La fonction placement n'est pas le seul moyen de positionnement d'une forme dans l'espace. Notez la console Python dans cette image:



Les deux cubes ont la même valeur de Placement, mais sont à des emplacements différents! C'est parce que les 2 formes sont définies par des sommets différents (courbes et formes plus complexes). Pour les 2 formes dans l'illustration ci-dessus:

>>> ev = App.ActiveDocument.Extrude.Shape.Vertexes >>> for v in ev: print v.X,",",v.Y,",",v.Z ...   30.0,30.0,0.0 30.0,30.0,10.0 40.0,30.0,0.0  40.0,30.0,10.0  40.0,40.0,0.0  40.0,40.0,10.0  30.0,40.0,0.0  30.0,40.0,10.0  >>> e1v = App.ActiveDocument.Extrude001.Shape.Vertexes >>> for v in e1v: print v.X,",",v.Y,",",v.Z ...   0.0,10.0,0.0 0.0,10.0,10.0 10.0,10.0,0.0  10.0,10.0,10.0  10.0,0.0,0.0  10.0,0.0,10.0  0.0,0.0,0.0  0.0,0.0,10.0  >>> Les Vecteurs définissants le shape utilisent l'attribut Placement.Base comme origine. Donc, si vous voulez déplacer une forme de 10 unités le long de l'axe X, vous pouvez ajouter 10 à la coordonnées X de tous les sommets ou vous pouvez régler le Placement.Base à (10,0,0).

Utiliser "Center" pour contrôler l'Axe de Rotation
Par défaut, l'axe de rotation l'axe x/y/z. C'est une ligne parallèle à l'axe sélectionné, passant par le point de référence (Placement.Base) de l'objet qui doit être pivoté. Ceux ci peuvent être modifiés en utilisant les champs dans la boîte de dialogue Placement ou, dans les scripts, en utilisant le paramètre FreeCAD.Placement.

Par exemple, supposons que nous ayons un cube (ci-dessous) positionné aux coordonnées (20,20,10).



Nous voulons faire tourner le cube autour de son axe vertical (c'est à dire local Z), tout en gardant la même position. Nous pouvons facilement y parvenir en spécifiant une valeur de centre égale aux coordonnées du point central du cube (25,25,15).

Dans un script ,nous aurons : Même script avec le fichier exemple RotateCoG2.fcstd (la discussion sur le forum)

Limitations
C'est pourquoi la mise en place d'un solide créé dans PartDesign à partir d'une esquisse ne peut être modifiée qu'en ajustant les paramètres de la construction initiale de l'esquisse (la première esquisse) du solide créé.
 * Depuis la version 0.13, la mise à jour des propriétés de positionnement dans l'onglet Données a été désactivée pour les objets créés dans l'atelier PartDesign, à l'exception de l'esquisse initiale du solide créé.


 * La fonctionnalité de placement sera éventuellement traitée dans l'atelier d'assemblage, à venir dans une version ultérieure.

En savoir plus

 * Le tutoriel: Aéroplane traite largement des mécanismes de modifications de position d'un objet.
 * Une explication détaillée sur la fonction Placement peut être trouvée ici Tasks_Placement.