Agregar texto a un dibujo DWG a menudo es parte de un trabajo de ingeniería más amplio. En ciertos casos, puede que necesites etiquetar equipos, identificar habitaciones, agregar referencias de revisión o colocar notas en coordenadas predefinidas. Cuando esos detalles provienen de una base de datos o una hoja de cálculo, agregar cada etiqueta manualmente en un editor CAD es un trabajo innecesario.

Aspose.CAD for Python via .NET le permite cargar un dibujo DWG, agregar una entidad de texto a su espacio modelo y exportar el contenido anotado. En este tutorial, usted agregará texto a un dibujo DWG usando Python, establecerá su posición y apariencia, y guardará el resultado como DXF y PDF.

Instalar Aspose.CAD for Python via .NET

Necesita un entorno Python funcional, Aspose.CAD package, y un archivo DWG para anotar. AutoCAD no es necesario para ejecutar este ejemplo.

Instala el paquete con pip:

pip install aspose-cad

Para obtener más detalles de configuración, consulte la guía de instalación de Aspose.CAD.

Coloque un archivo DWG llamado sample.dwg en la misma carpeta que su script de Python. El ejemplo usa coordenadas del espacio modelo (100, 100, 0) y una altura de texto de 5.0 unidades de dibujo. Es posible que necesite ajustar estos valores para que se adapten a su dibujo.

Agregar texto a un dibujo DWG en Python

Los dibujos CAD almacenan texto como entidades en lugar de píxeles. La clase CadText representa una entidad TEXT de una sola línea, con propiedades para su contenido, ubicación, altura, estilo y capa. Añadir dicha entidad mantiene la parte de anotación del modelo CAD en lugar de simplemente dibujar palabras sobre una imagen exportada.

El flujo de trabajo consiste en cargar el archivo DWG, localizar su bloque de espacio modelo, crear una entidad CadText, añadirla a ese bloque, actualizar los límites del dibujo y exportar el resultado.

Código Python completo para insertar texto en un dibujo DWG

El siguiente ejemplo ha sido probado con Aspose.CAD for Python via .NET. Añade la etiqueta Hello from Aspose.CAD Python al dibujo y produce dos archivos de salida.

import aspose.cad as cad
from aspose.pycore import cast

from aspose.cad.fileformats.cad import CadImage
from aspose.cad.fileformats.cad.cadobjects import (
    CadText,
    Cad3DPoint,
)

from aspose.cad.imageoptions import (
    DxfOptions,
    PdfOptions,
    CadRasterizationOptions,
)

# Input and output files
input_file = "sample.dwg"
output_dxf = "drawing_with_text.dxf"
output_pdf = "drawing_with_text.pdf"

# Text properties
text_value = "Hello from Aspose.CAD Python"
text_x = 100.0
text_y = 100.0
text_height = 5.0

# Load the DWG drawing
with cad.Image.load(str(input_file)) as image:

# IMPORTANT: Cast Image to CadImage
    cad_image = cast(CadImage, image)

# Find model space
    model_space = None

for block in cad_image.block_entities.values_typed:
        block_name = block.name or ""
        original_name = block.original_block_name or ""

if (
            block_name.lower() == "*model_space"
            or original_name.lower() == "*model_space"
        ):
            model_space = block
            break

if model_space is None:
        raise RuntimeError(
            "Model space block was not found."
        )

# Create a new TEXT entity
    text_entity = CadText()

text_entity.default_value = text_value
    text_entity.style_type = "Standard"
    text_entity.layer_name = "0"
    text_entity.color_id = 256

text_entity.text_height = text_height
    text_entity.scale_x = 1.0

# Set text position
    text_entity.first_alignment = Cad3DPoint(
        text_x,
        text_y,
        0.0
    )

# Add the text to model space
    model_space.add_entity(text_entity)

# Update drawing bounds
    cad_image.update_size(True)

# Save as editable DXF
    dxf_options = DxfOptions()
    cad_image.save(str(output_dxf), dxf_options)

print(f"DXF created: {output_dxf}")

