Placement/es: Difference between revisions

From FreeCAD Documentation
No edit summary
No edit summary
Line 135: Line 135:
Rotación con el punto central desplazado:
Rotación con el punto central desplazado:


[[Image:RotationOffsetBefore.png|600px|left|Before Rotation]] antes de la Rotation (top view) {{clear}}
[[Image:RotationOffsetBefore.png|600px|left|Before Rotation]] Antes de Rotación (Vista superior) {{clear}}

[[Image:RotationOffsetAfter.png|600px|right|After Rotation about Z]] Después de Rotation respecto a Z (vista en planta) {{clear}}
[[Image:RotationOffsetAfter.png|600px|right|After Rotation about Z]] Después de Rotación alrededor de Z (Vista superior) {{clear}}

Rotation usando ángulos de Euler:
Rotación usando ángulos de Euler:


[[Image:RotationEulerBefore.png|600px|left|Before Rotation]] Antes Rotation {{clear}}
[[Image:RotationEulerBefore.png|600px|left|Before Rotation]] Antes Rotation {{clear}}

Revision as of 16:20, 13 June 2021

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ú Editar → Ubicación... 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:

Placement o Ubicación en el panel de propiedades
Código de Placement como y/p/r y Matriz de su API.
Panel de tareas de Placement o Ubicación

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 Axial: 0.0mm y pulsando el botón Aplicar axial. (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:

Placement task panel: Euler angles selected

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.getDocument("Sin_nombre").Cylinder.Placement=App.Placement(App.Vector(0,0,0), App.Rotation(10,20,30), App.Vector(0,0,0))

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 θ).

Matriz

Placement = Matriz

La tercera forma de Ubicación describe la posición y orientación del objeto con una matriz de transformación afín de 4x4 (Affine Transformation).

Matriz =

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

La ventana de diálogo Ubicación

La ventana de diálogo Ubicación es invocada desde el menú Editar. Se usa para precisar la rotación/traslación de los objetos. También se usa cuando se necesita crear un boceto en un plano "no estándar" o para cambiar la orientación de un boceto a un nuevo plano.

El apartado Traslación ajusta la localización del objeto en el espacio. El apartado Centro ajusta el eje de rotación a uno que no pasa a través del punto de referencia del objeto. El apartado Rotación ajusta el ángulo o ángulos de rotación y la manera de especificarlos.

Pero mientras los elementos dentro de cada sección se aplican generalmente al propósito de cada sección, hay también algunos elementos en una sección que pueden afectar a los de otra sección. Por ejemplo, pinchando el botón de Puntos seleccionados en la sección Centro con 2 puntos seleccionados en la vista 3D, resulta no sólo el hecho de introducir las coordenadas en las casillas de Centro con las coordenadas de los puntos medios entre esos dos puntos seleccionados, sino que también crea un eje personalizado a lo largo de la línea definida por esos dos puntos seleccionados en la sección Rotación . Otro ejemplo es, introduciendo un valor en la casilla de Axial y pinchando el botón de Aplicar axial en la sección Traslación , traslada (mueve) el objeto a lo largo del eje definido en la sección Rotación .

La casilla Aplicar cambios incrementales es útil cuando las traslaciones/rotaciones se tienen que aplicar con respecto a la actual posición/orientación relativa del objeto. Pinchando esta casilla, los campos de diálogo de entrada se resetean a cero, pero no cambia la orientación o localización del objeto. La introducción de datos posteriores sí cambiarán la orientación/localización, pero son aplicados desde la actual posición del objeto. Habilitar esta casilla es útil también cuando se usa el botón de Puntos seleccionados para prevenir cambios de emplazamiento no deseados.

PD: Desde la versión 0.17, introduciendo nuevo objeto de Part, dicho objeto tiene su emplazamiento, y el emplazamiento del objeto creado en el objeto Part es incrementado con la Ubicación de Part. introducido en la versión 0.17 Para obtener la Ubicación de Part, usar el siguiente código:

