SNAP Objects - Controls
개요
Controls 카테고리의 노드는 SNAP에서 프로그램의 흐름과 실행 제어를 담당합니다.
1 If
If 노드는 논리적 조건을 설정하고 조건에 따라 동작흐름을 제어할 수 있는 노드입니다.

1.1 노드 연결
SNAP If 노드는 다음과 같은 기본 동작 구조를 갖습니다.
- If 노드로부터 최대 두 개의 간선을 연결할 수 있으며, 하나는 참, 하나는 거짓일 때 동작합니다.
- Link Index를 설정하여 참일 때 동작 할 Block 노드를 설정할 수 있습니다. 기본값은 0입니다.
- 만약 하나만 연결되어 있다면 연결된 간선은 참인 경우에만 동작하며, 거짓 조건일 때는 동작하지 않습니다.
노드 연결 방법은 다음과 같습니다.
- Ctrl 키를 누른 상태로 마우스로 If 노드를 좌클릭합니다.
- 연결하려는 Block 노드로 드래그하여 연결합니다.
유의 사항
- If 노드는 Block 노드와만 연결할 수 있습니다.


1.2 논리적 조건 설정
If 노드는 두 가지 모드로 동작이 가능합니다. 모드 전환은 프로퍼티 창에서 설정 가능합니다.

1.2.1 Logical Condition 모드
Compare Value 1
, Compare Value 2
두 값을 입력받아 논리적 조건에 따라 비교를 수행합니다.
논리적 조건 목록 :
Greater
- Value 1 > Value 2 → 참
Greater Equal
- Value 1 ≥ Value 2 → 참
Equal
- Value 1 == Value 2 → 참
Not Equal
- Value 1 ≠ Value 2 → 참
Less Equal
- Value 1 ≤ Value 2 → 참
Less
- Value 1 < Value 2 → 참


1.2.2 Expression 모드
입력한 수식을 계산하여 참/거짓을 판별합니다. 계산 결과가 0인 경우 거짓, 이외에는 참으로 처리됩니다. 수식 계산은 CExpressionParser 클래스를 사용하며, 해당 클래스에 대한 자세한 설명은 Expression Parser를 참고하세요.


2 Switch
Switch 노드는 특정 조건 값에 따라 연결된 여러 작업 흐름 중 참(True) 인 모든 분기를 선택하여 실행하는 노드입니다.
If 노드는 조건에 따라 두 개의 분기만 처리할 수 있지만, Switch 노드는 조건 값에 따라 N개의 분기를 처리할 수 있습니다.
Switch 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- For 노드를 사용한 반복 작업 중 Iteration Value 값에 따라 동작을 분기.
- 특정 Process Result 결괏값 기반 예외 처리
- 알고리즘 동작 중 Process Result가
[BufferDoesNotExist]
인 경우, 이미지 설정 오류로 판단, 이미지 다시 로드 또는 이미지 생성 작업을 추가하여 수행. - Matching 알고리즘 동작 중 Process Result가
[LearnedImageDoesNotExist]
인 경우, 학습된 데이터가 없다고 판단하여 Learn Process 동작 추가 또는 Load Process를 추가하여 Learned Data File을 불러오는 작업을 추가하여 수행.
- 알고리즘 동작 중 Process Result가

2.1 노드 연결
SNAP Switch 노드는 다음과 같은 기본 동작 구조를 갖습니다.
- Switch 노드로부터 1개 이상의 간선을 연결할 수 있습니다.
- 연결된 간선의 수만큼 Case가 생성됩니다.
- 각 Case에 대해 참(True) 또는 거짓(False)을 판별할 조건식을 설정해야 합니다.
- 입력받은 값이 참이 되는 모든 분기를 수행합니다. 실행 순서는 Link Index가 낮은 순입니다.
- 모든 조건식이 거짓(False) 일 경우, Switch 노드는 동작하지 않습니다.
노드 연결 방법은 다음과 같습니다.
- Ctrl 키를 누른 상태로 마우스로 Switch 노드를 좌클릭합니다.
- 연결하려는 Block 노드로 드래그하여 연결합니다.
- 각 간선에 대해 조건식을 설정하여 분기를 지정합니다.
유의사항
- Switch 노드는 Block 노드와만 연결할 수 있습니다.
- 조건식 설정 시, 참인 모든 분기가 Link Index가 낮은 순으로 수행되니 우선순위를 명확히 확인해야 예기치 않은 동작을 방지할 수 있습니다.
- 모든 분기가 거짓일 경우 아무 동작도 수행하지 않으니, 모든 분기에 대해 처리할 수 있도록 조건을 설정하는 것이 좋습니다.

2.2 조건 설정

Switch 노드와 연결된 간선의 수만큼 Case가 생성됩니다. Switch Value가 1로 설정된 경우, Value == 1 조건식이 참(True) 이 되며, 1번 간선이 동작합니다.
Value == 0
에서Value
는 Switch Value에 설정된 값으로 치환됩니다.
Case 별로 다양한 조건식을 사용하여 설정할 수 있습니다.

각 Case에 설정된 조건식의 의미는 다음과 같습니다.
- Value % 2 == 0 : Value를 2로 나눈 나머지가 0인 경우(짝수) 참.
- Value < 10 : Value가 10보다 작은 경우 참.
- Value % 2 && Value > 10 : Value를 2로 나눈 나머지가 0이 아니면서(홀수) Value가 10보다 큰 경우 참.
값의 일치 여부만 확인하는 경우 아래와 같이 설정하여도 동일하게 동작합니다.

