Bir DWG çiziminde belirli bir etiketi veya notu aramak, dosyayı bir CAD düzenleyicisinde açıp her açıklamayı manuel olarak kontrol etmek anlamına gelmemelidir. Python ile çizimin metin varlıklarını inceleyebilir ve eşleşen oda adlarını, ekipman etiketlerini veya diğer açıklamaları belirleyebilirsiniz.

Bu makale, Python kullanarak bir DWG dosyasında metin arama işlemini Aspose.CAD for Python via .NET ile gösterir. Bir DWG dosyası yükleyecek, tek satır ve çok satırlı metinleri arayacak, eşleşen içeriği ve katmanını yazdıracak ve isteğe bağlı olarak aramayı tek bir katmanla sınırlayacaksınız. Örnek, çizimi değiştirmeden veya dışa aktarmadan okur.

Kur Aspose.CAD for Python via .NET

Örneği takip etmek için Aspose.CAD tarafından desteklenen bir Python ortamına, metin açıklamaları içeren bir DWG dosyasına ve Aspose.CAD paketine ihtiyacınız var. Aspose.CAD Python ürün sayfası gereksinimleri arasında Python 3.9 veya daha yenisini listeler.

Paketi PyPI’dan yükleyin:

pip install aspose-cad

Ayrıca paket kurulum detayları için Aspose.CAD kurulum kılavuzu inceleyebilirsiniz.

Bu öğreticide, çalışma dizininize drawing.dwg adlı bir dosya koyun. Mümkünse, hem tek satır TEXT hem de çok satırlı MTEXT açıklamaları içeren bir çizim kullanın, böylece her iki durumu da kontrol edebilirsiniz.

Python Kullanarak DWG Dosyasında Metin Arama

DWG dosyaları çizim içeriğini varlıklar olarak depolar. Metin araması için iki yararlı varlık türü şunlardır:

  • TEXT (CadText): Genellikle tek satırlı bir açıklamayı temsil eder. default_value özelliği metin değerini sağlar.
  • MTEXT (CadMText): Çok satırlı metni temsil eder. full_clear_text özelliği, CAD biçimlendirme kodları olmadan metni döndürür.

Bu varlıkları, çizimi önce bir görüntüye veya PDF dönüştürmeden arayabilirsiniz. İş akışı basittir:

  1. DWG dosyasını Image.load() ile yükleyin ve CadImage olarak erişin.
  2. Çizimin entities koleksiyonunda yineleyin.
  3. TEXT ve MTEXT varlıklarını tanımlayın ve içeriklerini okuyun.
  4. Her bir değeri arama teriminizle karşılaştırın.
  5. Her eşleşmeyi ve varlığın ait olduğu katmanı gösterin.

Aşağıdaki örnek bu adımları uygular. Çizimin üst düzey TEXT ve MTEXT varlıklarını arar; iç içe bloklar ve öznitelikler içindeki metin aşağıda ayrı ayrı ele alınmıştır.

DWG Çiziminde Metni Programlı Şekilde Bul

Diyelim ki bir mühendislik çiziminde valve kelimesini içeren tüm açıklamaları bulmanız gerekiyor. Aşağıdaki kod, bu kelimeyi büyük/küçük harf duyarsız bir şekilde arar ve eşleşen her varlığın katmanını raporlar.

import aspose.cad as cad
from aspose.pycore import cast

# Path to the source drawing and the text to find.
dwg_path = "drawing.dwg"
keyword = "valve"

if not keyword:
    raise ValueError("The search keyword must not be empty.")

# Load the DWG as a CAD image.
image = cad.Image.load(dwg_path)
cad_image = cast(cad.fileformats.cad.CadImage, image)

entity_types = cad.fileformats.cad.cadconsts.CadEntityTypeName
matches = 0

# Search top-level text entities.
for entity in cad_image.entities:
    text_value = None

if entity.type_name == entity_types.TEXT:
        text_entity = cast(
            cad.fileformats.cad.cadobjects.CadText, entity
        )
        text_value = text_entity.default_value

elif entity.type_name == entity_types.MTEXT:
        mtext_entity = cast(
            cad.fileformats.cad.cadobjects.CadMText, entity
        )
        text_value = mtext_entity.full_clear_text

# Match a word or phrase without case sensitivity.
    if text_value and keyword.casefold() in text_value.casefold():
        matches += 1
        print(f"Match: {text_value}")
        print(f"Layer: {entity.layer_name}")
        print("---")

