Python을 사용하는 CAD의 SelectionSet 개체

이 기사에서는 AutoCAD의 SelectionSet 개체와 Python을 사용하여 동일한 작업을 자동화하는 방법에 대해 설명합니다. 그와 함께 Group 개체를 다루는 간단한 소개도 추가하겠습니다.

이 AutoCAD 예제에 대한 코드 준비

이 코딩 예제에서는 pythoncom 및 win32com 모듈을 사용하고 있습니다. 이 모듈은 내 응용 프로그램을 시작하고 다양한 작업을 수행합니다.

import win32comu.client
import pythoncom

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


def APoint(x, y, z = 0):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

def aDouble(xyz):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (xyz))

def aVariant(vObject):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (vObject))

SelectionSet AutoCAD 객체

먼저 AutoCAD의 SelectionSet 개체에 대해 설명하겠습니다. SelectionSet 객체는 단순히 AutoCAD에서 선택한 항목 세트를 나타냅니다. AutoCAD를 사용하는 동안 저는 일반적으로 도면에서 선택하려는 객체 주위에 창을 만들어 항목을 선택합니다. 그런 경우에는 보통 마우스를 사용합니다. 다른 개체는 다른 활동을 수행하기 위한 참조 개체로 SelectionSet이 필요합니다. Python에서 SelectionSet 개체를 만드는 방법을 이해합니다.

Python에서 SelectionSet AutoCAD 개체 만들기

이 코딩 예제에서는 AddLine 메서드를 사용하여 두 줄을 만들려고 합니다. 이 두 줄을 SelectionSet 개체에 추가합니다.

l1 = acadModel.AddLine(APoint(0, 0, 0),APoint(1000, 1000, 0))
l2 = acadModel.AddLine(APoint(1000, 1000, 0),APoint(2000, 0, 0))

이제 Add 메서드를 사용하여 이름이 “SS1″인 SelectionSet 개체를 만들 수 있습니다. SelectionSets 개체에서 해당 메서드를 사용합니다. 이 SelectionSets 개체는 Document 개체 내부에 있는 모든 SelectionSet 개체의 컬렉션입니다.

Document 개체 및 기타 AutoCAD 개체에 대해 자세히 알아보려면 내 다른 블로그 게시물을 확인하십시오.

ss1 = doc.SelectionSets.Add("SS1")

SelectionSet 개체는 개체 배열을 입력 매개 변수로 사용합니다. 이것은 SelectionSet에 추가될 개체입니다. 그렇게 하려면 SelectionSet 개체의 AddItems 메서드를 사용하여 생성된 줄을 입력 값으로 전달합니다. 아래 코드를 참조하십시오.

ss1.AddItems(aVariant([l1, l2]))

SelectionSet이 생성되었는지 여부와 두 객체가 SelectionSet에 있는지 여부를 확인하기 위해 Name과 Count라는 두 가지 방법을 사용할 수 있습니다.

print(s1.Name)
print(s1.Count)


O/p:

SS1
2

SelectionSet AutoCAD 개체의 메서드

SelectionSet 개체에서 다양한 작업을 수행하는 데 사용할 수 있는 몇 가지 다른 메서드도 있습니다. 예를 들어 지우기, 삭제, 지우기, 강조 표시, 항목, RemoveItems, SelectOnScreen이 있습니다.

위에서 언급한 방법에서 Item 방법을 사용하여 Collection, Group 또는 SelectionSet의 지정된 인덱스에 있는 항목을 가져올 수 있습니다.

print(ss1.Item(0).ObjectName)

O/p:

AcDbLine