# Save as PDF for viewing
    raster_options = CadRasterizationOptions()
    raster_options.page_width = 1600.0
    raster_options.page_height = 1200.0

pdf_options = PdfOptions()
    pdf_options.vector_rasterization_options = raster_options

cad_image.save(str(output_pdf), pdf_options)

print(f"PDF created: {output_pdf}")

print("Text added successfully.")

Salida esperada

Cuando el script se completa con éxito, crea los siguientes archivos junto a sample.dwg:

  • drawing_with_text.dxf — el dibujo CAD exportado con la nueva entidad de texto, donde sea compatible con el escritor DXF.
  • drawing_with_text.pdf — una copia renderizada del dibujo anotado para revisión o compartir.

La salida de la consola es:

DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.

Abra ambos archivos de salida para confirmar que la etiqueta sea visible y esté correctamente posicionada. El archivo original sample.dwg no se modifica.

Cómo funciona el código Python

Algunos detalles en el ejemplo son importantes cuando pasas de un dibujo de prueba simple a un archivo de producción.

1. Cargar y convertir el dibujo DWG

El método cad.Image.load() abre el archivo de origen. Luego, el ejemplo usa cast(CadImage, image) para que el dibujo cargado pueda accederse a través de propiedades específicas de CAD, incluyendo block_entities.

La sentencia with mantiene la imagen abierta mientras sus entidades se modifican y exportan, y luego libera el recurso cuando finaliza el procesamiento.

2. Encontrar el bloque del espacio modelo

Un dibujo DWG puede contener varios bloques. El nuevo texto debe añadirse al bloque que representa el espacio de dibujo previsto.

El ejemplo itera a través de cad_image.block_entities.values_typed y verifica tanto block.name como block.original_block_name en busca de *Model_Space, sin distinguir entre mayúsculas y minúsculas. Esto evita asumir que el espacio modelo siempre puede ser accedido mediante una clave de diccionario directa.

Si no se puede encontrar el espacio del modelo, el script genera un RuntimeError. Esto es preferible a exportar silenciosamente un archivo sin la nueva anotación.

3. Crear y posicionar la entidad de texto

CadText() crea la nueva anotación de una sola línea. Su propiedad default_value almacena el texto visible. La posición proviene de Cad3DPoint(text_x, text_y, 0.0), asignada a first_alignment.

En este ejemplo, text_height = 5.0 define la altura en unidades de dibujo, y scale_x = 1.0 establece el factor de escala horizontal. La entidad usa el estilo de texto Standard y la capa 0. Su ID de color 256 significa ByLayer, por lo que la capa controla su color.

Después de establecer estas propiedades, model_space.add_entity(text_entity) inserta la anotación en el espacio modelo.

4. Recalcular los límites del dibujo

Agregar texto puede cambiar el área ocupada por el contenido del dibujo. La llamada a continuación actualiza los límites del dibujo antes de la exportación:

cad_image.update_size(True)

El argumento booleano es requerido por la API de Python utilizada en este ejemplo probado. Llamar a update_size() sin él puede producir un error de argumento faltante.

5. Exportar el dibujo anotado

DxfOptions se usa para guardar el dibujo como DXF. CadRasterizationOptions controla las dimensiones de la página para la renderización, y PdfOptions produce el archivo PDF.

Observe que las dimensiones del PDF se escriben como 1600.0 y 1200.0, no como enteros. Los enlaces de Python probados esperan valores numéricos en este formato para estos setters.

Las dimensiones de la página controlan el diseño de la exportación; no son la altura del texto ni las dimensiones reales del dibujo.

Cambiar la posición del texto, la altura, el color y el estilo

Puede personalizar una entidad CadText cambiando sus propiedades antes de llamar a add_entity().

PropiedadQué controlaEjemplo
default_valueTexto mostrado en el dibujo"VALVE V-101"
first_alignmentPosición del texto en coordenadas CADCad3DPoint(150.0, 80.0, 0.0)
text_heightAltura del texto en unidades del dibujo3.0
scale_xFactor de escala horizontal del texto1.0
style_typeNombre del estilo de texto"Standard"
layer_nameCapa asociada al texto"0"
color_idValor del índice de color de AutoCAD1 para rojo; 256 para ByLayer

