AutoCAD dokumentobjekt i pyautocad

I min tidligere artikel diskuterede jeg AutoCAD Application-objektklassen . Den vigtigste del af enhver AutoCAD- applikation er dokumentobjektet. Dette skyldes, at brugere udfører alle deres handlinger på dette dokumentobjekt. Derfor skriver jeg dette nye blogindlæg, der dækker AutoCAD Document-objektklassen.

Pyautcad-modulet og dets alternativer

Lad mig først nævne de moduler, jeg skal bruge, og hvilke andre muligheder der er tilgængelige.

Som du måske har gættet ud fra titlen på denne artikel, bruger jeg pyautocad-modulet til denne tutorial. Desuden bruger jeg acad.doc for at få adgang til selve dokumentet. Du vil se dette i koden nedenfor:

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

Jeg kan dog også bruge kommunikationsmoduler. Det vil sige andre moduler end pyautocad. I eksemplet nedenfor bruger jeg pythoncom og win32com , såkaldte kommunikationsmoduler, til at få adgang til AutoCAD Document-objektklassen.

from win32com.client import *
import pythoncom
import win32com

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

O/p:
Drawing1.dwg

Egenskaber for AutoCAD Document-objektklassen

Til at begynde med dette emne introducerer jeg nogle vigtige egenskaber ved AutoCAD Document-objektet. Jeg finder disse egenskaber vigtige, fordi de kan bruges til forskellige automatiseringsformål.

For eksempel arbejder AutoCAD med ét dokument ad gangen. Et AutoCAD-dokumentobjekt indeholder mange objekter, såsom Lag, Layouts, Dimensionstypografier, Viewport, UCS og andre objekttyper. Blandt disse objekter kan kun én være aktiv på et givet tidspunkt.

For eksempel kan et dokumentobjekt indeholde n antal lag. Dog kan kun ét af disse lag være aktivt ad gangen.

For at kontrollere, om det tilstedeværende dokument faktisk er det aktuelt aktive dokument, kan jeg bruge den aktive metode. Denne metode returnerer en boolesk værdi. Du kan se dette i eksemplet nedenfor:

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

O/p:
True

Tilsvarende kan jeg for at kontrollere andre aktive underobjekter bruge metoderne med metodenavne i formatet Active<ObjectName>. Nogle eksempler kunne være ActiveLayout, ActiveLayer, ActiveViewport og så videre.

Objektnavne, der kan bruges, er angivet nedenfor:

  • DimStyle
  • Lag
  • Layout
  • Linjetype
  • Materiale
  • PViewport
  • ValgSet
  • Plads
  • Tekststil
  • UCS
  • Udsigtsport

Jeg vil vise, hvordan nogle af disse genstande kan bruges.

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

O/p:
ISO-25
0
Model
AutoCAD Document objektklassedokumentation, figur 1.1: ActiveDimStyle
ActiveDimStyle
AutoCAD Document objektklassedokumentation, figur 1.2: ActiveLayer
ActiveLayer
AutoCAD Dokument objektklassedokumentation, figur 1.3: ActiveLayout
ActiveLayout

På samme måde kan jeg også bruge andre egenskaber. Disse egenskaber returnerer de respektive objekter, som yderligere kan behandles. Jeg vil poste mere detaljerede artikler om dette i fremtiden.

Adgang til AutoCAD-dokumentobjektet Blocks-egenskaben

For at få fat i Blocks-objekterne, der er indeholdt i Document-objektet, kan jeg bruge Blocks-egenskaben. Dette returnerer en samling af de forskellige AutoCAD-blokobjekter, der er til stede i AutoCAD-dokumentobjektet.

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

Hvis jeg vil returnere den database, som objektet tilhører, kan jeg bruge Database-objektet. Simpelthen dette returnerer databaseobjektet. Den har ikke nogen navneattribut.

acad.doc.Database

O/p:

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

Underobjekter indeholdt af AutoCAD Document-objekt

Tidligere diskuterede jeg, at et AutoCAD-dokumentobjekt indeholder flere underobjekter. Disse objekter er til stede i form af deres egen specifikke type objekter, f.eks. Lag, Materialer, Linjetyper osv.

For at pege på samlingerne kan jeg blot bruge metoderne med deres navne selv. Og hvis jeg vil have adgang til hvert af de objekter, der er til stede i samlingen, så kan jeg gentage det samme. På samme måde som jeg gjorde i tilfældet med Blocks.

Listen over objektsamlinger er angivet nedenfor:

  • Ordbøger
  • DimStyles
  • Lag
  • Layouts
  • Linjetyper
  • Materialer
  • ModelSpace
  • PaperSpace
  • Plotkonfigurationer
  • Registrerede applikationer
  • Udvalgssæt
  • Tekststile
  • Brugerkoordinatsystemer
  • Udsigtsporte
  • Visninger

Nu hvor jeg har listet alle objektsamlingerne, lad mig præsentere et eksempel på, hvordan man bruger disse metoder.

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

På samme måde kan andre vigtige egenskaber også hentes som angivet i koden nedenfor.

# 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

Metoder for dokumentobjektklassen i AutoCAD

Nu hvor jeg har dækket de forskellige egenskaber af AutoCAD Document-objektet, vil jeg gå videre til nogle af de vigtige metoder i AutoCAD Document-klassen.

Faktisk er den allerførste metode, jeg taler om, Activate()-metoden. For at aktivere ethvert dokument kan jeg bruge denne metode.

acad.doc.Activate

Derefter kan jeg bruge AuditInfo() metoden for at evaluere integriteten af ​​enhver tegning. Her kan jeg angive sand eller falsk som parametre for, om jeg vil have AutoCAD til at løse de problemer, den støder på.

acad.doc.AuditInfo(True)

Der er bestemt også et par metoder til at regenerere, gemme og lukke.

# 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

Til sidst, for at fjerne ubrugte navngivne referencer som blokke eller lag fra dokumentet, kan jeg bruge kommandoen PurgeAll.

acad.doc.PurgeAll

Sammenfatning og afsluttende bemærkninger

Til sidst konkluderer jeg følgende: Ved at bruge AutoCAD Document-klassemetoderne, der er dokumenteret i denne artikel, kan jeg automatisere forskellige Document-objekt-relaterede opgaver. Dette kan anvendes til at automatisere og optimere AutoCAD-relaterede arbejdsgange.

Til sidst, i tilfælde af tvivl, er du velkommen til at kommentere nedenfor i kommentarfeltet. Jeg er også åben for teknisk rådgivning, som du kan kontakte mig for ved at bruge vores kontaktformular . Tjek venligst mine andre blogs, der dækker forskellige aspekter af pyautocad- og pywin32 Python-modulerne til AutoCAD-automatisering .

Referencer til relateret AutoCAD-automatiseringsdokumentation

Og nu, en liste over links til forskellige AutoCAD-automatiseringsindlæg offentliggjort af mig på denne blog:

You May Also Like

Leave a Reply

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.