pyautocad의 AutoCAD 문서 객체

이전 기사에서 AutoCAD Application 객체 클래스에 대해 설명했습니다. AutoCAD 응용프로그램 에서 가장 중요한 부분은 문서 객체입니다. 이는 사용자가 이 문서 개체에 대한 모든 작업을 수행하기 때문입니다. 결과적으로 저는 AutoCAD Document 객체 클래스를 다루는 이 새로운 블로그 게시물을 작성하고 있습니다.

pyautcad 모듈 및 그 대안

먼저, 내가 사용할 모듈과 사용 가능한 다른 옵션을 언급하겠습니다.

이 기사의 제목에서 짐작할 수 있듯이 이 튜토리얼에서는 pyautocad 모듈을 사용하고 있습니다. 또한 문서 자체에 액세스할 수 있도록 acad.doc을 사용하고 있습니다. 아래 코드에서 이를 확인할 수 있습니다.

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

그러나 통신 모듈도 사용할 수 있습니다. 즉, pyautocad가 아닌 다른 모듈입니다. 아래 예에서는 pythoncom 및 win32com , 소위 통신 모듈을 사용하여 AutoCAD 문서 객체 클래스에 액세스합니다.

from win32com.client import *
import pythoncom
import win32com

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

O/p:
Drawing1.dwg

AutoCAD 문서 객체 클래스의 속성

이 항목을 시작하기 위해 AutoCAD 문서 객체의 몇 가지 중요한 특성을 소개하겠습니다. 다양한 자동화 목적으로 사용할 수 있기 때문에 이러한 속성이 중요하다고 생각합니다.

예를 들어 AutoCAD는 한 번에 하나의 문서로 작업합니다. AutoCAD 문서 객체에는 레이어, 레이아웃, 치수 스타일, 뷰포트, UCS 및 기타 객체 유형과 같은 많은 객체가 포함되어 있습니다. 이러한 개체 중에서 특정 시점에 하나만 활성화될 수 있습니다.

예를 들어, Document 객체는 n개의 레이어를 포함할 수 있습니다. 그러나 한 번에 이러한 레이어 중 하나만 활성화할 수 있습니다.

존재하는 문서가 실제로 현재 활성 문서인지 확인하려면 Active 메서드를 사용할 수 있습니다. 이 메서드는 부울 값을 반환합니다. 아래 예에서 이를 확인할 수 있습니다.

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

O/p:
True

마찬가지로 다른 활성 하위 개체를 확인하기 위해 Active<ObjectName> 형식의 메서드 이름이 있는 메서드를 사용할 수 있습니다. 몇 가지 예는 ActiveLayout, ActiveLayer, ActiveViewport 등이 될 수 있습니다.

사용할 수 있는 개체 이름은 다음과 같습니다.

  • 딤스타일
  • 형세
  • 선종류
  • 재료
  • P뷰포트
  • 선택 집합
  • 우주
  • 텍스트 스타일
  • UCS
  • 뷰포트

이러한 개체 중 일부를 사용하는 방법을 보여 드리겠습니다.

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

O/p:
ISO-25
0
Model
AutoCAD 문서 객체 클래스 문서, 그림 1.1: ActiveDimStyle
ActiveDimStyle
AutoCAD 문서 객체 클래스 문서, 그림 1.2: ActiveLayer
활성 레이어
AutoCAD 문서 객체 클래스 문서, 그림 1.3: ActiveLayout
액티브 레이아웃

같은 방법으로 다른 속성도 사용할 수 있습니다. 이러한 속성은 추가로 처리할 수 있는 각 개체를 반환합니다. 이에 대해서는 앞으로 더 자세한 글을 올리도록 하겠습니다.

AutoCAD 문서 객체 블록 속성 액세스

계속해서 Document 개체에 포함된 Blocks 개체를 가져오려면 Blocks 속성을 사용할 수 있습니다. AutoCAD 문서 객체에 있는 다양한 AutoCAD 블록 객체 모음을 반환합니다.

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

객체가 속한 데이터베이스를 반환하려면 Database 객체를 사용할 수 있습니다. 간단히 말해서 이것은 데이터베이스 객체를 반환합니다. 이름 속성이 없습니다.

acad.doc.Database

O/p:

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

AutoCAD 문서 객체에 포함된 하위 객체

앞에서 AutoCAD 문서 개체에 여러 하위 개체가 포함되어 있다고 설명했습니다. 이러한 객체는 Layers, Materials, LineTypes 등과 같은 고유한 객체 유형의 형태로 존재합니다.

컬렉션을 지적하기 위해 이름 자체와 함께 메서드를 사용할 수 있습니다. 컬렉션 내부에 있는 각 개체에 액세스하려면 동일한 개체를 반복할 수 있습니다. Blocks의 경우와 비슷한 방식으로.

개체 컬렉션 목록은 다음과 같습니다.

  • 사전
  • 딤스타일
  • 레이어
  • 레이아웃
  • 선종류
  • 재료
  • 모델스페이스
  • 페이퍼스페이스
  • 플롯 구성
  • 등록된 애플리케이션
  • 선택 집합
  • 텍스트 스타일
  • 사용자 좌표 시스템
  • 뷰포트
  • 견해

이제 모든 개체 컬렉션을 나열했으므로 이러한 메서드를 사용하는 방법의 예를 제시하겠습니다.

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

같은 방법으로 아래 코드와 같이 다른 중요한 속성도 가져올 수 있습니다.

# 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

AutoCAD의 Document 객체 클래스 메서드

이제 AutoCAD Document 객체의 다양한 속성을 다루었으므로 AutoCAD Document 클래스의 몇 가지 중요한 메서드로 넘어갈 것입니다.

사실, 내가 말하는 첫 번째 방법은 Activate() 방법입니다. 문서를 활성화하려면 이 방법을 사용할 수 있습니다.

acad.doc.Activate

그런 다음 그림의 무결성을 평가하기 위해 AuditInfo() 메서드를 사용할 수 있습니다. 여기에서 AutoCAD에서 발생하는 문제를 수정할지 여부에 대한 매개변수로 true 또는 false를 전달할 수 있습니다.

acad.doc.AuditInfo(True)

물론 재생성, 저장 및 닫기를 위한 몇 가지 방법도 있습니다.

# 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

마지막으로 문서에서 블록이나 레이어와 같이 사용하지 않는 명명된 참조를 제거하려면 PurgeAll 명령을 사용할 수 있습니다.

acad.doc.PurgeAll

요약 및 결론

마지막으로 다음과 같은 결론을 내립니다. 이 기사에 설명된 AutoCAD Document 클래스 메서드를 사용하여 다양한 Document 객체 관련 작업을 자동화할 수 있습니다. 이는 AutoCAD 관련 워크플로를 자동화하고 최적화하는 데 적용할 수 있습니다.

마지막으로, 의심되는 사항이 있는 경우 아래의 의견란에 자유롭게 의견을 남겨 주십시오. 나는 또한 당신이 우리의 연락 양식 을 사용하여 저에게 연락할 수 있는 기술 상담에 열려 있습니다 . AutoCAD 자동화 를 위한 pyautocad 및 pywin32 Python 모듈 의 다양한 측면을 다루는 다른 블로그를 확인하십시오 .

관련 AutoCAD 자동화 문서에 대한 참조

이제 제가 이 블로그에 게시한 다양한 AutoCAD 자동화 게시물에 대한 링크 목록이 있습니다.

You May Also Like

Leave a Reply

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.