AutoCAD-Dokumentobjekt in Python

In meinem vorherigen Artikel habe ich die AutoCAD-Anwendungsobjektklasse besprochen . Der wichtigste Teil jeder AutoCAD- Anwendung ist das Document-Objekt. Dies liegt daran, dass Benutzer alle ihre Aktionen an diesem Document-Objekt ausführen. Aus diesem Grund schreibe ich diesen neuen Blogbeitrag, der die Objektklasse AutoCAD Document behandelt.

Das pyautcad-Modul und seine Alternativen

Lassen Sie mich zunächst die Module erwähnen, die ich verwenden werde, und welche anderen Optionen verfügbar sind.

Wie Sie vielleicht aus dem Titel dieses Artikels erraten haben, verwende ich das Pyautocad-Modul für dieses Tutorial. Um auf das Dokument selbst zugreifen zu können, verwende ich außerdem acad.doc. Sie werden dies im folgenden Code sehen:

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

Ich kann aber auch Kommunikationsmodule verwenden. Das heißt, andere Module als pyautocad. Im folgenden Beispiel verwende ich pythoncom und win32com , sogenannte Kommunikationsmodule, um auf die Objektklasse AutoCAD Document zuzugreifen.

from win32com.client import *
import pythoncom
import win32com

acad1 = win32com.client.Dispatch("AutoCAD.Application")
print(acad1.ActiveDocument.Name)

O/p:
Drawing1.dwg

Eigenschaften der AutoCAD Document-Objektklasse

Zu Beginn dieses Themas stelle ich einige wichtige Eigenschaften des AutoCAD-Dokumentobjekts vor. Ich finde diese Eigenschaften wichtig, weil sie für verschiedene Automatisierungszwecke verwendet werden können.

Beispielsweise arbeitet AutoCAD mit jeweils einem Dokument. Ein AutoCAD-Dokumentobjekt enthält viele Objekte, z. B. Ebenen, Layouts, Bemaßungsstile, Ansichtsfenster, BKS und andere Objekttypen. Von diesen Objekten kann immer nur eines aktiv sein.

Beispielsweise kann ein Document-Objekt n Ebenen enthalten. Es kann jedoch immer nur eine dieser Ebenen aktiv sein.

Um zu überprüfen, ob das vorhandene Dokument tatsächlich das derzeit aktive Dokument ist, kann ich die Active-Methode verwenden. Diese Methode gibt einen booleschen Wert zurück. Sie können dies im folgenden Beispiel sehen:

# determine if the document is the active document
print(acad.doc.Active)

O/p:
True

In ähnlicher Weise kann ich zum Überprüfen anderer aktiver Unterobjekte die Methoden mit Methodennamen im Format Active<ObjectName> verwenden. Einige Beispiele könnten ActiveLayout, ActiveLayer, ActiveViewport usw. sein.

Die verwendbaren Objektnamen sind unten aufgeführt:

  • DimStyle
  • Schicht
  • Layout
  • Linientyp
  • Material
  • PViewport
  • Auswahlsatz
  • Platz
  • Textstil
  • BKS
  • Ansichtsfenster

Ich werde zeigen, wie einige dieser Objekte verwendet werden können.

print(acad.doc.ActiveDimStyle.Name)
print(acad.doc.ActiveLayer.Name)
print(acad.doc.ActiveLayout.Name)

O/p:
ISO-25
0
Model
Dokumentation der Objektklasse AutoCAD Document, Abbildung 1.1: ActiveDimStyle
ActiveDimStyle
Dokumentation der Objektklasse AutoCAD Document, Abbildung 1.2: ActiveLayer
Aktive Schicht
Dokumentation der Objektklasse AutoCAD Document, Abbildung 1.3: ActiveLayout
AktivesLayout

Auf die gleiche Weise kann ich auch andere Eigenschaften verwenden. Diese Eigenschaften liefern die jeweiligen Objekte, die weiter behandelt werden können. Ich werde in Zukunft ausführlichere Artikel darüber veröffentlichen.

Zugriff auf die Blockeigenschaft des AutoCAD-Dokumentobjekts

Um die Blocks-Objekte abzurufen, die im Document-Objekt enthalten sind, kann ich die Blocks-Eigenschaft verwenden. Dadurch wird eine Sammlung der verschiedenen AutoCAD-Blockobjekte zurückgegeben, die im AutoCAD-Dokumentobjekt vorhanden sind.

print(acad.doc.Blocks)
for i in (acad.doc.Blocks):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209E60C1D60>
*Model_Space
*Paper_Space
*Paper_Space

Wenn ich die Datenbank zurückgeben möchte, zu der das Objekt gehört, kann ich das Database-Objekt verwenden. Einfach ausgedrückt gibt dies das Datenbankobjekt zurück. Es hat kein Namensattribut.

acad.doc.Database

O/p:

<comtypes.client.lazybind.Dispatch object at 0x0000024FA64175B0>

