Text
Módulo: digi21.base
Un texto situado en unas coordenadas. Hereda de Geometry.
Text(text, coordinates, codes=(), rotation=0.0, text_height=1.0,
text_justification=TextJustification.SW, orientation=(1.0, 0.0, 0.0, 0.0))
| Argumento | Tipo | Descripción |
|---|---|---|
text |
str |
Cadena de texto. |
coordinates |
tuple |
Coordenadas (x, y, z). |
codes |
iterable | Códigos. |
rotation |
float |
Rotación en grados, en sentido antihorario desde el eje X. |
text_height |
float |
Altura del texto. |
text_justification |
TextJustification | Justificación. |
orientation |
tuple |
Orientación del texto en el espacio: un cuaternión (w, x, y, z). El valor por defecto deja el texto en el plano XY. Consulta Orientación en el espacio. |
Propiedades
| Propiedad | Tipo | L/E | Descripción |
|---|---|---|---|
text |
str |
L/E | Cadena de texto. |
height |
float |
L/E | Altura del texto. |
rotation |
float |
L/E | Rotación del texto, en grados, en sentido antihorario desde el eje X, alrededor del eje Z del mundo. Se aplica después de orientation. En versiones anteriores estaba en centésimas de grado. |
orientation |
tuple |
L/E | Orientación del texto en el espacio: un cuaternión (w, x, y, z) que se aplica antes de rotation. Al asignar la propiedad, el cuaternión se normaliza. Consulta Orientación en el espacio. |
justification |
TextJustification | L/E | Justificación del texto. |
Hereda además todas las propiedades y métodos de Geometry.
Orientación en el espacio
Un cuaternión (quaternion) de rotación es un grupo de cuatro números (w, x, y, z) que representa
una rotación en el espacio. La rotación de un ángulo θ alrededor de un eje con vector director
unitario (ux, uy, uz) es el cuaternión (cos(θ/2), ux·sin(θ/2), uy·sin(θ/2), uz·sin(θ/2)).
La rotación completa de un texto es Rz(rotation) · Q, donde Q es el cuaternión de orientation y
Rz(rotation) es un giro de rotation grados alrededor del eje Z del mundo. Q se aplica primero, en
el sistema local del texto, y Rz(rotation) se aplica a continuación sobre el resultado de Q. En el
sistema local del texto, el eje X sigue la línea base (la línea sobre la que se apoyan los
caracteres), el eje Y apunta hacia la parte superior de los caracteres y el eje Z apunta hacia el
lector.
orientation |
Posición del texto |
|---|---|
(1, 0, 0, 0) |
Plano XY. Es el valor por defecto: la rotación completa es solo el giro rotation. |
(cos 45°, sin 45°, 0, 0) |
Plano vertical, con la línea base horizontal: es la rotación de 90° alrededor del eje X. Con rotation = 0, la línea base sigue el eje X del mundo, la parte superior de los caracteres apunta hacia el semieje Z positivo y la cara legible del texto está orientada hacia el semieje Y negativo. Con otro valor de rotation, la línea base forma ese ángulo con el eje X en planta. |
Al asignar orientation, o al pasar el argumento orientation al constructor:
- El texto almacena el cuaternión normalizado: las cuatro componentes divididas por la norma
√(w² + x² + y² + z²). Por eso
(1, 1, 0, 0)equivale a(cos 45°, sin 45°, 0, 0). Si la norma difiere de 1 en 10⁻¹² o menos, el texto almacena el cuaternión sin modificarlo. - Si la norma es 0, infinita o NaN, el texto almacena
(1.0, 0.0, 0.0, 0.0). Es el caso de(0, 0, 0, 0)y de un cuaternión con alguna componente infinita o NaN. - El valor de
rotationno cambia. Asignarrotationtampoco cambia el valor deorientation. - Si el texto pertenece al dibujo, la asignación lanza
ValueError, como en el resto de propiedades: las geometrías del dibujo son de solo lectura.
orientation devuelve una tupla de cuatro float. En un texto creado sin el argumento
orientation, la propiedad devuelve (1.0, 0.0, 0.0, 0.0). Los cuaterniones q y -q representan
la misma rotación, y orientation devuelve el cuaternión con el signo con el que se asignó. El clon
que devuelve clone() tiene la misma orientación que el original.
La dirección en planta va en rotation
Asigna a rotation la dirección de la línea base en planta y usa orientation solo para inclinar el
texto fuera del plano XY, sin giro alrededor del eje Z. Para un texto en una fachada con la línea base
a 30° en planta, asigna rotation = 30 y orientation = (cos 45°, sin 45°, 0, 0), no rotation = 0
con un cuaternión que incluya los 30°. Las órdenes de Digi3D.AI y los importadores de DWG/DXF, DGN y
Geomedia guardan los textos siempre de esta forma.
Las dos formas dibujan el texto igual, pero el texto conserva el cuaternión asignado y no traslada a
rotation su giro alrededor del eje Z. Con un cuaternión que gira alrededor del eje Z:
rotationno es la dirección del texto en planta. Asignarrotation = adeja la línea base aagrados más el ángulo en planta que el cuaternión da por sí solo a la línea base.- Los formatos que solo guardan el giro (BIN, VEC, GeoJSON y PDF) escriben el texto con la dirección
de
rotation. Consulta Orientación de los textos en los archivos de dibujo. - Un texto del plano XY con un cuaternión que solo gira alrededor del eje Z cuenta como orientado. El
formato BIND lo guarda en un registro
Digi21.DigiNG.Text2, y las versiones de Digi3D anteriores a ese registro no cargan el texto.
Ejemplo
from digi21.base import Text, TextJustification
t = Text("Calle Mayor", (50, 60, 0), codes=["ROT"],
text_height=2.5, text_justification=TextJustification.C)
Este ejemplo crea un texto en un plano vertical, con la línea base a 30° del eje X en planta:
from digi21.base import Text
# (1, 1, 0, 0) normalizado es (cos 45°, sin 45°, 0, 0): la rotación de 90° alrededor del eje X.
fachada = Text("Fachada", (50, 60, 12), codes=["ROT"], rotation=30.0,
text_height=2.5, orientation=(1, 1, 0, 0))
print(fachada.orientation) # (0.7071067811865475, 0.7071067811865475, 0.0, 0.0)
Véase también
- TextJustification
- Geometry
- Variable TEXTO_ORIENTADO_CON_CAMARA: si está activa, las órdenes TEXTO, 1TEXTO, TEXTO_EDITABLE, TEXTO_R y TEXTO_R_EDITABLE orientan en el espacio los textos que insertan