pywin32를 사용하여 AutoCAD에서 객체 해칭

이전 블로그 게시물에서 2D 및 3D 개체를 만들고 해당 속성을 사용하는 방법에 대해 논의했습니다.

이제 이 블로그 게시물에서는 AutoCAD 템플릿에서 pywin32를 사용하여 개체를 부화하는 방법을 알아봅니다.

pywin32 모듈을 사용하여 환경 설정

먼저 pywin32 모듈을 사용하여 Python과 AutoCAD를 통합하고 일부 패키지를 가져오도록 작업 환경을 설정합니다.

import win32com.client
import pythoncom
import math

acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace 

pywin32 & pythoncom을 사용하여 필요한 생성자 만들기

Python을 사용하여 AutoCAD에서 부화 개체를 처리하는 동안 특정 데이터 유형의 특정 유형 배열이 필요합니다.

개체를 해치하려면 루프를 만들어야 합니다. 해당 루프는 닫힌 영역을 생성하는 그리기 개체 그룹입니다.

이 루프 배열에 전달할 수 있는 이러한 개체가 여러 개 있을 수 있습니다. 따라서 AutoCAD 설명서에 따라 이 루프를 생성하려면 “변형” 배열이 필요합니다.

여기에서는 VT_DISPATCH 데이터 유형을 사용하여 AutoCAD 템플릿에서 도면 객체를 가져옵니다.

또한 객체를 그리려면 APoint 및 Double과 같은 다른 생성자가 필요합니다. 우리는 이전 블로그에서 동일한 내용을 논의했습니다.

def variants(object):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (object))

AutoCAD에서 객체 루프 생성

이제 하나 또는 여러 개의 그리기 개체를 사용하여 닫힌 공간을 만들고 이를 루프로 변환해야 합니다.

이 배열은 닫힌 공간을 형성하는 하나 이상의 도면 객체를 포함할 수 있습니다.

out_loop = []
sq = acadModel.AddPolyline(ADouble([0,0,0,1000,0,0,1000,1000,0,0,1000,0]))
arc = acadModel.AddArc(APoint(0, 500, 0), 500, 90*pi/180, 270*pi/180)

out_loop.append(sq)
out_loop.append(arc)

outer = variants(out_loop)

해치 객체 생성 및 해치 추가

이제 해치할 닫힌 객체를 만들었으므로 해치 객체를 만들어 폐쇄 루프에 추가합니다.

해치 개체를 만들려면 다음 구문을 사용하는 AddHatch 명령이 필요합니다.

object.AddHatch( PatternType, PatternName, 연관성 )

여기서 패턴 유형은 사전 정의된 해치 유형의 경우 0, 현재 선 유형을 사용하는 선 패턴의 경우 1, acad.pat 파일 이 아닌 PAT 파일의 패턴 이름의 경우 2입니다   .

매개변수 패턴 이름 위치에서 AutoCAD에서 제공한 패턴 이름 또는 사용자 정의된 패턴 이름에 따라 패턴 이름을 전달할 수 있습니다.

연관성에는 해치가 연관성이 있는지 비연관성인지를 지정하는 부울 값이 포함됩니다. 해치 개체를 만드는 동안에만 설정할 수 있습니다.

경계가 수정되면 연관 해치가 업데이트됩니다. 비연관 해치는 경계가 수정될 때 업데이트되지 않습니다.

이제 해치 개체를 만들어 보겠습니다.

hatch = acadModel.AddHatch(0, "ANSI37", True)

이제 우리가 만든 루프에 이 해치를 추가하기 위해 AppendOuterLoop 메서드를 사용합니다.

hatch.AppendOuterLoop(outer)
그림 1: AutoCAD 템플릿에서 pywin32를 사용하여 폐쇄 루프 해치

Python에서 AutoCAD 해치 객체의 속성

다른 AutoCAD 객체에 대해 알고 있듯이 다른 방법을 사용하여 해치 객체의 속성도 가져오거나 변경할 수 있습니다.

print(hatch.HatchStyle)
print(hatch.PatternName)
print(hatch.AssociativeHatch)

print(round(hatch.Area,2))
print(hatch.PatternAngle)
print(hatch.PatternDouble)
print(hatch.PatternScale)
print(hatch.PatternSpace)
print(hatch.PatternType)
print(hatch.NumberOfLoops)

O/p:
0
ANSI37
True

1392699.08
0.0
False
1.0
1.0
1
1

이제 패턴 스케일을 10으로 변경해 보겠습니다.

hatch.PatternScale = 10
그림 2: pywin32를 사용하여 변경된 패턴 스케일

해치된 AutoCAD 객체 루프에 내부 루프 추가

해치가 내부 객체 주위에 있도록 하려면 여기에서 수행하는 역 작업을 수행해야 합니다.

외부 개체를 부화했습니다. 이제 부화하고 싶지 않은 내부 개체를 추가합니다.

마찬가지로 해치 영역에 이러한 내부 루프를 하나씩 여러 개 추가할 수 있습니다.

in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
그림 3: pywin32를 사용하여 빗금 친 영역 내부에 내부 루프 추가

이제 이 내부 루프를 추가한 후 해치된 영역을 확인하겠습니다.

print(round(hatch.Area,2))

O/p:
1361283.16

코드 출력과 그림 3에서 볼 수 있듯이 기존 해치 영역에 내부 루프를 추가한 이후 영역이 31415.92(원의 영역)만큼 감소했습니다.

You May Also Like

Leave a Reply

Leave a Reply

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

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