การเพิ่มข้อความลงในภาพวาด 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 ของคุณ ตัวอย่างใช้พิกัด model-space (100, 100, 0) และความสูงของข้อความ 5.0 หน่วยการวาด คุณอาจต้องปรับค่าเหล่านี้ให้เหมาะกับการวาดของคุณ

เพิ่มข้อความลงในภาพวาด DWG ด้วย Python

การวาด CAD จัดเก็บข้อความเป็นเอนทิตีแทนที่จะเป็นพิกเซล.

CadText class แสดงถึงเอนทิตี TEXT แบบบรรทัดเดียว, มีคุณสมบัติสำหรับเนื้อหา, ตำแหน่ง, ความสูง, สไตล์, และเลเยอร์.

การเพิ่มเอนทิตีดังกล่าวจะรักษาส่วนของคำอธิบายในโมเดล CAD แทนที่จะเพียงวาดคำบนรูปภาพที่ส่งออก.

กระบวนการทำงานคือการโหลดไฟล์ DWG, ค้นหา block ของ model‑space, สร้างเอนทิตี CadText, เพิ่มลงใน block นั้น, อัปเดตขอบเขตของการวาด, และส่งออกผลลัพธ์.

โค้ด 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

The cad.Image.load() method เปิดไฟล์ต้นฉบับ ตัวอย่างจากนั้นใช้ cast(CadImage, image) เพื่อให้การวาดที่โหลดแล้วสามารถเข้าถึงได้ผ่านคุณสมบัติที่เฉพาะเจาะจงของ CAD รวมถึง block_entities

with คำสั่งทำให้ภาพเปิดอยู่ขณะมีการแก้ไขและส่งออกเอนทิตีของมัน แล้วจึงปล่อยทรัพยากรเมื่อการประมวลผลเสร็จสิ้น.

2. ค้นหาบล็อก Model-Space

ไฟล์ DWG สามารถมีหลายบล็อกได้ ข้อความใหม่ต้องถูกเพิ่มเข้าไปในบล็อกที่เป็นตัวแทนของพื้นที่วาดที่ต้องการ.

ตัวอย่างนี้วนซ้ำผ่าน cad_image.block_entities.values_typed และตรวจสอบทั้ง block.name และ block.original_block_name สำหรับ *Model_Space โดยไม่สนใจตัวพิมพ์ใหญ่/เล็ก ซึ่งช่วยหลีกเลี่ยงการสันนิษฐานว่าพื้นที่โมเดลสามารถเข้าถึงได้เสมอโดยใช้คีย์พจนานุกรมโดยตรง.

หากไม่พบ model space สคริปต์จะทำการยก RuntimeError. วิธีนี้ดีกว่าการส่งออกไฟล์โดยเงียบ ๆ โดยไม่มี annotation ใหม่.

3. สร้างและกำหนดตำแหน่งของเอนทิตี้ข้อความ

CadText() สร้าง annotation แบบบรรทัดเดียวใหม่ คุณสมบัติ 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) จะใส่คำอธิบายลงใน model space.

4. คำนวณขอบเขตการวาดใหม่

การเพิ่มข้อความอาจทำให้พื้นที่ที่ใช้โดยเนื้อหาการวาดเปลี่ยนแปลงได้ การเรียกใช้ด้านล่างจะอัปเดตขอบเขตการวาดก่อนการส่งออก:

cad_image.update_size(True)

อาร์กิวเมนต์แบบบูลีนจำเป็นสำหรับ API ของ Python ที่ใช้ในตัวอย่างที่ทดสอบนี้ การเรียก update_size() โดยไม่มีอาร์กิวเมนต์นี้อาจทำให้เกิดข้อผิดพลาดเรื่องอาร์กิวเมนต์หายไป

5. ส่งออกภาพวาดที่มีคำอธิบาย

DxfOptions ใช้สำหรับบันทึกภาพวาดเป็น DXF. CadRasterizationOptions ควบคุมขนาดหน้าสำหรับการเรนเดอร์, และ PdfOptions สร้างไฟล์ PDF.

โปรดทราบว่าขนาดของ PDF ถูกเขียนเป็น 1600.0 และ 1200.0 ไม่ใช่จำนวนเต็ม การเชื่อมต่อ Python ที่ทดสอบไว้คาดหวังค่าตัวเลขในรูปแบบนี้สำหรับตัวตั้งค่าเหล่านี้.