print(f"Total matches: {matches}")

Kod Nasıl Çalışır

Image.load() yöntemi DWG dosyasını açar. cast() yardımcı işlevi daha sonra CadImage üyelerine, özellikle entities koleksiyonuna erişim sağlar.

Her varlığın, temsil ettiği çizim nesnesinin türünü belirten bir type_name özelliği vardır. Bu tür TEXT olduğunda, kod CadText.default_value değerini okur. Tür MTEXT olduğunda, okunabilir çok satırlı değeri elde etmek için CadMText.full_clear_text kullanılır.

Python’un casefold() yöntemi karşılaştırmayı büyük/küçük harf duyarsız hâle getirir, bu yüzden valve, Valve ve VALVE hepsi potansiyel eşleşmelerdir. Koşul ayrıca kısmi eşleşmeleri de destekler: valve aramak, Main Valve gibi bir açıklamayı eşleştirir.

Son olarak, entity.layer_name her sonucun bulunduğu CAD katmanını tanımlar. Bu, çizimde ekipman, boyutlar ve açıklamalar için ayrı katmanlar bulunduğunda eşleşen bir notu bulmanıza yardımcı olabilir.

Beklenen Çıktı

İki eşleşen açıklama içeren örnek bir çizim için çıktı şu şekilde görünebilir:

Match: Main Valve
Layer: Plumbing
---
Match: VALVE CONTROL ROOM
Layer: Annotations
---
Total matches: 2

Bu bir örnek çıktı. Sonuçlarınız DWG dosyanızdaki gerçek metin varlıklarına bağlıdır. Arama, eşleşen üst düzey TEXT veya MTTEXT varlıklarını bulamazsa, son satır Total matches: 0 raporlayacaktır.

Belirli bir DWG Katmanında Metin Arama

Bazı çizimler, içeriği Annotations, Equipment veya Plumbing gibi özel katmanlara düzenler. İhtiyacınız olan metni içeren katmanı zaten biliyorsanız, değerlerini kontrol etmeden önce varlıkları filtreleyebilirsiniz.

Ana örnekte, döngüden önce hedef katmanı tanımlayın:

target_layer = "Annotations"

Ardından bu koşulu for entity in cad_image.entities: satırının hemen sonrasına ekleyin:

if entity.layer_name.casefold() != target_layer.casefold():
    continue

Arama kodunun geri kalanı değişmeden kalır. Yalnızca katman adı Annotations ile eşleşen varlıklar anahtar kelime için incelenecektir. Bu karşılaştırma katman adındaki büyük/küçük harf duyarlılığını da göz ardı eder.

Filtre, her varlığın atanmış katmanında çalışır; kendiliğinden iç içe blok içeriğini genişletmez veya dış referansları aramaz.

DWG’den Tam Metni Bulma veya Metin Çıkarma

Ana örnek, büyük/küçük harfe duyarsız bir alt dize araması kullanır. Karşılaştırmayı görevinize uyacak şekilde uyarlayabilirsiniz.

Tam bir metin değeri bulun: Eşleşen koşulu, yalnızca anahtar kelimeyi içeren daha uzun açıklamaları hariç tutmak için aşağıdaki ifadeyle değiştirin:

if text_value and text_value.casefold() == keyword.casefold():

Büyük/küçük harfe duyarlı bir arama kullanın: Karşılaştırmanın her iki tarafında da orijinal büyük/küçük harf kullanımını koruyun:

if text_value and keyword in text_value:

Tüm üst düzey TEXT ve MTEXT değerlerini çıkarın: Anahtar kelime karşılaştırmasını kaldırın ve her boş olmayan text_value öğesini işleyin. Örneğin, ana döngüdeki varlık‑tipi kontrollerinden sonra, anahtar kelimeyi test etmek yerine bir listeye metin ekleyebilirsiniz:

if text_value:
    extracted_text.append(text_value)

Bu varyasyonu kullanıyorsanız, döngüden önce extracted_text = [] değişkenini başlatın. Ardından toplanan dizeleri bir metin dosyasına yazabilir veya ayrı bir arama veya indeksleme iş akışında kullanabilirsiniz. Bu varyasyon hâlâ yalnızca döngü tarafından işlenen varlık türlerini kapsar.

Neden Bazı DWG Metinleri Arama Sonuçlarında Görünmeyebilir