Unterobjekte, die im AutoCAD-Dokumentobjekt enthalten sind

Ich habe bereits erwähnt, dass ein AutoCAD-Dokumentobjekt mehrere Unterobjekte enthält. Diese Objekte sind in Form ihres eigenen spezifischen Objekttyps vorhanden, z. B. Ebenen, Materialien, Linientypen usw.

Um auf die Sammlungen hinzuweisen, kann ich einfach die Methoden mit ihren Namen selbst verwenden. Und wenn ich auf jedes der in der Sammlung vorhandenen Objekte zugreifen möchte, kann ich darüber iterieren. Ähnlich wie bei Blocks.

Die Liste der Objektsammlungen ist unten angegeben:

  • Wörterbücher
  • DimStyles
  • Schichten
  • Grundrisse
  • Linientypen
  • Materialien
  • ModelSpace
  • PaperSpace
  • PlotKonfigurationen
  • Registrierte Anwendungen
  • Auswahlsätze
  • Textstile
  • Benutzerkoordinatensysteme
  • Ansichtsfenster
  • Ansichten

Nachdem ich nun alle Objektsammlungen aufgelistet habe, möchte ich ein Beispiel für die Verwendung dieser Methoden vorstellen.

print(acad.doc.DimStyles)
for i in (acad.doc.DimStyles):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209F4F11D00>
Standard
Annotative
ISO-25

Auf die gleiche Weise können auch andere wichtige Eigenschaften abgerufen werden, wie im folgenden Code angegeben.

# height of document window
print(acad.doc.Height)

# width of document window
print(acad.doc.Width)

# lower Left to Upper Right Limits
print(acad.doc.Limits)

# return a boolean value for ObjectSnapMode to check if it is on/off
print(acad.doc.ObjectSnapMode)

# path of Document
print(acad.doc.Path)

# return if Document is ReadOnly/Read-Write using boolean value
print(acad.doc.ReadOnly)

# check if document contains any unsaved changes using boolean value
print(acad.doc.Saved)

# returns SummaryInfo objects which contains document metadata (Title, subject, author, keywords)
print(acad.doc.SummaryInfo)

# returns if window is Minimized, Maximized or in a Normal state
print(acad.doc.WindowState)

# returns the document title
print(acad.doc.WindowTitle)

O/p:

818
1517
(0.0, 0.0, 420.0, 297.0)
False
C:\Users\91998\OneDrive\Documents
False
False
<comtypes.client.lazybind.Dispatch object at 0x000001C227C460D0>
3
Drawing1.dwg

Methoden der Document-Objektklasse in AutoCAD

Nachdem ich nun die verschiedenen Eigenschaften des AutoCAD-Dokumentobjekts behandelt habe, werde ich mit einigen der wichtigen Methoden der AutoCAD-Dokumentklasse fortfahren.

Tatsächlich ist die allererste Methode, über die ich spreche, die Methode Activate(). Um jedes Dokument zu aktivieren, kann ich diese Methode verwenden.

acad.doc.Activate

Danach kann ich die AuditInfo()-Methode verwenden, um die Integrität jeder Zeichnung zu bewerten. Hier kann ich als Parameter wahr oder falsch übergeben, ob AutoCAD die auftretenden Probleme beheben soll oder nicht.

acad.doc.AuditInfo(True)

Sicherlich gibt es auch ein paar Methoden zum Regenerieren, Speichern und Schließen.

# regenerate drawing
acad.doc.Regen

# save drawing
acad.doc.Save

# while closing pass boolean to save changes or not followed by drawing name
acad.doc.Close(False, "Drawing2.dwg")3

Um schließlich unbenutzte benannte Referenzen wie Blöcke oder Ebenen aus dem Dokument zu entfernen, kann ich den Befehl PurgeAll verwenden.

acad.doc.PurgeAll

Zusammenfassung und Schlussbemerkungen

Abschließend schließe ich Folgendes: Mit den in diesem Artikel dokumentierten Methoden der AutoCAD-Dokumentklasse kann ich verschiedene Aufgaben im Zusammenhang mit Dokumentobjekten automatisieren. Dies kann angewendet werden, um AutoCAD-bezogene Arbeitsabläufe zu automatisieren und zu optimieren.

Zu guter Letzt können Sie im Zweifelsfall unten im Kommentarbereich einen Kommentar hinterlassen. Ich bin auch offen für technische Beratung, für die Sie mich über unser Kontaktformular kontaktieren können . Bitte sehen Sie sich meine anderen Blogs an, die verschiedene Aspekte der Python-Module pyautocad und pywin32 für die AutoCAD-Automatisierung behandeln .

Verweise auf zugehörige AutoCAD-Automatisierungsdokumentation

Und jetzt eine Liste mit Links zu verschiedenen AutoCAD-Automatisierungsbeiträgen , die von mir in diesem Blog veröffentlicht wurden:

You May Also Like

Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.