Додавання тексту до малюнка у форматі DWG часто є частиною більшого інженерного проєкту. У певних випадках вам може знадобитися маркувати обладнання, ідентифікувати приміщення, додавати посилання на ревізії або розміщувати нотатки у заданих координатах. Коли ці дані надходять з бази даних або електронної таблиці, ручне додавання кожної мітки у CAD‑редакторі є зайвою роботою.

Aspose.CAD for Python via .NET дозволяє завантажити креслення DWG, додати текстовий об’єкт у його модельний простір і експортувати анотований вміст. У цьому підручнику ви додасте текст до креслення DWG за допомогою Python, встановите його позицію та вигляд і збереже результат у форматах DXF та PDF.

Встановити Aspose.CAD for Python via .NET

Вам потрібне робоче середовище Python, Aspose.CAD package, та файл DWG для анотування. AutoCAD не потрібен для запуску цього прикладу.

Встановіть пакет за допомогою pip:

pip install aspose-cad

Для отримання додаткових відомостей про налаштування перегляньте Aspose.CAD інструкція з встановлення.

Розмістіть файл DWG під назвою sample.dwg у тій же папці, що й ваш скрипт Python. У прикладі використовуються координати простору моделі (100, 100, 0) та висота тексту 5.0 одиниць креслення. Можливо, вам доведеться скоригувати ці значення, щоб вони підходили до вашого креслення.

Додати текст до DWG‑малюнка в Python

CAD‑чертежі зберігають текст як об’єкти, а не як пікселі. Клас CadText представляє однорядковий об’єкт TEXT з властивостями для його вмісту, розташування, висоти, стилю та шару. Додавання такого об’єкта зберігає частину анотації CAD‑моделі, а не просто накладає слова на експортоване зображення.

Робочий процес полягає у завантаженні DWG‑файлу, пошуку його блоку model‑space, створенні сутності CadText, додаванні її до цього блоку, оновленні меж креслення та експорту результату.

Повний код Python для вставки тексту у DWG‑малюнок

Наступний приклад був протестований за допомогою Aspose.CAD for Python via .NET. Він додає мітку Hello from Aspose.CAD Python до малюнка та створює два вихідних файли.

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.")

Очікуваний результат

Коли скрипт успішно завершується, він створює наступні файли поруч із sample.dwg:

  • drawing_with_text.dxf — експортований CAD‑малюнок з новим текстовим об’єктом, якщо це підтримується записувачем DXF.
  • drawing_with_text.pdf — створена копія анотованого малюнка для перегляду або поширення.

Вивід консолі:

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

Відкрийте обидва вихідних файли, щоб переконатися, що мітка видима та правильно розташована. Оригінальний sample.dwg не змінено.

Як працює код Python

Декілька деталей у прикладі мають значення, коли ви переходите від простого тестового малюнка до виробничого файлу.

1. Завантажити та привести тип DWG‑малюнка

Метод cad.Image.load() відкриває вихідний файл. У прикладі потім використовується cast(CadImage, image), щоб отримати доступ до завантаженого креслення через специфічні для CAD властивості, включаючи block_entities.

with оператор тримає зображення відкритим, доки його сутності змінюються та експортуються, після чого звільняє ресурс, коли обробка завершується.

2. Знайти блок простору моделі

DWG‑чертеж може містити кілька блоків. Новий текст слід додати до блоку, який представляє призначений простір малювання.

Приклад ітерує через cad_image.block_entities.values_typed і перевіряє як block.name, так і block.original_block_name на наявність *Model_Space, ігноруючи регістр. Це запобігає припущенню, що простір моделі завжди можна отримати за допомогою прямого ключа словника.

Якщо простір моделі не знайдено, скрипт піднімає RuntimeError. Це краще, ніж безшумно експортувати файл без нової анотації.

3. Створення та розташування текстового об’єкта

CadText() створює нову однорядкову анотацію. Її властивість default_value зберігає видимий текст. Позиція береться з Cad3DPoint(text_x, text_y, 0.0), призначеної до first_alignment.

У цьому прикладі text_height = 5.0 визначає висоту у одиницях креслення, а scale_x = 1.0 встановлює горизонтальний коефіцієнт масштабування. Сутність використовує текстовий стиль Standard і шар 0. Її ідентифікатор кольору 256 означає ByLayer, тому шар контролює його колір.