SelectionSet 또는 SelectionSet에서 항목을 삭제하려면 Clear, Delete, Erase 또는 Remove Items 메서드를 사용할 수 있습니다. 이러한 방법의 기능은 다음과 같습니다.

  • 지우기:  이 메서드는 SelectionSet을 비웁니다. SelectionSet 개체는 계속 존재하지만 항목을 포함하지 않습니다. 이전에 선택 항목에 있던 항목은 여전히 ​​존재하지만 더 이상 SelectionSet에 있지 않습니다.
  • RemoveItems:  이 메서드는 SelectionSet에서 하나 이상의 항목을 제거하는 데 도움이 됩니다. 제거된 항목은 여전히 ​​존재하지만 더 이상 SelectionSet에 상주하지 않습니다.
  • 지우기:  이 메서드는 SelectionSet의 모든 항목을 삭제합니다. SelectionSet 개체는 여전히 존재하지만 항목을 포함하지 않습니다. 이전에 SelectionSet에 있던 항목이 더 이상 존재하지 않습니다.
  • 삭제:  SelectionSet 개체를 삭제하지만 SelectionSet의 개체는 삭제하지 않습니다. Delete 메서드를 호출한 후에 SelectionSet 자체는 존재하지 않지만 SelectionSet에 의해 이전에 포함된 항목은 여전히 ​​존재합니다.

위에 나열된 메소드에서 RemoveItems 메소드만 매개변수를 전달해야 합니다. 예를 들어 SelectionSet에 추가한 줄에서 Line2(l2)를 제거하려고 합니다. SelectionSet에서 제거하려는 항목 목록의 배열 요소로 l2를 전달해야 합니다.

ss1.RemoveItems(aVariant([l2]))
print(ss1.Count)

O/p:

1

가끔은 기존의 방법으로만 개체를 ​​선택하고 싶을 때가 있습니다. 즉, 마우스를 사용하여 선택하려는 개체 주위에 창을 드래그/드로잉합니다. Python에서는 SelectOnScreen 메서드를 사용하여 그렇게 할 수도 있습니다.

ss1.SelectOnScreen()

위와 같이 메서드를 적용하면 AutoCAD 사용자가 객체를 선택할 때까지 코드가 기다립니다. AutoCAD 사용자는 객체를 선택할 때 키보드에서 Enter 키를 눌러야 합니다. 이렇게 하면 선택이 완료됩니다. 그런 다음 코드는 결국 앞으로 이동합니다.

Python을 사용하여 AutoCAD에서 그룹 객체

Group 개체는 명명된 SelectionSet 개체입니다. 여기에는 특별한 방법이 포함되어 있지 않기 때문에 Group 개체에 대해 논의할 목적으로 이 작은 소개 섹션을 추가했습니다.

SelectionSet 개체를 추가한 방법과 유사하게 Group 개체를 추가할 수 있습니다. 즉, Add 메서드를 사용합니다. 분명히 여기에서 Groups 컬렉션 개체를 사용하여 그룹을 추가해야 합니다.

또한 생성된 Group 개체에 항목을 추가하려면 AppendItems 메서드를 사용할 수 있습니다. SelectionSet 개체에 대해 AddItems 메서드를 사용하여 수행한 것과 유사한 작업을 수행할 수 있습니다.

그 외에도 다음은 AutoCAD 그룹 객체에 대한 활동을 수행하는 데 사용할 수 있는 다양한 방법 및 속성 목록입니다.

  • 삭제
  • 확장 사전 가져오기
  • 가장 밝은 부분
  • 안건
  • 아이템 제거
  • 업데이트
  • 세다
  • 문서
  • 핸들
  • HasExtensionDictionary
  • 선종류
  • 선종류 축척
  • 선 굵기
  • 재료
  • 이름
  • 개체 ID
  • 개체 이름
  • 소유자 ID
  • 플롯 스타일 이름
  • 트루 컬러
  • 보이는

끝 맺는 말

SelectionSet 개체를 사용하여 다른 AutoCAD 개체에서 다양한 작업을 수행할 수 있습니다. AutoCAD에서 Python을 사용하여 다양한 작업을 자동화하는 방법에 대해 자세히 알아보려면 내 다른 블로그 게시물을 확인하십시오. 의문 사항이나 문의 사항이 있는 경우 언제든지 아래의 의견 섹션을 사용하여 질문이 있을 수 있습니다. 또한 어떠한 종류의 기술 상담도 이 블로그 의 SCDA 문의 양식 을 통해 저에게 연락해 주십시오.

Leave a Reply

답글 남기기

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

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

Close

메타