ขนาดหน้ากระดาษควบคุมการจัดรูปแบบการส่งออก; พวกมัน ไม่ เป็นความสูงของข้อความหรือขนาดจริงของการวาด.

เปลี่ยนตำแหน่งข้อความ, ความสูง, สี, และสไตล์

คุณสามารถปรับแต่งเอนทิตี CadText ได้โดยการเปลี่ยนแปลงคุณสมบัติก่อนเรียก add_entity()

Propertyสิ่งที่ควบคุมตัวอย่าง
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ค่า AutoCAD Color Index1 สำหรับสีแดง; 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 drawings มักใช้หน่วยหรือระบบพิกัดที่กำหนดตามโครงการ, ดังนั้น (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 หลังจากพบ model space และก่อนการส่งออก 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 ได้. ตัวอย่างจะเกิดข้อผิดพลาด Model space block was not found. หากไม่มีชื่อบล็อกใดตรงกับ *Model_Space. ตรวจสอบบล็อกในไฟล์ต้นฉบับและยืนยันว่ามีข้อมูล 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 ใหม่สำหรับแต่ละป้ายกำกับ, ตั้งค่าข้อความและพิกัดของมัน, แล้วเพิ่มลงใน model space. รูปแบบนี้สามารถขับเคลื่อนโดยรายการบันทึกหรือแหล่งข้อมูลโครงสร้างอื่นได้.

ฉันสามารถบันทึกการวาดที่แก้ไขแล้วกลับเป็น DWG ได้หรือไม่?

การบันทึก DWG โดยตรงไม่ได้ระบุอยู่ในรายการรูปแบบที่สนับสนุนของ Aspose.CAD for Python supported formats. กระบวนการทำงานที่ทดสอบส่งออกการวาดที่แก้ไขเป็น DXF และ PDF โดยไม่ทำให้ DWG ต้นฉบับเปลี่ยนแปลง.

รับใบอนุญาตชั่วคราวฟรี

คุณสามารถ ขอรับใบอนุญาตชั่วคราวฟรี 30 วัน เพื่อประเมิน Aspose.CAD for Python via .NET โดยไม่มีข้อจำกัดในการประเมินผล. เพื่อใช้ใบอนุญาตในแอปพลิเคชัน Python ของคุณ, ให้ทำตาม คู่มือการให้ใบอนุญาต Aspose.CAD.

แหล่งเรียนรู้ฟรี

สำรวจแหล่งข้อมูลเหล่านี้เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับการประมวลผลภาพวาด CAD ใน Python:

  • Aspose.CAD for Python Developer Guide – เรียนรู้วิธีการโหลดและประมวลผลไฟล์ CAD.
  • Aspose.CAD Python API Reference – ตรวจสอบคลาส, คุณสมบัติและเมธอดที่ใช้ในตัวอย่าง.
  • Work with Text in CAD Drawings – เรียนรู้เกี่ยวกับประเภทเอนทิตี้ที่มีข้อความใน CAD.
  • Supported CAD File Formats – ยืนยันรูปแบบไฟล์เข้าและออกที่มีให้.
  • Free Online CAD Applications – ดูหรือแปลงไฟล์ CAD ด้วยเครื่องมือบนเบราว์เซอร์.
  • Aspose.CAD Support Forum – ถามคำถามเกี่ยวกับการวาดเฉพาะหรือพฤติกรรมของ API.

สรุป

การเพิ่มข้อความลงในภาพวาด DWG ด้วย Python เป็นวิธีที่ใช้งานได้จริงในการสร้างป้ายอุปกรณ์, ตัวระบุห้อง, และคำอธิบายอื่น ๆ จากข้อมูลแอปพลิเคชัน ขั้นตอนสำคัญคือการค้นหา model space, สร้างเอนทิตี CadText ด้วยพิกัดและสไตล์ที่เหมาะสม, และอัปเดตขอบเขตของภาพวาดก่อนส่งออก.

ขั้นตอนต่อไปคือการแทนที่ป้ายตัวอย่างด้วยพิกัดและตัวระบุจากข้อมูลการวาดของคุณเอง ตรวจสอบผลลัพธ์ DXF ในโปรแกรมแก้ไข CAD และใช้ PDF เป็นสำเนาตรวจสอบ โดยเฉพาะเมื่อนำกระบวนการทำงานไปใช้กับการวาดที่มีหน่วย, ชั้น, หรือแบบอักษรที่แตกต่างกัน