Por ejemplo, cambie las propiedades de texto en el script principal para etiquetar una válvula:

text_entity.default_value = "VALVE V-101"
text_entity.first_alignment = Cad3DPoint(
    150.0, 80.0, 0.0
)
text_entity.text_height = 3.0
text_entity.scale_x = 1.0
text_entity.style_type = "Standard"
text_entity.layer_name = "0"
text_entity.color_id = 1

Ejecute este fragmento de configuración de propiedades antes model_space.add_entity(text_entity) en el ejemplo principal.

Utilice coordenadas que coincidan con el dibujo real. Los dibujos CAD a menudo usan unidades o sistemas de coordenadas específicos del proyecto, por lo que (150, 80) puede estar dentro de un dibujo y estar lejos de la geometría en otro. Del mismo modo, una altura de 3.0 no es un tamaño de fuente de tres puntos; se mide en unidades del dibujo.

También debe usar un estilo de texto y una capa que existan en el dibujo de origen. El ejemplo utiliza valores predeterminados comunes, pero los dibujos con estándares personalizados pueden requerir nombres diferentes.

Agregar varias etiquetas de texto a un dibujo DWG

Una vez que una sola etiqueta funciona, puedes extender el mismo enfoque a varias anotaciones. Esto es útil cuando los identificadores de equipos, los nombres de salas o las referencias de inspección ya están almacenados como datos estructurados.

Por ejemplo, defina las etiquetas y sus coordenadas de inserción:

labels = [
    ("VALVE V-101", 40.0, 80.0),
    ("VALVE V-102", 70.0, 80.0),
    ("PUMP P-201", 100.0, 80.0),
    ("CONTROL PANEL", 130.0, 80.0),
]

for label, x, y in labels:
    text = CadText()
    text.default_value = label
    text.first_alignment = Cad3DPoint(x, y, 0.0)
    text.text_height = 2.5
    text.scale_x = 1.0
    text.style_type = "Standard"
    text.layer_name = "0"
    text.color_id = 256

model_space.add_entity(text)

cad_image.update_size(True)

Coloque este fragmento dentro del bloque with, después de que se encuentre el espacio del modelo y antes de las exportaciones DXF/PDF. Utiliza el mismo patrón de creación de entidades que el ejemplo funcional de texto único; la variación de múltiples etiquetas no ha sido probada por separado aquí.

En una aplicación real, labels podría poblarse a partir de un archivo CSV, un registro de equipos o una base de datos. La responsabilidad principal de su aplicación es proporcionar coordenadas válidas y propiedades de texto apropiadas. La biblioteca inserta las entidades en las posiciones que usted especifica; no evita automáticamente la superposición de etiquetas.

Guardar el dibujo con texto como DXF o PDF

El formato que elijas depende de lo que suceda después de la anotación.

Guardar como DXF para edición CAD

El ejemplo principal usa DxfOptions para exportar el dibujo:

dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)

DXF es útil cuando el siguiente paso implica una aplicación CAD u otro sistema que consume entidades de dibujo. Sin embargo, tabla de formatos compatibles de Aspose.CAD describe la escritura de DXF como parcialmente soportada. Valide anotaciones importantes, capas y geometría en el archivo exportado antes de usarlo en un flujo de trabajo de ingeniería.

Guardar como PDF para visualizar y compartir

Para revisiones de diseño, informes o distribución de documentos, el ejemplo también exporta un PDF:

raster_options = CadRasterizationOptions()
raster_options.page_width = 1600.0
raster_options.page_height = 1200.0

pdf_options = PdfOptions()
pdf_options.vector_rasterization_options = raster_options

cad_image.save("drawing_with_text.pdf", pdf_options)

