이 기사에서는 Python을 사용하는 AutoCAD의 DimAligned 개체를 소개합니다. 일반적으로 수동으로 차원을 추가하는 것은 Python 자동화를 대신 사용하면 피할 수 있는 매우 지루한 작업입니다.
이 튜토리얼에서는 Python에서 pyautocad 모듈을 사용하고 있습니다. 이를 위해 Python에서 pywin32 및 win32com 모듈을 사용할 수도 있습니다 . 이러한 모듈은 Python에서 AutoCAD 자동화 를 수행하는 또 다른 방법을 제공합니다. 이 모듈에 대한 자세한 내용은 이전 블로그 게시물을 확인하십시오.
AutoCAD 도면에 Dimaligned 객체 추가
기사 이름에서 알 수 있듯이 저는 선형 엔티티의 치수에 중점을 둡니다. 이를 위해 DimAligned 개체를 사용할 수 있습니다.
AddDimAligned 메서드를 사용하여 차원을 추가할 수 있습니다. 가장 먼저 기억해야 할 것은 DimAligned 객체에는 3개의 매개변수가 필요하다는 것입니다.
- ExtLine1Point (첫 번째 끝점)
- ExtLine2Point (두 번째 끝점)
- TextPosition (치수에 대한 텍스트)
이 경우 내 모델 공간에 두 개의 지오메트리가 있습니다. 왼쪽은 선으로 구성되어 있고 오른쪽은 폴리라인입니다. 아래 스크린샷에서 이를 확인할 수 있습니다.
AutoCAD Line 객체 의 시작점과 끝점을 가져올 수 있다는 사실에 비추어 AcDbLine 객체를 반복하여 치수의 시작점과 끝점으로 해당 지점을 전달할 수 있습니다.
텍스트 위치에 대해 오프셋에 대해 인수 100을 사용하여 중간점 공식을 사용하고 있습니다. 아래 코드를 참조하십시오.
for l in acad.iter_objects_fast(object_name_or_list="AcDbLine"):
acad.model.AddDimAligned(APoint(l.StartPoint), APoint(l.EndPoint), APoint((l.StartPoint[0]+l.EndPoint[0]+100)/2, (l.StartPoint[1]+l.EndPoint[1]+100)/2, 0))
반면에 polyline 객체는 각 노드의 좌표에 대해 double형 배열을 반환합니다. 이 경우 해당 배열을 반복하고 각 반복에서 해당 지점을 시작점과 끝점으로 전달할 수 있습니다.
for i in acad.iter_objects_fast(object_name_or_list="AcDbPolyline"):
nodes = len(i.Coordinates)/2
j=0
while j <= nodes+1:
acad.model.AddDimAligned(APoint(i.Coordinates[j], i.Coordinates[j+1], 0), APoint(i.Coordinates[j+2], i.Coordinates[j+3], 0), APoint((i.Coordinates[j]+i.Coordinates[j+2]+100)/2, (i.Coordinates[j+1]+i.Coordinates[j+3]+100)/2, 0))
j+=2
물론 이것은 선형 기하학에 치수를 추가하는 매우 기본적인 접근 방식입니다. 그럼에도 불구하고 이제 이것을 구현하고 결과를 보도록 하겠습니다.
분명히 위의 스크린샷에서 볼 수 있듯이 선형 기하학에 치수를 추가했다고 말할 수 있습니다.
AutoCAD에서 Dimaligned 객체의 속성
이제 그림에 치수를 추가했으므로 몇 가지 중요한 속성을 소개하겠습니다. 약 115개의 속성이 있고 그 중 많은 속성이 다른 차원 측면에서 작동하기 때문에 이 기사 자체에서 각각을 설명할 수 없습니다.
그러나 먼저 아래 Python 코드에서 몇 가지 기본 속성을 보여줍니다.
# general properties
print(l.ObjectName)
print(l.Rotation) # rotation angle of object in radians
print(l.LinearScaleFactor)
# specfies global scale factor for linear dimensioning measurements
print(l.StyleName)
l.DecimalSeparator = "."
print(l.DecimalSeparator)
O/p:
AcDbAlignedDimension
0.0
1.0
ISO-25
.
내 도면 내부에 여러 치수선이 있기 때문에 이 속성을 적용하기 위해 그 중 하나를 선택합니다. 뿐만 아니라 정수 값을 전달하여 화살촉 크기를 설정할 수 있는 ArrowHead 속성이 있습니다.
# arrow head properties
l.ArrowheadSize = 15
print(l.ArrowheadSize)
print(l.Arrowhead1Type)
print(l.Arrowhead2Type)
O/p:
15.0
0
0
위의 코드에서 보았듯이 Arrowhead 크기와 유형을 가져오고 설정할 수 있습니다. 화살촉 유형의 경우 여러 옵션이 있습니다. 기본값은 acArrowDefault(0)입니다. 다른 유형은 다음과 같습니다.
- ac화살표 기본값티
- acArrowDot
- acArrowDotSmall
- acArrowDotBlank
- acArrowOrigin
- acArrowOrigin2
- ac화살표열기
- ac화살표Open90
- ac화살표Open30
- ac화살표 닫힘
- ac화살표엘
- ac화살표 없음
- ac화살표사선
- acArrowBoxFilled
- acArrowBoxBlank
- ac화살표닫힘공백
- ac화살표 데이터가 채워짐
- acArrowDatumBlank
- acArrowIntegral
- ac화살표
- acArrowUserDefined 읽기 전용
마찬가지로 아래와 같은 치수선 속성이 있습니다.
l.DimensionLineColor = 200
print("Dimension line color on the basis of 0-256 color index: " + str(l.DimensionLineColor))
print("The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: " + str(l.DimensionLineExtend))
print("The dimension line type is: " + l.DimensionLineType)l.DimensionLineWeight = 100
print("Dimension lineweight: " + str(l.DimensionLineWeight))
print("Dimension text direction: ", end="" )
print(l.DimTxtDirection)
# False: Left to right reading style
# True: Right to Left reading style
print(l.Fit)
O/p:
Dimension line color on the basis of 0-256 color index: 200
The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: 0.0
The dimension line type is: ByBlock
Dimension lineweight: 100
Dimension text direction: False
3
Fit 속성에는 아래와 같이 4가지 가능한 값이 있습니다.
- acTextAndArrows(0) : 연장선 내부에 문자와 화살촉을 모두 배치합니다.
- ac화살표 전용(1): 연장선 내부에 화살촉만 배치합니다. 텍스트는 화살촉 외부에 배치됩니다.
- acTextOnly(2) : 연장선 내부에 텍스트만 배치합니다. 화살촉은 연장선 외부에 배치됩니다.
- acBestFit(3) : 주어진 공간에 가장 잘 맞는 위치에 텍스트와 화살촉을 배치하는 기본 옵션입니다. 문자와 화살촉에 사용할 수 있는 공간이 충분하면 이 옵션은 치수보조선 사이에 둘 다 배치합니다.
텍스트 속성 및 공차 속성과 같은 몇 가지 다른 속성이 있습니다. 설명을 위해 각 속성에서 몇 가지를 추가하겠습니다.
#Text properties
l.TextHeight = 20
print(l.TextHeight)
print(l.TextInside)
#Tolerance properties
print(l.ToleranceDisplay)
print(l.TolerancePrecision)
O/p:
20.0
False
0
2
여기에서 TextInside 속성에는 텍스트를 강제로 연장선에 추가할지(true) 아니면 공백이 있는 경우에만(false) 지정하는 부울 값이 있습니다.
치수 텍스트에 공차를 지정하기 위해 부울도 반환하는 ToleranceDisplay 속성이 있습니다. ToleranceDisplay는 기본적으로 False를 반환합니다. 즉, 허용 오차가 지정되지 않은 경우입니다.
일반적으로 공차 정밀도에는 4가지 값이 있습니다.
- acTolNone: 0(기본값)
- 행동대칭: 1
- 행동편차: 2
- 조치 제한: 3
- 액틸베이직: 4
사실, 이미 나 자신을 언급한 것처럼 위에서 지정한 것보다 더 많은 속성이 있지만 이것들을 사용하는 방법을 보여주기 위한 몇 가지입니다. 다음은 DimAligned AutoCAD 객체 클래스의 메소드 목록입니다.
- 어레이폴라
- ArrayRectangular
- 복사
- 삭제
- GetBoundingBox
- 교차하다
- 거울
- 미러3D
- 이동하다
- 회전
- 3D 회전
- ScaleEntity
- 업데이트
끝 맺는 말
마지막으로 AutoCAD에서 DimAligned 개체를 다루었고 Python으로 이를 자동화할 수 있는 방법을 다뤘습니다. 같은 방식으로 다른 차원 개체가 있습니다. 이에 대해서는 향후 블로그 게시물에서 다루겠습니다. 좀 더 기술적인 정보나 상담이 필요한 경우, 저희 문의 양식 을 사용하여 저에게 연락 주시기 바랍니다 . 또한 의심스러운 점이 있으면 의견 상자에 의견을 남겨주세요.
Leave a Reply