متن را به یک نقشه 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 را در همان پوشه‌ای که اسکریپت پایتون شما قرار دارد قرار دهید. این مثال از مختصات فضای مدل (100, 100, 0) و ارتفاع متن 5.0 واحد رسم استفاده می‌کند. ممکن است برای متناسب کردن با نقشه خود نیاز به تنظیم این مقادیر داشته باشید.

افزودن متن به یک نقشه DWG در پایتون

نقشه‌های CAD متن را به‌عنوان موجودیت‌ها نه به‌عنوان پیکسل‌ها ذخیره می‌کنند. CadText کلاس یک موجودیت TEXT تک‌خطی را نشان می‌دهد که دارای ویژگی‌هایی برای محتوا، موقعیت، ارتفاع، سبک و لایه است. افزودن چنین موجودیتی بخش حاشیه‌نویسی مدل CAD را حفظ می‌کند، نه اینکه صرفاً کلمات را روی تصویر صادر شده رسم کند.

گردش کار این است که فایل DWG را بارگذاری کنید، بلوک مدل‌اسپیس آن را پیدا کنید، یک موجودیت CadText ایجاد کنید، آن را به آن بلوک اضافه کنید، حدود نقشه را به‌روزرسانی کنید و نتیجه را صادر کنید.

کد کامل پایتون برای درج متن در یک نقشه 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)

آرگومان بولی توسط API پایتون استفاده شده در این مثال آزمایشی مورد نیاز است. فراخوانی update_size() بدون آن می‌تواند منجر به خطای عدم وجود آرگومان شود.

5. صادرات نقاشی حاشیه‌دار

DxfOptions برای ذخیره‌سازی نقشه به صورت DXF استفاده می‌شود. CadRasterizationOptions ابعاد صفحه را برای رندرینگ کنترل می‌کند و PdfOptions فایل PDF را تولید می‌کند.

توجه داشته باشید که ابعاد PDF به صورت 1600.0 و 1200.0 نوشته شده‌اند، نه به صورت اعداد صحیح. بایندینگ‌های تست‌شدهٔ پایتون برای این تنظیم‌کننده‌ها انتظار مقادیر عددی به این شکل را دارند.

ابعاد صفحه کنترل‌کنندهٔ طرح خروجی هستند؛ آن‌ها نه ارتفاع متن یا ابعاد واقعی رسم هستند.

تغییر موقعیت متن، ارتفاع، رنگ و سبک

می‌توانید یک موجودیت CadText را با تغییر ویژگی‌های آن قبل از فراخوانی add_entity() سفارشی کنید.

PropertyWhat it controlsExample
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 برای API پایتون فهرست نشده است.

عیب‌یابی درج متن در فایل‌های DWG

متن وارد شده قابل مشاهده نیست. ابتدا مختصات متن را بررسی کنید. ممکن است برچسب خارج از هندسه قابل مشاهده قرار گرفته باشد. همچنین قابلیت مشاهده لایه، ارتفاع متن و سبک متن انتخاب‌شده را بررسی کنید. خروجی‌های DXF و PDF را مقایسه کنید تا مشخص شود آیا مشکل در هنگام درج موجودیت یا رندرینگ رخ می‌دهد.

اسکریپت نمی‌تواند فضای مدل را پیدا کند. مثال خطای Model space block was not found. را برمی‌انگیزد اگر هیچ‌یک از نام‌های بلوک با *Model_Space مطابقت نداشته باشد. بلوک‌های موجود در فایل منبع را بررسی کنید و تأیید کنید که داده‌های فضای‑مدل را در ساختار مورد انتظار دارد. ادامه ندهید با یک مرجع بلوک گمشده.

update_size() گزارش می‌دهد که یک آرگومان گمشده است. از cad_image.update_size(True) همان‌طور که در مثال کارآمد نشان داده شده است استفاده کنید. این امضا برای بایندینگ پایتون استفاده‌شده در اینجا مهم است.

ابعاد صفحه PDF باعث بروز خطای نوع می‌شود. مقادیر شناور مانند 1600.0 و 1200.0 را به ترتیب به page_width و page_height پاس دهید.

