Dodawanie tekstu do rysunku DWG jest często częścią większej pracy inżynierskiej. W niektórych przypadkach może być konieczne oznaczenie sprzętu, identyfikacja pomieszczeń, dodanie odniesień do wersji lub umieszczenie notatek w określonych współrzędnych. Gdy te informacje pochodzą z bazy danych lub arkusza kalkulacyjnego, ręczne dodawanie każdej etykiety w edytorze CAD jest niepotrzebną pracą.
Aspose.CAD for Python via .NET pozwala wczytać rysunek DWG, dodać encję tekstową do jego przestrzeni modelu i wyeksportować oznaczoną zawartość. W tym samouczku dodasz tekst do rysunku DWG przy użyciu Pythona, ustawisz jego pozycję i wygląd oraz zapiszesz wynik jako DXF i PDF.
Instalacja Aspose.CAD for Python via .NET
Potrzebujesz działającego środowiska Python, Aspose.CAD package, oraz pliku DWG do anotacji. AutoCAD nie jest wymagany do uruchomienia tego przykładu.
Zainstaluj pakiet przy użyciu pip:
pip install aspose-cad
Aby uzyskać dodatkowe informacje o konfiguracji, zobacz przewodnik instalacji Aspose.CAD.
Umieść plik DWG o nazwie sample.dwg w tym samym folderze co Twój skrypt Pythona. Przykład używa współrzędnych przestrzeni modelu (100, 100, 0) oraz wysokości tekstu 5.0 jednostek rysunku. Być może będziesz musiał dostosować te wartości do swojego rysunku.
Dodaj tekst do rysunku DWG w Pythonie
Rysunki CAD przechowują tekst jako encje, a nie jako piksele. Klasa CadText reprezentuje jednowierszową encję TEXT, z właściwościami określającymi jej zawartość, położenie, wysokość, styl i warstwę. Dodanie takiej encji zachowuje część adnotacji modelu CAD, zamiast jedynie rysować słowa na wyeksportowanym obrazie.
Proces polega na załadowaniu pliku DWG, zlokalizowaniu jego bloku model‑space, utworzeniu encji CadText, dodaniu jej do tego bloku, zaktualizowaniu granic rysunku i wyeksportowaniu wyniku.
Kompletny kod Pythona do wstawiania tekstu w rysunku DWG
Poniższy przykład został przetestowany z Aspose.CAD for Python via .NET. Dodaje etykietę Hello from Aspose.CAD Python do rysunku i generuje dwa pliki wyjściowe.
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.")
Oczekiwany wynik
Po pomyślnym zakończeniu skryptu, tworzy następujące pliki obok sample.dwg:
drawing_with_text.dxf— wyeksportowany rysunek CAD z nową jednostką tekstową, o ile jest obsługiwany przez zapis DXF.drawing_with_text.pdf— wygenerowana kopia oznaczonego rysunku do przeglądu lub udostępniania.
Wyjście konsoli to:
DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.
Otwórz oba pliki wyjściowe, aby potwierdzić, że etykieta jest widoczna i prawidłowo umieszczona. Oryginalny sample.dwg nie został zmodyfikowany.
Jak działa kod Python
Kilka szczegółów w przykładzie ma znaczenie, gdy przechodzisz od prostego rysunku testowego do pliku produkcyjnego.
1. Załaduj i rzutuj rysunek DWG
Metoda cad.Image.load() otwiera plik źródłowy. Przykład następnie używa cast(CadImage, image), aby wczytany rysunek mógł być dostępny poprzez właściwości specyficzne dla CAD, w tym block_entities.
Instrukcja with utrzymuje obraz otwarty, podczas gdy jego encje są modyfikowane i eksportowane, a następnie zwalnia zasób po zakończeniu przetwarzania.
2. Znajdź blok Model-Space
Rysunek DWG może zawierać wiele bloków. Nowy tekst należy dodać do bloku, który reprezentuje przeznaczoną przestrzeń rysunku.
Przykład iteruje przez cad_image.block_entities.values_typed i sprawdza zarówno block.name, jak i block.original_block_name pod kątem *Model_Space, ignorując wielkość liter. Zapobiega to zakładaniu, że przestrzeń modelu zawsze może być dostępna za pomocą bezpośredniego klucza słownika.
Jeśli nie można znaleźć przestrzeni modelu, skrypt zgłasza RuntimeError. Jest to lepsze niż ciche eksportowanie pliku bez nowej adnotacji.
3. Utwórz i pozycjonuj encję tekstową
CadText() tworzy nową jednoliniową adnotację. Jej właściwość default_value przechowuje widoczny tekst. Pozycja pochodzi z Cad3DPoint(text_x, text_y, 0.0), przypisanej do first_alignment.
W tym przykładzie text_height = 5.0 określa wysokość w jednostkach rysunku, a scale_x = 1.0 ustawia poziomy współczynnik skali. Obiekt używa stylu tekstowego Standard i warstwy 0. Jego identyfikator koloru 256 oznacza ByLayer, więc warstwa kontroluje jego kolor.
Po ustawieniu tych właściwości, model_space.add_entity(text_entity) wstawia adnotację do przestrzeni modelu.
4. Przelicz granice rysunku
Dodanie tekstu może zmienić obszar zajmowany przez zawartość rysunku. Poniższe wywołanie aktualizuje granice rysunku przed eksportem:
cad_image.update_size(True)
Argument typu Boolean jest wymagany przez API Pythona używane w tym testowanym przykładzie. Wywołanie update_size() bez niego może spowodować błąd brakującego argumentu.
5. Eksport rysunku z adnotacjami
DxfOptions jest używany do zapisywania rysunku jako DXF. CadRasterizationOptions kontroluje wymiary strony przy renderowaniu, a PdfOptions tworzy plik PDF.
Zauważ, że wymiary PDF są zapisane jako 1600.0 i 1200.0, a nie jako liczby całkowite. Testowane powiązania Pythona oczekują wartości liczbowych w tej formie dla tych setterów.
Wymiary strony kontrolują układ eksportu; nie są wysokością tekstu ani rzeczywistymi wymiarami rysunku.
Zmień położenie tekstu, wysokość, kolor i styl
Możesz dostosować encję CadText, zmieniając jej właściwości przed wywołaniem add_entity().
| Właściwość | Co kontroluje | Przykład |
|---|---|---|
default_value | Tekst wyświetlany w rysunku | "VALVE V-101" |
first_alignment | Pozycja tekstu w współrzędnych CAD | Cad3DPoint(150.0, 80.0, 0.0) |
text_height | Wysokość tekstu w jednostkach rysunku | 3.0 |
scale_x | Poziomy współczynnik skali tekstu | 1.0 |
style_type | Nazwa stylu tekstu | "Standard" |
layer_name | Warstwa powiązana z tekstem | "0" |
color_id | Wartość indeksu koloru AutoCAD | 1 for red; 256 for ByLayer |
Na przykład zmień właściwości tekstu w głównym skrypcie, aby oznaczyć zawór:
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
Uruchom ten fragment ustawiający właściwości przed model_space.add_entity(text_entity) w głównym przykładzie.
Używaj współrzędnych, które odpowiadają rzeczywistemu rysunkowi. Rysunki CAD często używają jednostek specyficznych dla projektu lub systemów współrzędnych, więc (150, 80) może znajdować się w jednym rysunku i być daleko od geometrii w innym. Podobnie wysokość 3.0 nie jest rozmiarem czcionki wynoszącym trzy punkty; jest mierzona w jednostkach rysunku.
Powinieneś również używać stylu tekstu i warstwy, które istnieją w rysunku źródłowym. Przykład używa domyślnych ustawień, ale rysunki z niestandardowymi standardami mogą wymagać innych nazw.
Dodaj wiele etykiet tekstowych do rysunku DWG
Gdy pojedyncza etykieta działa, możesz rozszerzyć to samo podejście na kilka adnotacji. Jest to przydatne, gdy identyfikatory sprzętu, nazwy pomieszczeń lub odniesienia do inspekcji są już przechowywane jako dane strukturalne.
Na przykład, zdefiniuj etykiety i ich współrzędne wstawiania:
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)
Umieść ten fragment wewnątrz bloku with, po znalezieniu przestrzeni modelu i przed eksportami DXF/PDF. Używa tego samego wzorca tworzenia encji co działający przykład pojedynczego tekstu; wariant wielokrotnej etykiety nie został tutaj osobno przetestowany.
W rzeczywistej aplikacji labels mogą być wypełniane z pliku CSV, rejestru sprzętu lub bazy danych. Główną odpowiedzialnością Twojej aplikacji jest dostarczenie prawidłowych współrzędnych oraz odpowiednich właściwości tekstu. Biblioteka wstawia encje w określonych przez Ciebie pozycjach; nie zapobiega automatycznie nakładaniu się etykiet.
Zapisz rysunek z tekstem jako DXF lub PDF
Format, który wybierzesz, zależy od tego, co się stanie po adnotacji.
Zapisz jako DXF do edycji CAD
Główny przykład używa DxfOptions do eksportu rysunku:
dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)
DXF jest przydatny, gdy kolejnym krokiem jest aplikacja CAD lub inny system, który konsumuje jednostki rysunkowe. Jednak tabela obsługiwanych formatów Aspose.CAD opisuje zapisywanie DXF jako częściowo obsługiwane. Sprawdź ważne adnotacje, warstwy i geometrie w wyeksportowanym pliku przed użyciem go w procesie inżynierskim.
Zapisz jako PDF do przeglądania i udostępniania
Do przeglądów projektów, raportów lub dystrybucji dokumentów przykład również eksportuje plik 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 jest przeznaczony do przeglądania powstałego rysunku, a nie do edytowania jego elementów CAD. Jeśli potrzebujesz zaktualizowanego pliku DWG, użyj oddzielnego, kompatybilnego przepływu pracy CAD, aby wygenerować go z odpowiedniego formatu pośredniego; bezpośrednie zapisywanie DWG nie jest wymienione w API Pythona.
Rozwiązywanie problemów z wstawianiem tekstu w plikach DWG
Wstawiony tekst nie jest widoczny. Najpierw sprawdź współrzędne tekstu. Etykieta mogła zostać umieszczona poza widoczną geometrią. Sprawdź także widoczność warstwy, wysokość tekstu oraz wybrany styl tekstu. Porównaj wyniki DXF i PDF, aby określić, czy problem występuje podczas wstawiania encji czy renderowania.
Skrypt nie może znaleźć przestrzeni modelu. Przykład zgłasza Model space block was not found. jeśli żaden z nazw bloków nie pasuje do *Model_Space. Sprawdź bloki w pliku źródłowym i potwierdź, że zawiera dane przestrzeni modelu w oczekiwanej strukturze. Nie kontynuuj przy brakującym odwołaniu do bloku.
update_size() zgłasza brakujący argument. Użyj cad_image.update_size(True) jak pokazano w działającym przykładzie. Ta sygnatura jest ważna dla używanego tutaj powiązania Pythona.
Wymiary strony PDF wywołują błąd typu. Przekaż wartości zmiennoprzecinkowe, takie jak 1600.0 i 1200.0, do page_width i page_height, odpowiednio.
Tekst wygląda inaczej niż w edytorze CAD. Sprawdź styl tekstu rysunku oraz czy odpowiednie czcionki są dostępne w środowisku przetwarzania. Renderowanie może się różnić, jeśli oczekiwana czcionka jest brakująca lub zastąpiona.
Plik DXF zawiera nieoczekiwane różnice. Zapisywanie DXF jest obsługiwane tylko częściowo. Przetestuj na reprezentatywnych rysunkach i sprawdź powstałe obiekty w przeglądarce CAD przed włączeniem wyniku do zautomatyzowanego procesu.
Najczęściej zadawane pytania
Czy mogę dodać tekst do pliku DWG przy użyciu Pythona bez AutoCAD?
Tak. Aspose.CAD for Python via .NET może wczytać rysunek DWG i dodać encję CadText bez AutoCAD. Następnie przykład eksportuje zmodyfikowany rysunek do formatu DXF i PDF.
Jak określić pozycję tekstu w rysunku DWG?
Ustaw first_alignment w obiekcie CadText przy użyciu Cad3DPoint(x, y, z). Wybierz wartości, które odpowiadają odpowiedniej lokalizacji w oryginalnym rysunku.
Czy mogę dodać tekst do konkretnej warstwy?
Tak. Ustaw layer_name na nazwę docelowej warstwy. W głównym przykładzie adnotacja używa warstwy 0 i identyfikatora koloru 256 (ByLayer).
Czy mogę automatycznie dodać wiele etykiet tekstowych?
Tak. Utwórz nowy podmiot CadText dla każdej etykiety, ustaw jego zawartość i współrzędne, a następnie dodaj go do przestrzeni modelu. Ten wzorzec może być sterowany listą rekordów lub innym źródłem danych strukturalnych.
Czy mogę zapisać zmodyfikowany rysunek z powrotem do DWG?
Bezpośrednie zapisywanie DWG nie jest wymienione w Obsługiwane formaty Aspose.CAD for Python. Testowany przepływ pracy eksportuje zmodyfikowany rysunek do DXF i PDF, pozostawiając źródłowy plik DWG niezmieniony.
Uzyskaj darmową tymczasową licencję
Możesz poprosić o darmową 30‑dniową tymczasową licencję, aby ocenić Aspose.CAD for Python via .NET bez ograniczeń oceny. Aby zastosować licencję w swojej aplikacji Python, postępuj zgodnie z przewodnikiem licencjonowania Aspose.CAD.
Bezpłatne zasoby edukacyjne
Zapoznaj się z tymi zasobami, aby uzyskać więcej informacji o przetwarzaniu rysunków CAD w języku Python:
- Aspose.CAD for Python Developer Guide – Dowiedz się, jak ładować i przetwarzać pliki CAD.
- Aspose.CAD Python API Reference – Przejrzyj klasy, właściwości i metody użyte w przykładach.
- Work with Text in CAD Drawings – Poznaj typy encji CAD zawierających tekst.
- Supported CAD File Formats – Sprawdź dostępne formaty wejściowe i wyjściowe.
- Free Online CAD Applications – Wyświetlaj lub konwertuj pliki CAD przy użyciu narzędzi działających w przeglądarce.
- Aspose.CAD Support Forum – Zadaj pytania dotyczące konkretnych rysunków lub zachowania API.
Podsumowanie
Dodawanie tekstu do rysunku DWG przy użyciu Pythona to praktyczny sposób na generowanie etykiet sprzętu, identyfikatorów pomieszczeń i innych adnotacji z danych aplikacji. Kluczowe kroki to zlokalizowanie przestrzeni modelu, utworzenie encji CadText z odpowiednimi współrzędnymi i stylizacją oraz zaktualizowanie granic rysunku przed eksportem.
Kolejnym krokiem jest zastąpienie przykładowej etykiety współrzędnymi i identyfikatorami z własnych danych rysunku. Zweryfikuj wyjściowy plik DXF w edytorze CAD i użyj pliku PDF jako kopii przeglądowej, szczególnie przy wdrażaniu przepływu pracy w różnych rysunkach o różnych jednostkach, warstwach lub czcionkach.
