Placement/es

Introducción
Placement o Ubicación es el modo en que Freecad especifica la localización y la inclinación (orientación) de un objeto en el espacio. Placement puede ser especificado de múltiples formas y manipulado a través de Código, del Editor de propiedades o seleccionando desde el menú  para abrir el Panel de tareas de Ubicación.

Accediendo a los atributos de Placement
Se puede acceder y modificar los atributos de Ubicación de un objeto de 3 maneras:







Tipos de Ubicación
La ubicación es almacenada internamente como una posición y una rotación (el eje de rotación y el ángulo transformados en un cuaternión quaternion). Mientras que hay diferentes formas de especificar una rotación, por ejemplo con un centro de rotación, esto se usa únicamente con fines de cálculo de rotación y no es almacenado para operaciones posteriores. De manera similar, si se especifica un eje de rotación de (1,1,1), puede ser normalizado cuando es almacenado en el cuaternión y aparece como (0.58, 0.58, 0.58) cuando se observa el objeto después.

Ángulo, Eje y Posición
Placement = [Ángulo, Eje, Posición]

La primera forma de Ubicación fija la localización de un objeto en el espacio con una posición, y describe su orientación como una simple rotación sobre un eje. Ángulo = r es un escalar que indica la cantidad de rotación sobre un Eje. Se introduce en grados, pero se almacena internamente en radianes.

Eje = (ax,ay,az) Es un vector que describe un eje de rotación (Ver Nota sobre eje de rotación). Ejemplos: (1,0,0)      ==> sobre el eje X (0,1,0)      ==> sobre el eje Y (0,0,1)      ==> sobre el eje Z (0.71,0.71,0) ==> sobre la línea y=x

Se puede observar que también es posible trasladar (mover) un objeto a lo largo de su eje de rotación (movimiento axial) introduciendo la distancia a mover en la casilla y pulsando el botón. (Una manera de visualizar el movimiento axial es pensando en un aeroplano con una hélice giratoria en su morro -- la hélice gira alrededor de un eje de rotación mientras el avión se mueve a lo largo de ese mismo eje.) Los valores del vector pueden ser pensados como la cantidad relativa de movimiento que se aplicará en esa dirección. Por ejemplo, en el caso de que y=x (0.71,0.71,0) el valor contenido en la casilla Axial es aplicado en la misma medida en las direcciones X e Y, pero no aparece ningún movimiento en la dirección Z. Posición= (x,y,z) Es un vector que describe el punto desde el que la geometría del objeto será calculada (de hecho, un "origen local" del objeto). Observe que en la programación, Placement.Base se usa para señalar el componente de Posición de un emplazamiento. El editor de propiedades llama a este valor Position y el panel de tareas de Placement o Ubicación lo llama Traslación.

Ángulos de Euler: Posición y Yaw (Guiñada), Pitch (Cabeceo) y Roll (Alabeo)
Si en Rotación seleccionamos Ángulos de Euler aparecen estos campos:

Rotación = [Traslación, Guiñada-Cabeceo-Alabeo] Roll (Alabeo) o Ángulo de rotación alrededor del eje X. Pitch (Cabeceo) o Ángulo de rotación alrededor del eje Y. Yaw (Guiñada) o Ángulo de rotación alrededor del eje Z. Estos términos son usados en aviación.

La segunda forma de Ubicación fija la localización de un objeto en el espacio con una Posición (como en la primera forma), pero describe su orientación usando los ángulos Yaw, Pitch y Roll. Estos ángulos son llamados a veces Ángulos de Euler o Ángulos Tait-Bryan. Yaw, Pitch y Roll (Guiñada, Cabeceo y Alabeo) son términos usados habitualmente en aviación y se usan para la orientación de un Body (cuerpo).

Posición = (x,y,z) Es un vector que describe el punto desde el que la geometría del objeto será calculada (de hecho, un "origen local" del objeto).

Yaw-Pitch-Roll = (y,p,r) Es una tupla o agrupación de valores que especifica la orientación de un objeto. Los valores para y,p,r especifican los grados de rotación de cada uno de los ejes z,y,x (ver nota).

App.Rotation(10,20,30) = Ángulo Euler

Yaw o Guiñada = 10 grados (Z)

Pitch o Cabeceo = 20 grados (Y)

Roll o Alabeo = 30 grados (X)

Yaw o Guiñada es la rotación alrededor del eje Z, es decir, una rotación de izquierda a derecha. (El ángulo yaw es la Psi ψ).

Pitch o Cabeceo es la rotación alrededor del eje Y, es decir, morro arriba y morro abajo. (El ángulo Pitch es la Phi φ).

Roll o Alabeo es la rotación alrededor del eje X, es decir, ala arriba o abajo. (El ángulo Roll es la Thêta θ).

Matrix
Placement = Matrix

La tercera forma de Placement define la posición y orientación de un objeto en el espacio con una matriz de dimensiones 4x4 que representa una transformación afín (Affine Transformation).