import Draft, Part
sel = FreeCADGui.Selection.getSelection()
print sel[0].Placement
print sel[0].getGlobalPlacement()   # return the GlobalPlacement
print sel[0].getParentGeoFeatureGroup() # return the GeoFeatureGroup, ex:  Body or a Part.
print  "____________________"

El botón de Puntos seleccionados se usa para introducir las coordenadas en la sección Centro en las casillas de coordenadas y adicionalmente (cuando se seleccionan 2 o 3 puntos) para crear un eje de rotación personalizado (definido por el usuario) en la sección Rotación . Un punto puede ser un vértice, pero puede ser también cualquier punto a lo largo de una arista o sobre una cara. Cuando se selecciona una arista o cara, la arista o cara son seleccionadas al completo, pero Freecad también recuerda sobre qué punto de la cara o arista se encontraba el puntero del ratón cuando esa arista o cara fueron seleccionadas. Son las coordenadas de ese punto las que se introducirán en la caja de diálogo de Ubicación cuando se pulse el botón de Puntos seleccionados . Se puede pensar que esta no es una manera muy precisa de seleccionar un punto, y es cierto, pero en muchos casos está suficientemente asegurado que ese punto seleccionado está en esa arista o cara. En los casos en los que se necesita designar un punto para ser usado con precisión, se debe seleccionar un vértice. Cuando no hay un vértice en la localización deseada, se debe considerar la creación de uno, quizás en un boceto temporal adjunto a esa cara o arista, o quizás usando un objeto del banco de trabajo Draft, como una línea o punto, etc.

Vamos primero a considerar el simple caso de seleccionar un punto. El flujo de trabajo es, primero, seleccionar el punto deseado, después pulsar el botón Puntos seleccionados . Las coordenadas del punto seleccionado serán usadas para rellenar las casillas X, Y, y Z de la sección Centro . A partir de aquí cualquier rotación realizada al objeto será aplicada alrededor de este centro de rotación.

Vamos ahora a considerar el caso de seleccionar 2 puntos. Hay que seleccionar los 2 puntos deseados, y entonces pulsar el botón Puntos seleccionados . Las coordenadas del punto medio entre los 2 puntos seleccionados quedan introducidas en las casillas X, Y, y Z de la sección Centro . A partir de aquí cualquier rotación realizada al objeto será aplicada alrededor de este centro de rotación. Pero además de establecer las coordenadas de la sección Centro como personalizadas (definidas por el usuario) , el eje es también añadido al elemento Eje de la sección Rotación . (Nota: Estando en el modo de rotación Euler, el modo cambia al modo de Rotación con un eje y el nuevo eje personalizado es seleccionado como el actual eje de rotación.) A partir de aquí cualquier rotación realizada usando el nuevo eje personalizado lo hará alrededor de este eje de rotación. Por añadidura, la distancia es medida entre los 2 puntos seleccionados, y esta información es mostrada en la Vista de informe. (Nota: Mantener pulsada la tecla Shift (Mayúsculas) mientras se presiona el botón Puntos seleccionados para copiar la medida de distancia al portapapeles.) Introduciendo esta distancia en la casilla Axial de la sección Traslación y pulsando el botón Aplicar axial se puede trasladar (mover) el objeto para que el primer punto seleccionado ocupe ahora las coordenadas ocupadas por el segundo punto seleccionado (en el momento en que el botón Puntos seleccionados fue pulsado).