PDF está destinado a la visualización del dibujo resultante más que a la edición de sus entidades CAD. Si necesita un archivo DWG actualizado, utilice un flujo de trabajo CAD compatible separado para generarlo a partir de un formato intermedio apropiado; el guardado directo de DWG no está listado para la API de Python.

Solución de problemas de inserción de texto en archivos DWG

El texto insertado no es visible. Verifique primero las coordenadas del texto. Es posible que la etiqueta se haya colocado fuera de la geometría visible. También inspeccione la visibilidad de la capa, la altura del texto y el estilo de texto seleccionado. Compare las salidas DXF y PDF para identificar si el problema ocurre durante la inserción de la entidad o el renderizado.

El script no puede encontrar el espacio modelo. El ejemplo genera Model space block was not found. si ningún nombre de bloque coincide con *Model_Space. Inspeccione los bloques en el archivo fuente y confirme que contiene datos de espacio modelo en la estructura esperada. No continúe con una referencia de bloque faltante.

update_size() informa de un argumento faltante. Use cad_image.update_size(True) como se muestra en el ejemplo funcional. Esta firma es importante para el binding de Python utilizado aquí.

Las dimensiones de la página PDF provocan un error de tipo. Pase valores de punto flotante como 1600.0 y 1200.0 a page_width y page_height, respectivamente.

El texto se ve diferente al editor CAD. Verifique el estilo de texto del dibujo y si las fuentes correspondientes están disponibles en el entorno de procesamiento. La renderización puede diferir si la fuente esperada falta o es sustituida.

El DXF contiene diferencias inesperadas. La escritura de DXF solo es compatible parcialmente. Pruebe con dibujos representativos y revise las entidades resultantes en un visor CAD antes de integrar la salida en un proceso automatizado.

Preguntas frecuentes

¿Puedo agregar texto a un archivo DWG con Python sin AutoCAD?

Sí. Aspose.CAD for Python via .NET puede cargar un dibujo DWG y agregar una entidad CadText sin AutoCAD. El ejemplo luego exporta el dibujo modificado a DXF y PDF.

¿Cómo especifico la posición del texto en un dibujo DWG?

Establezca first_alignment en el objeto CadText usando Cad3DPoint(x, y, z). Elija valores que correspondan a una ubicación adecuada en el dibujo original.

¿Puedo agregar texto a una capa específica?

Sí. Establezca layer_name al nombre de la capa deseada. En el ejemplo principal, la anotación usa la capa 0 y el ID de color 256 (ByLayer).

¿Puedo agregar varias etiquetas de texto automáticamente?

Sí. Crea una nueva entidad CadText para cada etiqueta, establece su contenido y coordenadas, y añádela al espacio del modelo. Este patrón puede ser impulsado por una lista de registros u otra fuente de datos estructurada.

¿Puedo guardar el dibujo modificado de nuevo en DWG?

El guardado directo de DWG no está listado en los formatos compatibles de Aspose.CAD for Python. El flujo de trabajo probado exporta el dibujo modificado a DXF y PDF, dejando el DWG original sin cambios.

Obtén una licencia temporal gratuita

Puede solicitar una licencia temporal gratuita de 30 días para evaluar Aspose.CAD for Python via .NET sin restricciones de evaluación. Para aplicar la licencia en su aplicación Python, siga la guía de licenciamiento de Aspose.CAD.

Recursos de aprendizaje gratuitos

Explore estos recursos para obtener más información sobre el procesamiento de dibujos CAD en Python:

Conclusión

Agregar texto a un dibujo DWG usando Python es una forma práctica de generar etiquetas de equipos, identificadores de salas y otras anotaciones a partir de los datos de la aplicación. Los pasos esenciales son localizar el espacio modelo, crear una entidad CadText con coordenadas y estilo apropiados, y actualizar los límites del dibujo antes de la exportación.

El siguiente paso es reemplazar la etiqueta de ejemplo con coordenadas e identificadores de sus propios datos de dibujo. Verifique la salida DXF en un editor CAD y utilice el PDF como una copia de revisión, especialmente al implementar el flujo de trabajo en dibujos con diferentes unidades, capas o fuentes.