Matrix =

((r11,r12,r13,t1),   (r21,r22,r23,t2),    (r31,r32,r33,t3),    (0,0,0,1)), with rij specifying rotation and ti specifying translation.

((r11,r12,r13,t1),   (r21,r22,r23,t2),    (r31,r32,r33,t3),    (0,0,0,1)), donde rij indican rotación y ti indican translación.

El diálogo Placement
The Placement Dialog es llamado desde el menu Edit. Se usa para rotar/trasladar los objetos con precisión. Tambien se usa cuando necesitamos crear un sketch (croquis) en un plano "no standard" o cambiar la orientación del plano del croquis a otro plano. La sección Translation ajusta la localización del objeto en el espacio. La sección Center ajusta el eje de rotación a uno que no pasa por el punto de referencia del objeto. La sección Rotation ajusta el ángulo (o ángulos) de rotación, y el modo de especificar esos ángulos. Marcar la casilla de selección aplica cambios incrementales sobre el placement (emplazamiento) del objeto es útil cuando las translations/rotations han de ser hechas respecto a las position/attitude actuales del objeto, en lugar de las position/attitude originales. Marcando esa casilla se resetea a cero los campos de entrada del cuadro de diálogo, aunque no cambia la orientation or location del objeto. Datos introducidos posteriormente cambian la orientation/location, pero se aplican a la posición actual del objeto.

Ejemplos
Rotations alrededor de un solo eje:

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:

Antes de la Rotation (visto desde arriba)

Después de Rotation respecto a Z (top view)

Después de Rotation respecto a y=x (vista desde la derecha)

Rotation con centro de giro desplazado:

antes de la Rotation (top view)

Después de Rotation respecto a Z (vista en planta)

Rotation usando ángulos de Euler:

Antes Rotation

Despues Rotation

Placement.Base vs Shape Definition
Placement no es la única manera de definir la posición de una forma en el espacio. Observa la consola de Python en esta imagen:



Los 2 cubos tienen el mismo valor de Placement, pero están en diferentes locations! Esto es así porque las 2 formas están definidas por vértices diferentes. Para las 2 formas de la ilustración superior:

>>> 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  >>> Los Vértices (or Vectors) que define la forma usan el atributo Placement.Base como su origen. Así, si quieres mover una forma 10 unidades a lo largo del eje X, puedes añadir 10 a la coordenada X de todos los Vértices o, alternativamente, puedes establecer Placement.Position a (10,0,0).

Usar "Center" para controlar el eje de rotación
Por defecto, el eje de rotación no es realmente el eje x/y/z. Es una linea paralela al eje seleccionado, pero pasando por el punto de referencia (Placement.Base) del objeto que va a ser rotado. Ese comportamiento puede ser cambiado usando los campos Center en el diálogo Placement o, en scripts, usando el parámetro Center del constructor FreeCAD.Placement.

Por ejemplo, supongamos que tenemos un bloque (ver ilustración debajo) en las coordenadas (20,20,10).

Queremos girarlo sobre su propio eje vertical (es decir el eje Z "local"), pero manteniéndolo en el mismo lugar. Podemos conseguirlo facilmente indicando como valor de Center las coordenadas del punto central del bloque, que son (25,25,15).

En un script, haríamos así: Same script with the file example RotateCoG2.fcstd (discussion on the forum)

Using Placement in expressions
In expressions it is possible to use the components of the placement for example to access the x-component of the object labeled "Cube":

You can also use the whole Placement in a single expression: Right click on Placement property in the property editor, select "show all" then extra properties will show. If you then right click on Placement again the context menu will include Expression, select Expression then the Expression dialogue will open and whatever you type will go into the Placement property rather than its child properties.

To make the placement of "Sketch" equal to that of "Cylinder", you would enter in that way for Sketch the expression



Notas

 * Ejes y ángulo también pueden expresarse como un quaternion.
 * El punto de referencia de un objeto (FreeCAD.Placement.Base) puede ser distinto, según el objeto de que se trate. Ejemplos para algunos objetos usuales:

Versiones

 * A partir de la version 0.13, la modificación de las propiedades de Placement desde la pestaña Data ha sido desactivada para objetos creados con el entorno PartDesign, salvo para el sketch inicial a partir del cual se creó el sólido. En consecuencia, el Placement de un sólido creado en PartDesign a partir de un sketch solo puede ser modificado ajustando los parámetros Placement del sketch inicial de construcción (el primer sketch, desde el que se creó el sólido).


 * La funcionalidad Placement será manejada eventualmente en el entorno Assembly workbench.

Mas

 * El tutorial: Aeroplane trata ampliamente los mecanismos de modificación del Placement de un objeto.
 * Puede encontrarse una explicación detallada, paso a paso, del diálogo Placement aquí: Tasks_Placement.

Issues

 * Relative Placement of objects will eventually be handled in the Assembly workbench.

More

 * This tutorial: Aeroplane covers the mechanics of changing an object's Placement extensively.