Das Suchen nach einem bestimmten Etikett oder Hinweis in einer DWG Zeichnung muss nicht bedeuten, die Datei in einem CAD‑Editor zu öffnen und jede Anmerkung manuell zu prüfen. Mit Python können Sie die Textelemente der Zeichnung untersuchen und passende Raumnamen, Gerätebezeichnungen oder andere Anmerkungen identifizieren.
Dieser Artikel zeigt, wie man Text in einer DWG-Datei mit Python suchen mit Aspose.CAD for Python via .NET. Sie laden eine DWG-Datei, suchen einzeiligen und mehrzeiligen Text, geben den passenden Inhalt und dessen Ebene aus und können die Suche optional auf eine Ebene beschränken. Das Beispiel liest die Zeichnung, ohne sie zu ändern oder zu exportieren.
Installieren Aspose.CAD for Python via .NET
Um dem Beispiel zu folgen, benötigen Sie eine von Aspose.CAD unterstützte Python‑Umgebung, eine DWG‑Datei, die Textanmerkungen enthält, und das Aspose.CAD‑Paket. Die Aspose.CAD Python product page listet Python 3.9 oder höher unter den Anforderungen auf.
Installieren Sie das Paket von PyPI:
pip install aspose-cad
Sie können auch die Aspose.CAD Installationsanleitung für Details zur Paketeinrichtung konsultieren.
Für dieses Tutorial legen Sie eine Datei namens
drawing.dwgin Ihrem Arbeitsverzeichnis ab. Idealerweise verwenden Sie eine Zeichnung, die sowohl einzeiligeTEXT- als auch mehrzeiligeMTEXT-Annotationen enthält, damit Sie beide Fälle überprüfen können.
Wie man Text in einer DWG-Datei mit Python
DWG-Dateien speichern den Zeicheninhalt als Entitäten. Für die Textsuche sind zwei nützliche Entitätstypen:
- TEXT (
CadText): Typischerweise stellt es eine einzeilige Anmerkung dar. Seinedefault_value-Eigenschaft liefert den Textwert. - MTEXT (
CadMText): Stellt mehrzeiligen Text dar. Seinefull_clear_text-Eigenschaft gibt den Text ohne CAD-Formatierungscodes zurück.
Sie können diese Entitäten durchsuchen, ohne die Zeichnung zuerst in ein Bild oder ein PDF zu konvertieren. Der Arbeitsablauf ist einfach:
- Laden Sie die DWG-Datei mit
Image.load()und greifen Sie darauf alsCadImagezu. - Durchlaufen Sie die
entities-Sammlung der Zeichnung. - Identifizieren Sie
TEXT- undMTEXT-Entitäten und lesen Sie deren Inhalt. - Vergleichen Sie jeden Wert mit Ihrem Suchbegriff.
- Zeigen Sie jede Übereinstimmung und die Ebene an, zu der die Entität gehört.
Das folgende Beispiel implementiert diese Schritte. Es durchsucht die Top-Level TEXT- und MTEXT-Entitäten der Zeichnung; Text in verschachtelten Blöcken und Attributen wird weiter unten separat behandelt.
Text in einer DWG-Zeichnung programmgesteuert finden
Angenommen, Sie müssen jede Anmerkung finden, die das Wort valve in einer technischen Zeichnung enthält. Der folgende Code sucht nach diesem Wort unabhängig von der Groß‑ und Kleinschreibung und gibt die Ebene jeder passenden Entität aus.
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}")
Wie der Code funktioniert
Die Image.load()‑Methode öffnet die DWG‑Datei. Die cast()‑Hilfsfunktion gibt Ihnen dann Zugriff auf die Mitglieder von CadImage, einschließlich seiner entities‑Sammlung.
Jedes Entity hat einen type_name, der identifiziert, welche Art von Zeichenobjekt es darstellt. Wenn dieser Typ TEXT ist, liest der Code CadText.default_value. Wenn der Typ MTEXT ist, verwendet er CadMText.full_clear_text, um den lesbaren mehrzeiligen Wert zu erhalten.
Python’s casefold()-Methode macht den Vergleich case‑insensitive, sodass valve, Valve und VALVE alle mögliche Übereinstimmungen sind. Die Bedingung unterstützt außerdem Teilübereinstimmungen: Die Suche nach valve findet eine Anmerkung wie Main Valve.
Schließlich identifiziert entity.layer_name die CAD‑Ebene, die jedes Ergebnis enthält. Dies kann Ihnen helfen, eine passende Notiz zu finden, wenn die Zeichnung separate Ebenen für Geräte, Maße und Anmerkungen enthält.
Erwartete Ausgabe
Für eine Beispielzeichnung mit zwei übereinstimmenden Anmerkungen könnte die Ausgabe folgendermaßen aussehen:
Match: Main Valve
Layer: Plumbing
---
Match: VALVE CONTROL ROOM
Layer: Annotations
---
Total matches: 2
Dies ist eine illustrative Ausgabe. Ihre Ergebnisse hängen von den tatsächlichen Textelementen in Ihrer DWG-Datei ab. Wenn die Suche keine passenden top-level TEXT- oder MTEXT-Entitäten findet, wird die letzte Zeile Total matches: 0 melden.
Text in einer bestimmten DWG‑Ebene suchen
Einige Zeichnungen organisieren Inhalte in dedizierten Ebenen, wie Annotations, Equipment oder Plumbing. Wenn Sie bereits wissen, welche Ebene den benötigten Text enthält, können Sie Entitäten filtern, bevor Sie deren Werte prüfen.
Im Hauptbeispiel definieren Sie die Zielschicht vor der Schleife:
target_layer = "Annotations"
Fügen Sie dann diese Bedingung sofort nach for entity in cad_image.entities: ein:
if entity.layer_name.casefold() != target_layer.casefold():
continue
Der Rest des Suchcodes bleibt unverändert. Nur Entitäten, deren Ebenenname Annotations entspricht, werden auf das Schlüsselwort geprüft. Dieser Vergleich ignoriert dabei die Groß‑ und Kleinschreibung im Ebenennamen.
Der Filter arbeitet auf der zugewiesenen Ebene jedes Elements; er erweitert nicht von selbst verschachtelte Blockinhalte oder durchsucht externe Verweise.
Exakten Text finden oder Text aus DWG extrahieren
Das Hauptbeispiel verwendet eine case‑insensitive Teilstring‑Suche. Sie können den Vergleich an Ihre Aufgabe anpassen.
Finden Sie einen genauen Textwert: Ersetzen Sie die Übereinstimmungsbedingung durch den folgenden Ausdruck, um längere Anmerkungen auszuschließen, die lediglich das Schlüsselwort enthalten:
if text_value and text_value.casefold() == keyword.casefold():
Verwenden Sie eine groß-/kleinschreibungssensible Suche: Behalten Sie die ursprüngliche Großschreibung auf beiden Seiten des Vergleichs bei.
if text_value and keyword in text_value:
Alle TEXT- und MTEXT-Werte der obersten Ebene extrahieren: Entfernen Sie den Vergleich des Schlüsselworts und verarbeiten Sie jeden nicht leeren text_value. Zum Beispiel können Sie nach den Entity‑Type‑Prüfungen in der Hauptschleife Text zu einer Liste hinzufügen, anstatt das Schlüsselwort zu testen:
if text_value:
extracted_text.append(text_value)
Initialisieren Sie extracted_text = [] vor der Schleife, wenn Sie diese Variante verwenden. Sie können dann die gesammelten Zeichenketten in eine Textdatei schreiben oder sie in einem separaten Such‑ oder Indexierungs‑Workflow verwenden. Diese Variante deckt weiterhin nur die von der Schleife behandelten Entitätstypen ab.
Warum manche DWG-Texte möglicherweise nicht in den Suchergebnissen erscheinen
Eine DWG‑Zeichnung kann Text an mehr Stellen enthalten als die oberste TEXT‑ und MTEXT‑Sammlung. Wenn der Code weniger Übereinstimmungen zurückgibt als erwartet, prüfen Sie die folgenden Möglichkeiten:
- Text in Blöcken: Ein Block kann seine eigenen Entitäten enthalten. Sie benötigen eine zusätzliche Traversierung, um diese Entitäten zu untersuchen.
- Blockattribute: Einige Textwerte werden in den Entitäten
CadAttriboderCadAttDefgespeichert, die mit eingefügten Blöcken verknüpft sind. Diese sind im Hauptbeispiel nicht enthalten. - Externe Referenzen: Text in einer extern referenzierten Zeichnung kann erfordern, dass der referenzierte Inhalt separat verarbeitet wird.
- Rasterinhalt: Buchstaben, die nur als Pixel in einem angehängten Bild erscheinen, sind keine CAD-Textentitäten. Das Auffinden dieser Wörter erfordert OCR statt dieses entitätsbasierten Ansatzes.
- Andere Anmerkungstypen: Maße, Hinweislinien und spezialisierte CAD-Objekte können Text anders speichern oder erzeugen und benötigen eine separate Behandlung.
Die Aspose.CAD-Dokumentation zur Arbeit mit Text identifiziert CadText, CadMText, CadAttrib und CadAttDef als relevante texttragende Entitätstypen. Für eine umfassendere Suche erweitern Sie die Traversierung, um diese zusätzlichen Objekte einzuschließen, und testen Sie sie anhand der Struktur Ihrer Zeichnungen.
Wenn Image.load() fehlschlägt, prüfen Sie zuerst den Dateipfad und stellen Sie dann sicher, dass die DWG‑Datei gültig ist und ein unterstütztes Format verwendet. Bei unerwarteten Ergebnissen beginnen Sie mit einer kleinen Zeichnung, deren Annotationswerte und Ebenen Sie in einem CAD‑Betrachter überprüfen können.
Häufig gestellte Fragen
Kann Python Text in einer DWG-Datei ohne AutoCAD durchsuchen?
Ja. Mit Aspose.CAD for Python via .NET können Sie eine unterstützte DWG‑Datei öffnen und Textobjekte programmgesteuert untersuchen. AutoCAD muss für diesen Workflow nicht installiert sein.
Wie kann ich ein bestimmtes Wort in einer DWG-Zeichnung mit Python finden?
Laden Sie die Datei als CadImage, iterieren Sie durch ihre Entitäten, lesen Sie die TEXT‑ und MTEXT‑Werte und vergleichen Sie jeden Wert mit Ihrem Schlüsselwort. Das obige Beispiel verwendet casefold() und den in‑Operator von Python, um case‑insensitive Teilübereinstimmungen zu finden.
Kann ich den gesamten Text aus einer DWG-Datei mit Python extrahieren?
Sie können Text aus unterstützten Entitätstypen sammeln, einschließlich CadText und CadMText. Ein umfassender Extraktionsprozess sollte zudem relevante Blockinhalte, Attribute und andere Annotationsobjekte prüfen, anstatt sich nur auf die Schleife der obersten Ebene zu verlassen.
Holen Sie sich eine kostenlose temporäre Lizenz
Sie können eine kostenlose 30‑tägige temporäre Lizenz anfordern, um Aspose.CAD for Python via .NET ohne Evaluierungsbeschränkungen zu evaluieren. Der Vorgang zur Anforderung einer temporären Lizenz erfordert eine berechtigte geschäftliche E‑Mail‑Adresse.
Siehe den Aspose.CAD Lizenzierungsleitfaden für Informationen zum Anwenden einer Lizenz in Ihrer Python‑Anwendung.
Kostenlose Lernressourcen
Entdecken Sie diese Ressourcen für weitere Informationen zur Verarbeitung von DWG‑Zeichnungen und zur Arbeit mit CAD‑Entitäten in Python:
- Aspose.CAD for Python via .NET Documentation – Einrichtungsanleitungen, Zeichenoperationen und Entwicklungshandbücher.
- Work with Text in CAD Drawings – Informationen zu texttragenden Entitäten in DWG- und DXF-Dateien.
- Aspose.CAD Python API Reference – Klassen, Entitätstypen, Eigenschaften und Methoden.
- Aspose.CAD for Python Downloads – Produktveröffentlichungen und Paketressourcen.
- Aspose.CAD Free Support Forum – Stellen Sie Fragen zur CAD-Dateiverarbeitung und zum API-Verhalten.
Fazit
Sie können Text in einer DWG-Datei mit Python suchen, indem Sie die Zeichnung laden, ihre TEXT‑ und MTEXT‑Entitäten inspizieren und deren Werte mit einem Schlüsselwort vergleichen. Der gleiche Workflow kann passende Ebenen melden, die Suche auf eine bestimmte Ebene eingrenzen oder Text für die weitere Verarbeitung sammeln. Für Zeichnungen, die Blockattribute oder verschachtelte Anmerkungen enthalten, erweitern Sie die Entitätsdurchlauf, bevor Sie sich auf die Ergebnisse als vollständiges Textinventar verlassen.