Після встановлення цих властивостей, model_space.add_entity(text_entity) вставляє анотацію у модельний простір.

4. Перерахувати межі малюнка

Додавання тексту може змінити область, зайняту графічним вмістом. Нижче наведений виклик оновлює межі малюнка перед експортом:

cad_image.update_size(True)

Булевий аргумент є обов’язковим для Python API, що використовується у цьому тестовому прикладі. Виклик update_size() без нього може спричинити помилку через відсутність аргументу.

5. Експортувати анотоване креслення

DxfOptions використовується для збереження малюнка у форматі DXF. CadRasterizationOptions контролює розміри сторінки під час рендерингу, а PdfOptions створює PDF‑файл.

Зверніть увагу, що розміри PDF записані як 1600.0 і 1200.0, а не цілими числами. Перевірені прив’язки Python очікують числові значення у такій формі для цих встановлювачів.

Розміри сторінки контролюють макет експорту; вони не є висотою тексту або реальними розмірами малюнка.

Змінити позицію тексту, висоту, колір і стиль

Ви можете налаштувати сутність CadText, змінюючи її властивості перед викликом add_entity().

ВластивістьЩо контролюєПриклад
default_valueТекст, що відображається у кресленні"VALVE V-101"
first_alignmentПозиція тексту у координатах CADCad3DPoint(150.0, 80.0, 0.0)
text_heightВисота тексту у одиницях креслення3.0
scale_xГоризонтальний коефіцієнт масштабування тексту1.0
style_typeНазва стилю тексту"Standard"
layer_nameШар, пов’язаний з текстом"0"
color_idЗначення індексу кольору AutoCAD1 для червоного; 256 для ByLayer

Наприклад, змініть властивості тексту у головному скрипті, щоб позначити клапан:

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

Запустіть цей фрагмент налаштування властивостей перед model_space.add_entity(text_entity) у головному прикладі.

Використовуйте координати, які відповідають фактичному чертежу. CAD креслення часто використовують специфічні для проєкту одиниці або системи координат, тому (150, 80) може бути всередині одного креслення і далеко від геометрії в іншому. Аналогічно, висота 3.0 не є розміром шрифту в три пункти; вона вимірюється в одиницях креслення.

Ви також повинні використовувати стиль тексту та шар, які існують у вихідному кресленні. У прикладі використано загальні типові значення, але креслення з власними стандартами можуть вимагати інших назв.

Додати кілька текстових міток до DWG‑малюнка

Як тільки одна мітка працює, ви можете розширити той самий підхід на кілька анотацій. Це корисно, коли ідентифікатори обладнання, назви кімнат або посилання на інспекції вже зберігаються як структуровані дані.

Наприклад, визначте мітки та їх координати вставки:

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)

Розмістіть цей фрагмент всередині блоку with, після того як знайдено модельний простір і перед експортом DXF/PDF. Він використовує той самий шаблон створення сутностей, що й працюючий приклад з одним текстом; варіант з кількома мітками окремо не тестувався.

У реальному застосунку labels можуть бути заповнені з CSV‑файлу, реєстру обладнання або бази даних. Основна відповідальність вашого застосунку — забезпечити дійсні координати та відповідні текстові властивості. Бібліотека вставляє об’єкти у вказані вами позиції; вона не запобігає автоматично накладанню міток.

Збережіть малюнок з текстом у форматі DXF або PDF

Формат, який ви обираєте, залежить від того, що відбувається після анотації.

Зберегти як DXF для редагування CAD

Головний приклад використовує DxfOptions для експорту малюнка:

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

DXF корисний, коли наступний крок включає CAD‑застосунок або іншу систему, що споживає графічні об’єкти. Однак таблиця підтримуваних форматів Aspose.CAD описує запис DXF як частково підтримується. Перевірте важливі анотації, шари та геометрію у експортованому файлі перед використанням його в інженерному робочому процесі.

Зберегти як PDF для перегляду та спільного використання

