Aggiungere testo a un disegno DWG è spesso parte di un lavoro di ingegneria più ampio. In alcuni casi, potresti dover etichettare apparecchiature, identificare stanze, aggiungere riferimenti di revisione o posizionare note a coordinate predefinite. Quando questi dettagli provengono da un database o da un foglio di calcolo, aggiungere manualmente ogni etichetta in un editor CAD è un lavoro non necessario.
Aspose.CAD for Python via .NET ti consente di caricare un disegno DWG, aggiungere un’entità di testo al suo spazio modello e esportare il contenuto annotato. In questo tutorial, aggiungerai testo a un disegno DWG usando Python, imposterai la sua posizione e il suo aspetto e salverai il risultato come DXF e PDF.
Installa Aspose.CAD per Python via .NET
È necessario un ambiente Python funzionante, Aspose.CAD package, e un file DWG da annotare. AutoCAD non è richiesto per eseguire questo esempio.
Installa il pacchetto con pip:
pip install aspose-cad
Per ulteriori dettagli sulla configurazione, consulta la guida all’installazione di Aspose.CAD.
Posizionare un file DWG denominato sample.dwg nella stessa cartella dello script Python. L’esempio utilizza coordinate nello spazio modello (100, 100, 0) e un’altezza del testo di 5.0 unità di disegno. Potrebbe essere necessario regolare questi valori per adattarli al tuo disegno.
Aggiungere testo a un disegno DWG in Python
Le disegni CAD memorizzano il testo come entità anziché come pixel. La classe CadText rappresenta un’entità TEXT a riga singola, con proprietà per il suo contenuto, posizione, altezza, stile e livello. L’aggiunta di tale entità mantiene la parte di annotazione del modello CAD invece di disegnare semplicemente parole su un’immagine esportata.
Il flusso di lavoro consiste nel caricare il file DWG, individuare il suo blocco model‑space, creare un’entità CadText, aggiungerla a quel blocco, aggiornare i limiti del disegno e esportare il risultato.
Codice Python completo per inserire testo in un disegno DWG
Il seguente esempio è stato testato con Aspose.CAD for Python via .NET. Aggiunge l’etichetta Hello from Aspose.CAD Python al disegno e produce due file di output.
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.")
Output previsto
Quando lo script termina con successo, crea i seguenti file accanto a sample.dwg:
drawing_with_text.dxf— il disegno CAD esportato con la nuova entità di testo, dove supportato dallo scrittore DXF.drawing_with_text.pdf— una copia renderizzata del disegno annotato per revisione o condivisione.
L’output della console è:
DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.
Apri entrambi i file di output per confermare che l’etichetta sia visibile e correttamente posizionata. Il file originale sample.dwg non è stato modificato.
Come funziona il codice Python
Alcuni dettagli nell’esempio sono importanti quando si passa da un semplice disegno di test a un file di produzione.
1. Carica e converte il disegno DWG
Il metodo cad.Image.load() apre il file di origine. L’esempio utilizza quindi cast(CadImage, image) in modo che il disegno caricato possa essere accessibile tramite proprietà specifiche di CAD, inclusa block_entities.
L’istruzione with mantiene l’immagine aperta mentre le sue entità vengono modificate ed esportate, quindi rilascia la risorsa al termine dell’elaborazione.
2. Trova il blocco Model-Space
Un disegno DWG può contenere più blocchi. Il nuovo testo deve essere aggiunto al blocco che rappresenta lo spazio di disegno previsto.
L’esempio itera attraverso cad_image.block_entities.values_typed e controlla sia block.name sia block.original_block_name per *Model_Space, ignorando maiuscole/minuscole. Questo evita di presumere che lo spazio modello possa sempre essere accessibile usando una chiave di dizionario diretta.
Se lo spazio del modello non può essere trovato, lo script solleva un RuntimeError. Questo è preferibile rispetto all’esportazione silenziosa di un file senza la nuova annotazione.
3. Crea e posiziona l’entità di testo
CadText() crea la nuova annotazione a riga singola. La sua proprietà default_value memorizza il testo visibile. La posizione proviene da Cad3DPoint(text_x, text_y, 0.0), assegnata a first_alignment.
In questo esempio, text_height = 5.0 definisce l’altezza in unità di disegno, e scale_x = 1.0 imposta il fattore di scala orizzontale. L’entità utilizza lo stile di testo Standard e il layer 0. Il suo ID colore 256 significa ByLayer, quindi il layer controlla il suo colore.
Dopo che queste proprietà sono impostate, model_space.add_entity(text_entity) inserisce l’annotazione nello spazio modello.
4. Ricalcolare i limiti del disegno
L’aggiunta di testo può modificare l’area occupata dal contenuto del disegno. La chiamata qui sotto aggiorna i limiti del disegno prima dell’esportazione:
cad_image.update_size(True)
L’argomento booleano è richiesto dall’API Python utilizzata in questo esempio testato. Chiamare update_size() senza di esso può produrre un errore di argomento mancante.
5. Esporta il disegno annotato
DxfOptions è usato per salvare il disegno come DXF. CadRasterizationOptions controlla le dimensioni della pagina per il rendering, e PdfOptions produce il file PDF.
Nota che le dimensioni del PDF sono scritte come 1600.0 e 1200.0, non come interi. I binding Python testati si aspettano valori numerici in questa forma per questi setter.
Le dimensioni della pagina controllano il layout di esportazione; non sono l’altezza del testo né le dimensioni reali del disegno.
Modifica la posizione del testo, altezza, colore e stile
Puoi personalizzare un’entità CadText modificando le sue proprietà prima di chiamare add_entity().
| Proprietà | Cosa controlla | Esempio |
|---|---|---|
default_value | Testo mostrato nel disegno | "VALVE V-101" |
first_alignment | Posizione del testo nelle coordinate CAD | Cad3DPoint(150.0, 80.0, 0.0) |
text_height | Altezza del testo nelle unità del disegno | 3.0 |
scale_x | Fattore di scala orizzontale del testo | 1.0 |
style_type | Nome dello stile di testo | "Standard" |
layer_name | Layer associato al testo | "0" |
color_id | Valore dell’indice colore AutoCAD | 1 per rosso; 256 per ByLayer |
Ad esempio, modifica le proprietà del testo nello script principale per etichettare una valvola:
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
Esegui questo frammento di impostazione delle proprietà prima di model_space.add_entity(text_entity) nell’esempio principale.
Utilizzare coordinate che corrispondono al disegno reale. I disegni CAD spesso usano unità o sistemi di coordinate specifici del progetto, quindi (150, 80) può trovarsi all’interno di un disegno e lontano dalla geometria in un altro. Allo stesso modo, un’altezza di 3.0 non è una dimensione del carattere di tre punti; è misurata in unità di disegno.
Dovresti anche utilizzare uno stile di testo e un livello che esistono nel disegno di origine. L’esempio utilizza impostazioni predefinite comuni, ma i disegni con standard personalizzati potrebbero richiedere nomi diversi.
Aggiungi più etichette di testo a un disegno DWG
Una volta che un’etichetta singola funziona, è possibile estendere lo stesso approccio a diverse annotazioni. Questo è utile quando gli identificatori delle attrezzature, i nomi delle stanze o i riferimenti alle ispezioni sono già memorizzati come dati strutturati.
Ad esempio, definisci le etichette e le loro coordinate di inserimento:
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)
Inserisci questo snippet all’interno del blocco with, dopo che lo spazio modello è stato trovato e prima delle esportazioni DXF/PDF. Utilizza lo stesso modello di creazione di entità dell’esempio funzionante a testo singolo; la variante a più etichette non è stata testata separatamente qui.
In un’applicazione reale, labels potrebbe essere popolato da un file CSV, un registro di apparecchiature o un database. La responsabilità principale della tua applicazione è fornire coordinate valide e proprietà di testo appropriate. La libreria inserisce le entità nelle posizioni specificate; non impedisce automaticamente le sovrapposizioni delle etichette.
Salva il disegno con testo come DXF o PDF
Il formato che scegli dipende da ciò che accade dopo l’annotazione.
Salva come DXF per la modifica CAD
L’esempio principale utilizza DxfOptions per esportare il disegno:
dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)
DXF è utile quando il passo successivo coinvolge un’applicazione CAD o un altro sistema che consuma entità di disegno. Tuttavia, tabella dei formati supportati di Aspose.CAD descrive la scrittura DXF come parzialmente supportata. Convalida le annotazioni importanti, i livelli e la geometria nel file esportato prima di usarlo in un flusso di lavoro ingegneristico.
Salva come PDF per visualizzare e condividere
Per le revisioni di progettazione, i report o la distribuzione di documenti, l’esempio esporta anche 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 è destinato alla visualizzazione del disegno risultante piuttosto che alla modifica delle sue entità CAD. Se hai bisogno di un file DWG aggiornato, utilizza un flusso di lavoro CAD compatibile separato per generarlo da un formato intermedio appropriato; il salvataggio diretto di DWG non è elencato per l’API Python.
Risoluzione dei problemi di inserimento del testo nei file DWG
Il testo inserito non è visibile. Controlla prima le coordinate del testo. L’etichetta potrebbe essere stata posizionata al di fuori della geometria visibile. Verifica anche la visibilità del livello, l’altezza del testo e lo stile di testo selezionato. Confronta le uscite DXF e PDF per identificare se il problema si verifica durante l’inserimento dell’entità o il rendering.
Lo script non riesce a trovare lo spazio modello. L’esempio genera Model space block was not found. se nessun nome di blocco corrisponde a *Model_Space. Ispeziona i blocchi nel file di origine e conferma che contenga dati di spazio modello nella struttura prevista. Non continuare con un riferimento a blocco mancante.
update_size() segnala un argomento mancante. Usa cad_image.update_size(True) come mostrato nell’esempio funzionante. Questa firma è importante per il binding Python usato qui.
Le dimensioni della pagina PDF generano un errore di tipo. Passare valori a virgola mobile come 1600.0 e 1200.0 a page_width e page_height, rispettivamente.
Il testo appare diverso rispetto all’editor CAD. Verifica lo stile del testo del disegno e se i font corrispondenti sono disponibili nell’ambiente di elaborazione. Il rendering potrebbe differire se il font previsto è mancante o sostituito.
Il DXF contiene differenze inaspettate. La scrittura del DXF è supportata solo parzialmente. Testa con disegni rappresentativi e verifica le entità risultanti in un visualizzatore CAD prima di integrare l’output in un processo automatizzato.
Domande frequenti
Posso aggiungere testo a un file DWG con Python senza AutoCAD?
Sì. Aspose.CAD for Python via .NET può caricare un disegno DWG e aggiungere un’entità CadText senza AutoCAD. L’esempio quindi esporta il disegno modificato in DXF e PDF.
Come specificare la posizione del testo in un disegno DWG?
Imposta first_alignment sull’oggetto CadText usando Cad3DPoint(x, y, z). Scegli valori che corrispondono a una posizione adeguata nel disegno originale.
Posso aggiungere testo a un livello specifico?
Sì. Imposta layer_name sul nome del livello desiderato. Nell’esempio principale, l’annotazione utilizza il livello 0 e l’ID colore 256 (ByLayer).
Posso aggiungere più etichette di testo automaticamente?
Sì. Crea una nuova entità CadText per ogni etichetta, imposta il suo contenuto e le coordinate e aggiungila allo spazio modello. Questo modello può essere guidato da un elenco di record o da un’altra fonte di dati strutturata.
Posso salvare il disegno modificato nuovamente in DWG?
Il salvataggio diretto in DWG non è elencato nei Aspose.CAD for Python formati supportati. Il flusso di lavoro testato esporta il disegno modificato in DXF e PDF, lasciando il DWG di origine invariato.
Ottieni una licenza temporanea gratuita
Puoi richiedere una licenza temporanea gratuita di 30 giorni per valutare Aspose.CAD for Python via .NET senza restrizioni di valutazione. Per applicare la licenza nella tua applicazione Python, segui la guida di licenza di Aspose.CAD.
Risorse di apprendimento gratuite
Esplora queste risorse per ulteriori informazioni sull’elaborazione dei disegni CAD in Python:
- Aspose.CAD for Python Developer Guide – Scopri come caricare e elaborare i file CAD.
- Aspose.CAD Python API Reference – Esamina classi, proprietà e metodi utilizzati negli esempi.
- Work with Text in CAD Drawings – Scopri i tipi di entità CAD che contengono testo.
- Supported CAD File Formats – Verifica i formati di input e output disponibili.
- Free Online CAD Applications – Visualizza o converti i file CAD utilizzando strumenti basati sul browser.
- Aspose.CAD Support Forum – Fai domande su disegni specifici o sul comportamento dell’API.
Conclusione
Aggiungere testo a un disegno DWG usando Python è un modo pratico per generare etichette di apparecchiature, identificatori di stanze e altre annotazioni dai dati dell’applicazione. I passaggi essenziali sono individuare lo spazio modello, creare un’entità CadText con coordinate e stile appropriati e aggiornare i limiti del disegno prima dell’esportazione.
Il passo successivo è sostituire l’etichetta di esempio con coordinate e identificatori dei propri dati di disegno. Verifica l’output DXF in un editor CAD e utilizza il PDF come copia di revisione, soprattutto quando distribuisci il flusso di lavoro su disegni con unità, livelli o caratteri diversi.
