Adicionar texto a um desenho DWG costuma ser parte de um trabalho de engenharia maior. Em certos casos, pode ser necessário rotular equipamentos, identificar salas, adicionar referências de revisão ou colocar notas em coordenadas predefinidas. Quando esses detalhes vêm de um banco de dados ou planilha, adicionar cada rótulo manualmente em um editor CAD é um trabalho desnecessário.
Aspose.CAD for Python via .NET permite que você carregue um desenho DWG, adicione uma entidade de texto ao seu espaço de modelo e exporte o conteúdo anotado. Neste tutorial, você adicionará texto a um desenho DWG usando Python, definirá sua posição e aparência e salvará o resultado como DXF e PDF.
Instalar Aspose.CAD for Python via .NET
Você precisa de um ambiente Python funcional, Aspose.CAD package, e um arquivo DWG para anotar. O AutoCAD não é necessário para executar este exemplo.
Instale o pacote com pip:
pip install aspose-cad
Para obter detalhes adicionais de configuração, veja o guia de instalação do Aspose.CAD.
Coloque um arquivo DWG chamado sample.dwg na mesma pasta que o seu script Python. O exemplo usa coordenadas do espaço‑modelo (100, 100, 0) e uma altura de texto de 5.0 unidades de desenho. Pode ser necessário ajustar esses valores para se adequar ao seu desenho.
Adicionar texto a um desenho DWG em Python
Desenhos CAD armazenam texto como entidades em vez de pixels. A classe CadText representa uma entidade de TEXTO de linha única, com propriedades para seu conteúdo, localização, altura, estilo e camada. Adicionar tal entidade mantém a parte de anotação do modelo CAD em vez de simplesmente desenhar palavras sobre uma imagem exportada.
O fluxo de trabalho consiste em carregar o arquivo DWG, localizar seu bloco de espaço de modelo, criar uma entidade CadText, adicioná‑la a esse bloco, atualizar os limites do desenho e exportar o resultado.
Código Python Completo para Inserir Texto em um Desenho DWG
O exemplo a seguir foi testado com Aspose.CAD for Python via .NET. Ele adiciona o rótulo Hello from Aspose.CAD Python ao desenho e produz dois arquivos de saída.
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.")
Saída esperada
Quando o script for concluído com sucesso, ele cria os seguintes arquivos ao lado de sample.dwg:
drawing_with_text.dxf— o desenho CAD exportado com a nova entidade de texto, onde suportado pelo gravador DXF.drawing_with_text.pdf— uma cópia renderizada do desenho anotado para revisão ou compartilhamento.
A saída do console é:
DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.
Abra ambos os arquivos de saída para confirmar que o rótulo está visível e corretamente posicionado. O arquivo original sample.dwg não foi modificado.
Como o Código Python Funciona
Alguns detalhes no exemplo são importantes quando você passa de um desenho de teste simples para um arquivo de produção.
1. Carregar e converter o desenho DWG
O método cad.Image.load() abre o arquivo de origem. O exemplo então usa cast(CadImage, image) para que o desenho carregado possa ser acessado através de propriedades específicas do CAD, incluindo block_entities.
A instrução with mantém a imagem aberta enquanto suas entidades são modificadas e exportadas, e libera o recurso quando o processamento termina.
2. Encontrar o Bloco Model-Space
Um desenho DWG pode conter vários blocos. O novo texto deve ser adicionado ao bloco que representa o espaço de desenho pretendido.
O exemplo itera através de cad_image.block_entities.values_typed e verifica tanto block.name quanto block.original_block_name para *Model_Space, ignorando maiúsculas e minúsculas. Isso evita assumir que o espaço modelo pode sempre ser acessado usando uma chave de dicionário direta.
Se o espaço do modelo não puder ser encontrado, o script gera um RuntimeError. Isso é preferível a exportar silenciosamente um arquivo sem a nova anotação.
3. Criar e posicionar a entidade de texto
CadText() cria a nova anotação de linha única. Sua propriedade default_value armazena o texto visível. A posição vem de Cad3DPoint(text_x, text_y, 0.0), atribuída a first_alignment.
Neste exemplo, text_height = 5.0 define a altura em unidades de desenho, e scale_x = 1.0 define o fator de escala horizontal. A entidade usa o estilo de texto Standard e a camada 0. Seu ID de cor 256 significa ByLayer, portanto a camada controla sua cor.
Depois que essas propriedades são definidas, model_space.add_entity(text_entity) insere a anotação no espaço do modelo.
4. Recalcular os limites do desenho
Adicionar texto pode mudar a área ocupada pelo conteúdo de desenho. A chamada abaixo atualiza os limites do desenho antes da exportação:
cad_image.update_size(True)
O argumento booleano é obrigatório na API Python usada neste exemplo testado. Chamar update_size() sem ele pode gerar um erro de argumento ausente.
5. Exportar o Desenho Anotado
DxfOptions é usado para salvar o desenho como DXF. CadRasterizationOptions controla as dimensões da página para renderização, e PdfOptions produz o arquivo PDF.
Observe que as dimensões do PDF são escritas como 1600.0 e 1200.0, não como inteiros. As ligações Python testadas esperam valores numéricos nesta forma para esses setters.
As dimensões da página controlam o layout de exportação; elas não são a altura do texto ou as dimensões reais do desenho.
Alterar a Posição, Altura, Cor e Estilo do Texto
Você pode personalizar uma entidade CadText alterando suas propriedades antes de chamar add_entity().
| Propriedade | O que controla | Exemplo |
|---|---|---|
default_value | Texto exibido no desenho | "VALVE V-101" |
first_alignment | Posição do texto nas coordenadas CAD | Cad3DPoint(150.0, 80.0, 0.0) |
text_height | Altura do texto nas unidades do desenho | 3.0 |
scale_x | Fator de escala horizontal do texto | 1.0 |
style_type | Nome do estilo de texto | "Standard" |
layer_name | Camada associada ao texto | "0" |
color_id | Valor do Índice de Cor do AutoCAD | 1 para vermelho; 256 para ByLayer |
Por exemplo, altere as propriedades de texto no script principal para rotular uma 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
Execute este trecho de definição de propriedades antes de model_space.add_entity(text_entity) no exemplo principal.
Use coordenadas que correspondam ao desenho real. Desenhos CAD frequentemente utilizam unidades ou sistemas de coordenadas específicos do projeto, portanto (150, 80) pode estar dentro de um desenho e longe da geometria em outro. Da mesma forma, uma altura de 3.0 não é um tamanho de fonte de três pontos; ela é medida em unidades de desenho.
Você também deve usar um estilo de texto e uma camada que existam no desenho de origem. O exemplo usa padrões comuns, mas desenhos com padrões personalizados podem exigir nomes diferentes.
Adicionar vários rótulos de texto a um desenho DWG
Depois que um único rótulo funciona, você pode estender a mesma abordagem para várias anotações. Isso é útil quando identificadores de equipamentos, nomes de salas ou referências de inspeção já estão armazenados como dados estruturados.
Por exemplo, defina os rótulos e suas coordenadas de inserção:
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 trecho dentro do bloco with, após o espaço do modelo ser encontrado e antes das exportações DXF/PDF. Ele usa o mesmo padrão de criação de entidades do exemplo de texto único funcional; a variação de múltiplas etiquetas ainda não foi testada separadamente aqui.
Em uma aplicação real, labels pode ser preenchido a partir de um arquivo CSV, um registro de equipamentos ou um banco de dados. A principal responsabilidade da sua aplicação é fornecer coordenadas válidas e propriedades de texto apropriadas. A biblioteca insere as entidades nas posições que você especifica; ela não impede automaticamente a sobreposição de rótulos.
Salvar o Desenho com Texto como DXF ou PDF
O formato que você escolher depende do que acontece após a anotação.
Salvar como DXF para edição CAD
O exemplo principal usa DxfOptions para exportar o desenho:
dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)
DXF é útil quando a próxima etapa envolve um aplicativo CAD ou outro sistema que consome entidades de desenho. No entanto, tabela de formatos suportados do Aspose.CAD descreve a gravação de DXF como parcialmente suportado. Valide anotações importantes, camadas e geometria no arquivo exportado antes de usá‑lo em um fluxo de trabalho de engenharia.
Salvar como PDF para Visualização e Compartilhamento
Para revisões de design, relatórios ou distribuição de documentos, o exemplo também exporta um 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)
O PDF destina‑se à visualização do desenho resultante, em vez de editar suas entidades CAD. Se precisar de um arquivo DWG atualizado, use um fluxo de trabalho CAD compatível separado para produzi‑lo a partir de um formato intermediário adequado; a gravação direta de DWG não está listada para a API Python.
Solucionando Problemas de Inserção de Texto em Arquivos DWG
O texto inserido não está visível. Verifique primeiro as coordenadas do texto. O rótulo pode ter sido colocado fora da geometria visível. Também inspecione a visibilidade da camada, a altura do texto e o estilo de texto selecionado. Compare as saídas DXF e PDF para identificar se o problema ocorre durante a inserção da entidade ou na renderização.
O script não consegue encontrar o espaço do modelo. O exemplo gera Model space block was not found. se nenhum nome de bloco corresponder a *Model_Space. Inspecione os blocos no arquivo de origem e confirme que ele contém dados de espaço-modelo na estrutura esperada. Não continue com uma referência de bloco ausente.
update_size() relata um argumento ausente. Use cad_image.update_size(True) como mostrado no exemplo funcional. Essa assinatura é importante para a ligação Python usada aqui.
As dimensões da página PDF acionam um erro de tipo. Passe valores de ponto flutuante como 1600.0 e 1200.0 para page_width e page_height, respectivamente.
O texto parece diferente do editor CAD. Verifique o estilo de texto do desenho e se as fontes correspondentes estão disponíveis no ambiente de processamento. A renderização pode diferir se a fonte esperada estiver ausente ou substituída.
O DXF contém diferenças inesperadas. A gravação de DXF é suportada apenas parcialmente. Teste com desenhos representativos e revise as entidades resultantes em um visualizador CAD antes de integrar a saída em um processo automatizado.
Perguntas Frequentes
Posso adicionar texto a um arquivo DWG com Python sem AutoCAD?
Sim. Aspose.CAD for Python via .NET pode carregar um desenho DWG e adicionar uma entidade CadText sem o AutoCAD. O exemplo então exporta o desenho modificado para DXF e PDF.
Como especificar a posição do texto em um desenho DWG?
Defina first_alignment no objeto CadText usando Cad3DPoint(x, y, z). Escolha valores que correspondam a uma localização adequada no desenho original.
Posso adicionar texto a uma camada específica?
Sim. Defina layer_name para o nome da camada desejada. No exemplo principal, a anotação usa a camada 0 e o ID de cor 256 (ByLayer).
Posso adicionar vários rótulos de texto automaticamente?
Sim. Crie uma nova entidade CadText para cada rótulo, defina seu conteúdo e coordenadas e adicione-a ao espaço do modelo. Esse padrão pode ser alimentado por uma lista de registros ou outra fonte de dados estruturada.
Posso salvar o desenho modificado de volta para DWG?
Salvar diretamente em DWG não está listado nos Aspose.CAD for Python formatos suportados. O fluxo de trabalho testado exporta o desenho modificado para DXF e PDF, deixando o DWG de origem inalterado.
Obtenha uma Licença Temporária Gratuita
Você pode solicitar uma licença temporária gratuita de 30 dias para avaliar Aspose.CAD for Python via .NET sem restrições de avaliação. Para aplicar a licença em sua aplicação Python, siga o guia de licenciamento do Aspose.CAD.
Recursos de Aprendizagem Gratuitos
Explore esses recursos para obter mais informações sobre o processamento de desenhos CAD em Python:
- Aspose.CAD for Python Developer Guide – Aprenda como carregar e processar arquivos CAD.
- Aspose.CAD Python API Reference – Revise classes, propriedades e métodos usados nos exemplos.
- Work with Text in CAD Drawings – Aprenda sobre os tipos de entidades que contêm texto em CAD.
- Supported CAD File Formats – Confirme os formatos de entrada e saída disponíveis.
- Free Online CAD Applications – Visualize ou converta arquivos CAD usando ferramentas baseadas no navegador.
- Aspose.CAD Support Forum – Faça perguntas sobre desenhos específicos ou o comportamento da API.
Conclusão
Adicionar texto a um desenho DWG usando Python é uma maneira prática de gerar etiquetas de equipamentos, identificadores de salas e outras anotações a partir dos dados da aplicação. As etapas essenciais são localizar o espaço modelo, criar uma entidade CadText com coordenadas e estilo apropriados e atualizar os limites do desenho antes da exportação.
A próxima etapa é substituir o rótulo de exemplo por coordenadas e identificadores dos seus próprios dados de desenho. Verifique a saída DXF em um editor CAD e use o PDF como cópia de revisão, especialmente ao implantar o fluxo de trabalho em desenhos com diferentes unidades, camadas ou fontes.