Для оглядів дизайну, звітів або розповсюдження документів приклад також експортує 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 призначений для перегляду отриманого креслення, а не для редагування його CAD‑сутностей. Якщо вам потрібен оновлений файл DWG, використайте окремий сумісний CAD‑робочий процес, щоб створити його з відповідного проміжного формату; пряме збереження DWG не зазначено в Python API.

Усунення проблем при вставці тексту у файли DWG

Вставлений текст не видно. Спочатку перевірте координати тексту. Можливо, мітка була розміщена поза видимою геометрією. Також перевірте видимість шару, висоту тексту та вибраний стиль тексту. Порівняйте вихідні дані DXF і PDF, щоб визначити, чи виникає проблема під час вставки сутності або її відображення.

Скрипт не може знайти модельний простір. Приклад викидає Model space block was not found. якщо жодне ім’я блоку не відповідає *Model_Space. Перевірте блоки у вихідному файлі та переконайтеся, що він містить дані модельного простору у очікуваній структурі. Не продовжуйте роботу з відсутньою посиланням на блок.

update_size() повідомляє про відсутній аргумент. Використовуйте cad_image.update_size(True), як показано у працюючому прикладі. Цей підпис важливий для Python‑зв’язки, що використовується тут.

PDF-розміри сторінки викликають помилку типу. Передайте значення з плаваючою комою, такі як 1600.0 і 1200.0, у page_width та page_height відповідно.

Текст виглядає інакше, ніж у CAD-редакторі. Перевірте стиль тексту креслення та чи доступні відповідні шрифти у середовищі обробки. Відображення може відрізнятися, якщо очікуваний шрифт відсутній або замінений.

DXF містить неочікувані відмінності. Запис DXF підтримується лише частково. Перевірте за допомогою представницьких креслень і перегляньте отримані сутності у CAD‑переглядачі перед інтеграцією виводу в автоматизований процес.

Поширені запитання

Чи можу я додати текст до файлу DWG за допомогою Python без AutoCAD?

Так. Aspose.CAD for Python via .NET може завантажити DWG‑малюнок і додати сутність CadText без AutoCAD. Приклад потім експортує змінений малюнок у DXF та PDF.

Як вказати позицію тексту у DWG‑кресленні?

Встановіть first_alignment у об’єкті CadText, використовуючи Cad3DPoint(x, y, z). Виберіть значення, які відповідають підходящому розташуванню у вихідному кресленні.

Чи можу я додати текст до конкретного шару?

Так. Встановіть layer_name у назву потрібного шару. У головному прикладі анотація використовує шар 0 і ідентифікатор кольору 256 (ByLayer).

Чи можу я автоматично додати кілька текстових міток?

Так. Створіть новий CadText об’єкт для кожної мітки, встановіть його вміст і координати та додайте його до простору моделі. Цей шаблон може бути керований списком записів або іншим структурованим джерелом даних.

Чи можу я зберегти змінений чертеж назад у DWG?

Пряме збереження DWG не зазначено у Aspose.CAD for Python підтримувані формати. Перевірений робочий процес експортує змінене креслення у DXF та PDF, залишаючи вихідний DWG без змін.

Отримати безкоштовну тимчасову ліцензію

Ви можете запросити безкоштовну 30‑денну тимчасову ліцензію, щоб оцінити Aspose.CAD for Python via .NET без обмежень оцінки. Щоб застосувати ліцензію у вашому Python‑застосунку, дотримуйтесь посібника з ліцензування Aspose.CAD.

Безкоштовні навчальні ресурси

Дослідіть ці ресурси, щоб отримати більше інформації про обробку CAD‑чертежів у Python:

Висновок

Додавання тексту до DWG‑чертежу за допомогою Python — практичний спосіб створювати мітки обладнання, ідентифікатори приміщень та інші анотації з даних програми. Основні кроки полягають у знаходженні простору моделі, створенні сутності CadText з відповідними координатами та стилем, а також оновленні меж чертежу перед експортом.

Наступний крок — замінити приклад мітки координатами та ідентифікаторами з ваших власних даних креслення. Перевірте вихідний DXF у CAD‑редакторі та використовуйте PDF як копію для перегляду, особливо під час впровадження робочого процесу в різних кресленнях з різними одиницями вимірювання, шарами або шрифтами.