본문 바로가기

프로그래밍(Programing)/엑셀매크로_vba(Excel-Macro)

도형(Shape)의 통로(Lane) 체크하기_01

https://hingle.tistory.com/58

 

도형(Shape)의 통로(Lane) 체크하기_서론

회사에서 위의 제목같은 검사기를 만들 수 있냐고 했다. 프로그램에서 나온 데이터를 뽑아보니 될것 같다고 해서 만들기로 마음 먹고 만들었다. 만드는데는 오랜시간 걸렸다. 11월 부터해서 12월

hingle.tistory.com

위에 글에서 나온 검사기를 어떻게 만들었지 보기위해서 

일단 어떤식으로 되어있는지 알아야 한다.

아래에 예시를 6개 이미지로 보여준다.( 꼭 아래 도형만 있지는 않다는걸 알았두면 좋겠다.)

 

1. Shape가 있다.
2. Net이 있다.
3.Pin이 있다.
4.임의선이 한개로 표현했지만 꼭 한개는아니다
5. Lane수치가 안되면 통과 못함
6. 통과가 안되면, 안되는 위치를 알려주는 검사기

위에 6개 이미지로 간략하게 어떤 검사기를 만드는지 알 수 있다.

프로그램에서 내가 알아낼 수있는 자료들은 3가지다.

 

1.  Shape의 모양의 좌표들.

7. 그림

2. pin의 좌표와 반지름

8. 같은 높이는 y1,y2,y3으로했다

이 정보들만 가지고 어떻게 검사를 할 수 있을까?

 

일단 먼저 내가 한일은 저 정보들을 배열에다 넣는 과정을 처리했다. 

1.  shape 선들의 배열

2. pin들의 모인 배열

 

1. shape 배열을 만들때 나는 백터로 만들어 넣는다. 

   [7 그림]에서    1.  (0 0)  (-1 1) 을 보면 ↖방향을 가진것을 알 수 있다.

모든 선을 방향으로 표시하면

9. 방향으로 표시하기

앞으로 방향을 백터로 표현하겠습니다.

 

왜 굳이 방향으로 하냐고 묻는다면

1. 백터라는 정보를 하나더 추가 할 수있다.

2. 이 백터를 통해서 비교할 식을 만들 수있다.

3.  가장 중요할 수도 있는 답인데 시계방향 반시계방향인지 구별할때 필요하다.

 지금 9그림을 눈으로 보면 시계방향인것을 알 수 있다.

 하지만 모든 shape를 뽑았을때 시계방향으로 뽑히지는 않는다.(이유는모름. 나는 다 시계방향으로 뽑히는걸로 알고 만들었다 반시계 방향으로 뽑히는 shape가 있어 고생했다.)

 

이것을 통해 배열을 만들어 보면

10. 실제 사용된 백터배열

 이런식으로  나온다.

 

pin의 정보를 배열로 만들면

 

11.  pin들의 정보를 배열로

[10 그림]은  1열 2열 3열 4열  5열  6열(6열은 나중에)

                  x1   y1  x2  y2  Vec    0   

 

[11 그림]은  1열 2열 3열 

                  x    y     r   

 

[10 11그림]들은 보기 쉽게 열단위로 보기 쉽게 나열했지만(나는 항상 이렇게 만들어왔다. 하지만 이번 일로 바뀌었다. )

 

사실 vba에서는 열단위로 생성해야 하기 때문에 저런식으로 집어 넣지 못한다.

설명하면 [그림 11] 배열을 만들때 Array(1,3) 에 

Array(1,1) = 2.6419

Array(1,2) = 98.0622

Array(1,3) = 0.3002

이렇게 한 열이 끝나면

  

Array(2,3) 을 추가 생성해

(4.6419 98.0622 0.3002) 넣을수가 없다. 

VBA에서는 이 방법이 안된다. 

즉, Array(n,3) n을 늘리면서 만들지 못한다.

 

대신 

Array(3,1) 을 만들어

Array(1,1) = 2.6419

Array(2,1) = 98.0622

Array(3,1) = 0.3002

만들고 Array(3,2) 추가해

Array(1,2) = 4.6419 

Array(2,2) = 98.0622 

Array(3,2) = 0.3002

이런식으로 만든다.

 

즉, Array(3,n) n을 늘리면서 만들수 있다.

1차원배열 할때는 이런 생각은 못하고 만들었지만(stack)

2차원배열로 가니 이방식아니면 안되었다. 

 

오늘은 여기까지 검사 과정과 정보를 배열에 담는것까지 하겠습니다.

감사합니다.

728x90