A continuación vamos a considerar el caso de seleccionar 3 puntos. Hay que seleccionar los 3 puntos deseados, y entonces pulsar el botón Puntos seleccionados . Las coordenadas del primer punto seleccionado (el orden de selección es muy importante aquí) quedan introducidas en las casillas X, Y, y Z de la sección Centro . Como 3 puntos definen un plano, FreeCAD es capaz de tomar ventaja de esto y usar estos 3 puntos para crear un nuevo eje de rotación personalizado (definido por el usuario) que es normal (perpendicular) a este plano definido. Al igual que seleccionando 2 puntos, la distancia entre puntos es también mostrada en la Vista de informe, pero esta vez es la distancia entre el segundo y el tercer punto seleccionado. (Nota: Mantener pulsada la tecla Shift (Mayúsculas) mientras se presiona el botón Puntos seleccionados -- Shift + Click -- para copiar la medida del ángulo al portapapeles.) Adicionalmente, el ángulo entre el segundo y el tercer punto es también medido y mostrado en la Vista de informe. Introduciendo este ángulo en la casilla Ángulo de la sección Rotación se puede rotar el objeto con mucha precisión, de forma que ahora el segundo punto seleccionado queda alineado con las coordenadas ocupadas por el tercer punto seleccionado. (Nota: Se puede incrementar el número de dígitos usados a través de la casilla del menú Editar -> Preferencias -> General -> Unidades -> Número de decimales si se desea una mayor precisión.)

Ejemplos

Rotaciones alrededor de un eje simple:

Before Rotation
Before Rotation

Antes de Rotación (Vista superior)

After Rotation about Z
After Rotation about Z

Después de Rotación alrededor de Z (Vista superior)

After Rotation about y=x
After Rotation about y=x

Después de Rotación alrededor de y=x (Vista desde la derecha)

Rotación con el punto central desplazado:

Before Rotation
Before Rotation

Antes de Rotación (Vista superior)

After Rotation about Z
After Rotation about Z

Después de Rotación alrededor de Z (Vista superior)

Rotación usando ángulos de Euler:

Before Rotation
Before Rotation

Antes Rotation

After Rotation
After 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:

2 Shapes with Same Placement

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).

Before Rotation

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).

After Rotation

En un script, haríamos así:

import FreeCAD
obj = App.ActiveDocument.Box                       # our box
rot = FreeCAD.Rotation(FreeCAD.Vector(0,0,1),45)   # 45° about Z
#rot = FreeCAD.Rotation(FreeCAD.Vector(1,0,1),45)   # 45° about X and 45° about Z
#rot = FreeCAD.Rotation(10,20,30)                   # here example with Euler angle Yaw = 10 degrees (Z), Pitch = 20 degrees (Y), Roll = 30 degrees (X) 
centre = FreeCAD.Vector(25,25,15)                  # central point of box 
pos = obj.Placement.Base                           # position point of box
newplace = FreeCAD.Placement(pos,rot,centre)       # make a new Placement object
obj.Placement = newplace                           # spin the box

Same script with the file example RotateCoG2.fcstd (discussion on the forum)

import FreeCAD
obj = App.ActiveDocument.Extrude                    # our box
rot = FreeCAD.Rotation(FreeCAD.Vector(0,0,1),45)    # 45 about Z
#rot = FreeCAD.Rotation(FreeCAD.Vector(1,0,1),45)    # 45° about X and 45° about Z
#rot = FreeCAD.Rotation(10,20,30)                    # here example with Euler angle Yaw = 10 degrees (Z), Pitch = 20 degrees (Y), Roll = 30 degrees (X) 
centre = FreeCAD.Vector(25,25,0)                    # "centre" of rotation (where local Z cuts XY)
pos = obj.Placement.Base                            # original placement of obj
newplace = FreeCAD.Placement(pos,rot,centre)        # make a new Placement object
obj.Placement = newplace                            # spin the box

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":

<<Cube>>.Placement.Base.x

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

<<Cube>>.Placement
Setting the whole Placement in one expression

Notes

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:
Object Reference Point
Part.Box left (minx), front (miny), bottom (minz) vertex
Part.Sphere center of the sphere (ie centre of bounding box)
Part.Cylinder center of the bottom face
Part.Cone center of bottom face (or apex if bottom radius is 0)
Part.Torus center of the torus
Objetos formados a partir de Sketches el objeto hereda la Position del Sketch subyacente. Los Sketches siempre se forman desde la Position = (0,0,0).

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.