관련: 지식인
상황이나 도형의 형태에 따라 다르겠지만
점과 점 사이의 평행을 맞추기가 쉽지 않은 경우
점편집보다는 기존 도형에서 임의의 사각형 도형을 도형병합(빼기)로 빼는 방법을 추천합니다.
다른 방법으로는
VBA를 이용해서 정확한 수치로 좌표를 이전 노드 혹은 다음 노드의 좌표와 일치시킬 수 있습니다.
아래와 같은 사각형(Freeform)이 있을 때 노드는 총 5개로 구성됩니다. 시작 노드와 마지막 노드는 같아야 닫힌 도형이 됩니다. 노드의 x,y 좌표는 슬라이드 크기 px값으로 나타냅니다. 아래의 경우 720 * 405입니다.
printXY매크로를 실행해서 각 노드의 구성을 살펴볼 수 있습니다.
(참고: 이 경우는 직선 도형인 경우로 꼭지점 개수 +1 개의 노드가 존재하지만
만약 곡선이 들어간 경우에는 곡선인 한 점에 대해 베지어 곡선을 이루는 흰색 안내점 2개의 노드가 추가됩니다.)
1 0 405
2 6.6 7.8
3 720 0
4 720 405
5 0 405
위와 같이 printXY명령으로 5개의 노드의 x, y좌표값을 알 수 있습니다.
문제는 2번 노드입니다.
이 경우 2번 노드의 x좌표를 1번 노드의 x좌표와 동일하게 바꾸면 세로로 수직인 도형이 됩니다.
이 때 alignX 2 라는 명령을 실행하면 2번노드의 x 좌표를 이전 노드인 1번 노드의 x좌표와 일치시켜서 세로로 직각인 도형으로 만들어 줍니다.
또한 alignY 2, false라는 명령을 실행하면 2번노드의 y좌표를 다음 노드인 3번 좌표의 y좌표와 일치시켜서 가로로 평행인 도형으로 만들어 줍니다.
결국 두 개 명령을 모두 실행하면 2번 노드가 세로, 가로로 평행인 직각 사각형으로 바뀌게 됩니다.
실행화면:
다른 도형의 경우도 도형을 선택하고 Ctrl-G실행창을 켜고 printXY로 먼저 노드의 구성을 알아보고
원하는 노드의 인덱스(순서)를 지정해서 alignX나 alignY를 실행해서 가로나 세로로 평행인 도형으로 바꿔줄 수 있습니다.
전체 코드입니다:
Sub printXY()
Dim shp As Shape
On Error Resume Next
Set shp = ActiveWindow.Selection.ShapeRange(1)
With shp.Nodes
For i = 1 To .Count
Debug.Print i, .Item(i).Points(1, 1), .Item(i).Points(1, 2)
Next i
End With
End Sub
Sub alignXY()
' n번째 좌표의 Y값을 n-1번째 좌표의 Y값과 일치 즉 세로로 평행하게 만드는 경우
'=> alignY n
alignX 2 '2번째 노드를 이전 x좌표와 일치시킴
alignY 2, False '2번째 노드를 다음 y좌표와 일치시킴
End Sub
Function alignX(index As Integer, Optional prev As Boolean = True)
Dim shp As Shape
Dim x!, y!, ii As Integer
Set shp = ActiveWindow.Selection.ShapeRange(1)
With shp.Nodes
If prev Then ii = index - 1 Else ii = index + 1
x = .Item(ii).Points(1, 1)
y = .Item(index).Points(1, 2)
.SetPosition index, x, y
End With
End Function
Function alignY(index As Integer, Optional prev As Boolean = True)
Dim shp As Shape
Dim x!, y!, ii As Integer
Set shp = ActiveWindow.Selection.ShapeRange(1)
With shp.Nodes
If prev Then ii = index - 1 Else ii = index + 1
x = .Item(index).Points(1, 1)
y = .Item(ii).Points(1, 2)
.SetPosition index, x, y
End With
End Function
샘플 파일 첨부합니다.
'PPT+VBA' 카테고리의 다른 글
슬라이드 영역을 벗어난 부분 자동으로 잘라내기 (0) | 2023.04.28 |
---|---|
글자 밑에 밑줄 긋기 (1) | 2023.04.25 |
세로로 긴 표(Table) 자동으로 자르기 (0) | 2023.02.25 |
구역내 슬라이드 랜덤 순서로 이동하기 (0) | 2023.02.17 |
현재 선택된 도형을 클립보드 이미지로 채우기 (0) | 2023.01.29 |
[엑셀연동] 봉투 주소 일괄 출력 (1) | 2023.01.18 |
TTS활용 영어 단어 풀이 슬라이드 자동 생성 (0) | 2022.12.19 |
엑셀데이터 연동 PPT 슬라이드 만들기 예제와 구글 TTS 발음 다운로드 (0) | 2022.12.02 |
최근댓글