متن متفاوت از ویرایشگر CAD به نظر می‌رسد. سبک متن نقشه و این‌که آیا قلم‌های مربوطه در محیط پردازش موجود هستند را بررسی کنید. اگر قلم مورد انتظار موجود نباشد یا جایگزین شود، رندر ممکن است متفاوت باشد.

فایل DXF حاوی اختلافات غیرمنتظره است. نوشتن DXF فقط به‌صورت جزئی پشتیبانی می‌شود. با نقشه‌های نماینده تست کنید و قبل از ادغام خروجی در یک فرآیند خودکار، موجودیت‌های حاصل را در یک نمایشگر CAD بررسی کنید.

سوالات متداول

آیا می‌توانم بدون AutoCAD، متن را به یک فایل DWG با Python اضافه کنم؟

بله. Aspose.CAD for Python via .NET می‌تواند یک نقشه DWG را بارگذاری کرده و یک موجودیت CadText را بدون AutoCAD اضافه کند. سپس مثال، نقشه‌ی اصلاح‌شده را به DXF و PDF صادر می‌کند.

چگونه موقعیت متن را در یک نقشه DWG مشخص کنم؟

با استفاده از Cad3DPoint(x, y, z) مقدار first_alignment را در شیء CadText تنظیم کنید. مقادیری را انتخاب کنید که با موقعیت مناسب در نقشه اصلی مطابقت داشته باشند.

آیا می‌توانم متن را به لایه خاصی اضافه کنم؟

بله. layer_name را به نام لایه مورد نظر تنظیم کنید. در مثال اصلی، حاشیه‌نویسی از لایه 0 و شناسه رنگ 256 (ByLayer) استفاده می‌کند.

آیا می‌توانم چندین برچسب متنی را به‌صورت خودکار اضافه کنم؟

بله. برای هر برچسب یک موجودیت CadText جدید ایجاد کنید، محتوا و مختصات آن را تنظیم کنید و به فضای مدل اضافه کنید. این الگو می‌تواند توسط فهرستی از رکوردها یا منبع داده ساختاری دیگر هدایت شود.

آیا می‌توانم نقشهٔ اصلاح‌شده را دوباره به DWG ذخیره کنم؟

ذخیره‌سازی مستقیم DWG در فهرست Aspose.CAD for Python فرمت‌های پشتیبانی‌شده موجود نیست. جریان کاری آزمایش‌شده، نقشه‌ی اصلاح‌شده را به DXF و PDF صادر می‌کند و DWG منبع را بدون تغییر می‌گذارد.

دریافت یک مجوز موقت رایگان

You can درخواست یک لایسنس موقت 30‑روزه رایگان برای ارزیابی Aspose.CAD for Python via .NET بدون محدودیت‌های ارزیابی. برای اعمال لایسنس در برنامه Python خود، راهنمای Aspose.CAD راهنمای مجوزدهی را دنبال کنید.

منابع آموزشی رایگان

برای اطلاعات بیشتر درباره پردازش نقشه‌های CAD در پایتون، این منابع را بررسی کنید:

نتیجه‌گیری

افزودن متن به یک نقشه DWG با استفاده از Python روشی عملی برای تولید برچسب‌های تجهیزات، شناسه‌های اتاق و سایر حاشیه‌نویسی‌ها از داده‌های برنامه است. مراحل اساسی شامل یافتن فضای مدل، ایجاد یک موجودیت CadText با مختصات و سبک مناسب، و به‌روزرسانی مرزهای نقشه قبل از خروجی‌گیری می‌باشد.

گام بعدی این است که برچسب مثال را با مختصات و شناسه‌های داده‌های رسم خود جایگزین کنید. خروجی DXF را در یک ویرایشگر CAD بررسی کنید و از PDF به عنوان نسخه بازبینی استفاده کنید، به‌ویژه هنگام استقرار جریان کار بر روی نقشه‌هایی با واحدها، لایه‌ها یا قلم‌های متفاوت.