Bir DWG çizimi, üst düzey TEXT ve MTEXT koleksiyonundan daha fazla yerde metin içerebilir. Kod beklenenden daha az eşleşme döndürüyorsa, aşağıdaki olasılıkları kontrol edin:

  • Metin blokları içinde: Bir blok kendi varlıklarını içerebilir. Bu varlıkları incelemek için ek bir dolaşım gerekir.
  • Blok öznitelikleri: Bazı metin değerleri, eklenen bloklarla ilişkili CadAttrib veya CadAttDef varlıklarında saklanır. Bunlar ana örnekte yer almaz.
  • Harici referanslar: Harici olarak referans verilen bir çizimdeki metin, referans verilen içeriğin ayrı ayrı işlenmesini gerektirebilir.
  • Raster içerik: Ekli bir görüntüde yalnızca piksel olarak görünen harfler CAD metin varlıkları değildir. Bu kelimeleri bulmak, bu varlık tabanlı yaklaşımdan ziyade OCR gerektirir.
  • Diğer açıklama türleri: Ölçüler, liderler ve özel CAD nesneleri metni farklı şekilde saklayabilir veya oluşturabilir ve ayrı bir işleme ihtiyaç duyar.

Aspose.CAD metinle çalışma belgeleri CadText, CadMText, CadAttrib ve CadAttDef ilgili metin taşıyan varlık türleri olarak tanımlar. Daha geniş bir arama için, gezinmeyi bu ek nesneleri içerecek şekilde genişletin ve çizimlerinizin yapısına karşı test edin.

Eğer Image.load() başarısız olursa, önce dosya yolunu kontrol edin, ardından DWG dosyasının geçerli olduğunu ve desteklenen bir format kullandığını doğrulayın. Beklenmeyen sonuçlar için, ek açıklama değerlerini ve katmanlarını bir CAD görüntüleyicide doğrulayabileceğiniz küçük bir çizimle başlayın.

Sıkça Sorulan Sorular

Python, AutoCAD olmadan bir DWG dosyasındaki metni arayabilir mi?

Evet. Aspose.CAD for Python via .NET ile, desteklenen bir DWG dosyasını açabilir ve metin varlıklarını programlı olarak inceleyebilirsiniz. Bu iş akışı için AutoCAD’in kurulmuş olması gerekmez.

Python kullanarak bir DWG çiziminde belirli bir kelimeyi nasıl bulabilirim?

Dosyayı bir CadImage olarak yükleyin, varlıkları arasında yineleyin, TEXT ve MTEXT değerlerini okuyun ve her bir değeri anahtar kelimenizle karşılaştırın. Yukarıdaki örnek, büyük/küçük harfe duyarsız kısmi eşleşmeleri bulmak için casefold() ve Python’un in operatörünü kullanır.

Python kullanarak bir DWG dosyasından tüm metni çıkarabilir miyim?

Desteklenen varlık türlerinden, CadText ve CadMText dahil, metin toplayabilirsiniz. Kapsamlı bir çıkarma süreci, yalnızca üst düzey varlık döngüsüne güvenmek yerine ilgili blok içeriklerini, öznitelikleri ve diğer açıklama nesnelerini de incelemelidir.

Ücretsiz Geçici Lisans Al

Aspose.CAD for Python via .NET’i değerlendirmek için değerlendirme kısıtlamaları olmadan ücretsiz 30 günlük geçici lisans isteyin. Geçici lisans talep süreci geçerli bir iş e-posta adresi gerektirir.

Python uygulamanızda bir lisans uygulama hakkında bilgi için Aspose.CAD lisans kılavuzu sayfasına bakın.

Ücretsiz Öğrenme Kaynakları

DWG çizimlerini işleme ve Python’da CAD varlıklarıyla çalışma hakkında daha fazla bilgi için bu kaynakları inceleyin:

Sonuç

Python kullanarak bir DWG dosyasında metin aramak için çizimi yükleyebilir, TEXT ve MTEXT varlıklarını inceleyebilir ve değerlerini bir anahtar kelimeyle karşılaştırabilirsiniz. Aynı iş akışı eşleşen katmanları raporlayabilir, aramaları belirli bir katmana daraltabilir veya metni daha ileri işleme için toplayabilir. Blok öznitelikleri veya iç içe geçmiş açıklamalar içeren çizimler için, sonuçlara tam bir metin envanteri olarak güvenmeden önce varlık geçişini genişletin.

İlgili