Process Result의 Result Description 값을 기반으로 Switch 노드를 사용하면, 아래와같이 다양한 분기 처리를 구현할 수 있습니다.

분기별 동작 예시 :
[OK]
인 경우 : Result를 Image View에 출력[FailToFind]
인 경우 : Learned Data가 제대로 설정되었다는 가정하에, Result를 찾지 못했지만, 알고리즘 동작 과정에서는 오류가 발생하지 않았으므로 Parameter 수정 또는 동작 재개.[OK]
와[FailToFind]
모두 아닌 경우 : 동작 과정에서 오류가 발생했으므로 오류 원인 파악 및 오류 수정 수행.
3 For
For 노드는 특정 Block을 반복하여 작업을 수행할 수 있도록 설정하는 노드입니다. 이 노드를 활용하면 반복 작업을 간단하고 효율적으로 구성할 수 있으며, 필요한 경우 무한 반복도 가능합니다. Loop Count를 -1로 설정하면 탈출 조건이 충족되지 않는 한 무한 반복됩니다.
For 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- Multi Page로 구성된 이미지에서 Page 수만큼 알고리즘을 반복 실행하고 결과를 확인.
- 반복적으로 Figure Array에 Result를 저장(PushBack/PushFront).
- 무한 루프를 활용하여 특정 Trigger(탈출 조건)가 발생할 때까지 무한히 반복하면서 대기.

3.1 노드 연결
SNAP For 노드는 다음과 같은 기본 동작 구조를 갖습니다.
- For 노드로부터 반복 수행할 Block 1개를 연결합니다.
- 설정한 Loop Count만큼 연결된 Block을 반복 수행합니다.
- Loop Count를 -1로 설정하면 무한 반복합니다.
- 반복 작업 중 특정 조건에서 탈출하려면 Break 노드를 사용합니다.
- 반복 횟수를 모두 수행하거나 Break 노드로 작업이 종료되면, For 노드는 다음 작업 흐름으로 넘어갑니다.
노드 연결 방법은 다음과 같습니다.
- Ctrl 키를 누른 상태로 마우스로 For 노드를 좌클릭합니다.
- Iteration Value 또는 Loop Count를 Block의 Input에 연결하여 사용할 수도 있습니다.
- 반복 수행하려는 Block 노드로 드래그하여 연결합니다.
유의사항
- For 노드는 Block 노드와만 연결할 수 있습니다.
- For 노드 내부에 또 다른 For 노드를 사용하는 2중 이상의 반복 작업에서는 Iteration Value를 반드시 0으로 초기화해야 예기치 않은 동작을 방지할 수 있습니다.
- 무한루프 사용 시 루프를 탈출하기 위한 조건식 사용을 권장합니다.

4 Break, Pause, Stop, Restart
Break, Pause, Stop 노드는 작업 흐름을 제어하거나 반복 작업 및 실행 중인 프로세스를 중단, 일시 정지 또는 종료하는 데 사용됩니다. 이 노드들은 프로세스의 흐름을 제어할 때 중요한 역할을 하며, 다음과 같은 기능을 수행합니다.
4.1 Break 노드
Break 노드는 For 노드를 사용한 반복 작업에서 특정 조건을 충족할 경우 반복을 중단하고 다음 작업 흐름으로 이동하도록 합니다. 특정 조건을 만족하기 위한 확인 작업은 If와 Switch 노드를 사용합니다.

Break 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- For 노드를 사용한 반복 중 특정 값에 도달했을 때 반복을 중단
아래 그림은 반복 작업 중 Iteration Value가 5보다 크거나 같은 경우 Break 동작을 수행하는 예시입니다.

4.2 Pause 노드
Pause 노드는 작업 흐름을 일시적으로 멈추고, 외부에서 작업을 재개하라는 명령을 받을 때까지 대기하는 노드입니다.
Pause 노드는 작업이 멈춘 시점에서 대기하며, 사용자가 작업 재개 명령을 내리면 멈춘 시점부터 다시 동작을 시작합니다.
F5
버튼 또는 SNAP View의 Run 버튼 클릭 등으로 작업을 재개할 수 있습니다.
Pause 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- 데이터 처리 중 특정 단계에서 사용자가 확인이 필요한 경우 Pause 노드를 통해 대기.

4.3 Stop 노드
Stop 노드는 현재 실행 중인 작업 흐름을 즉시 종료합니다. 모든 작업이 중단되며, 이후 작업 흐름도 실행되지 않습니다.
Stop 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- 동작 중 특정 오류가 발생했을 때 실행 중인 모든 프로세스를 종료.

4.4 Restart Node
Restart 노드는 동작 시 작업을 처음 부터 다시 실행합니다. 특정 조건에서 재시작해야 하는 경우 사용됩니다.
Restart 노드는 다음과 같은 상황에서 유용하게 사용됩니다.
- 설비에서 SNAP 동작 중 에러 발생 시 Reset 후 재시작해야 하는 경우

5 Delay
Delay 노드는 작업 흐름을 지정된 시간 동안 일시적으로 멈춘 후 자동으로 재개하는 노드입니다. Delay 노드는 외부 명령 없이 설정된 대기 시간이 지나면 다음 작업으로 자동 진행됩니다. Delay Time은 ms(밀리초) 단위로 설정할 수 있습니다.

