매크로 만들어 사용하기

앞에서 본 것처럼 ASAP에는 이미 많은 매크로들이 존재하고 있고 본서에서 소개하지 못한 매크로들도 아직 많이 남아있다. 그러나 BRO에서 전세계의 다양한 분야에 종사하는 수많은 사람들의 모든 요구를 고려해서 매크로를 다 만들어 놓을 수는 없는 일이다. 그래서 BRO에서는 User-defined macro라는 것을 만들어 놓았다. 즉, 사용자가 임의로 매크로를 만들어서 ASAP에서 이미 정의해 놓은 매크로처럼 사용하면 된다. 이것은 C/C++에서 어떤 함수를 만들어 놓고 여기저기 다른 프로그램에서 그 함수를 불러와 사용하는 것과 같은 개념이다.

SYSTEM NEW
RESET

  

MACRO_SHAPE   5
SURFACE
  OPTICAL  Z
 #2  #1  #3  #4
OBJECT  ‘SHAPE_#5’
}  

Optical shape:
Z height:
Radius of X:
Radius of Y:
Object name:

$MACRO_SHAPE  RECTANGLE  0  10  10  REC

WINDOW Y X
PLOT FACETS
RETURN

위의 프로그램을 보면 MACRO_SHAPE { 5 … } 를 통해서 MACRO_SHAPE 이라는 매크로를 만들었다. 그리고 $MACRO_SHAPE를 통해서 매크로를 호출하였다. 여기서 5가 의미하는 것은 매크로가 5개의 변수를 받아서 사용한다는 뜻이다. 받은 5개의 변수는 순서대로 #1부터 #5에 대응된다. 즉, $MACRO_SHAPE RECTANGLE 0 10 10 REC로 MACRO_SHAPE { 5 … }를 호출하면 #1=RECT-ANGLE, #2=0, #3=10, #4=10, #5=REC가 적용된다. MACRO_SHAPE { 5 … } 매크로의 마지막에 있는 중괄호(})는 항상 줄의 첫번째 자리에 있어야 한다. 그렇지 않으면 에러가 발생한다.

중괄호(}) 다음에 나오는 5줄은 매크로에서 사용된 변수를 설명하는 일종의 설명문(주석)이다.

Optical shape:
Z height:
Radius of X:
Radius of Y:
Object name:

마지막 중괄호가 있는 다음줄부터 시작해서 매크로에서 지정한 변수의 수 만큼의 줄을 주석으로 인식한다. 그래서 그 줄 수 만큼은 프로그램이 명령을 실행하지 않는다. 만약, 주석이 없다면 다른 사람이 프로그램을 보거나 시간이 한참 지난 후에 프로그램을 볼 때 이 변수들이 무엇을 의미하는지 알 수 없기 때문에 이를 방지하기 위해 만들어 놓은 규정이다. 버전에 따라 조금씩은 다르지만, 이 주석이 없으면 프로그램에서 에러가 나는 경우도 있고, 5줄 안에 실행되어야 할 명령어를 작성했다면 명령이 실행되지 않는 경우도 있다.

위의 프로그램을 실행해 보자. 프로그램이 실행된 후 Command Output Window를 보면 MACRO_SHAPE { 5 다음에 SURFACE가 실행되지 않고 $MACRO_SHAPE  RECTANGLE 0 10 10 REC 이 실행된 것을 확인할 수 있다. 즉, MACRO_SHAPE { 5 를 실행하고 나면 {…} 구간을 사용자가 정의한 매크로로 인식하고 이 구간 안에있는 내용을 무시하고 넘어간다. 그리고 매크로 영역 다음에 나오는 명령어가 $MACRO_SHAPE  RECTANGLE  0  10  10  REC 이기 때문에 이것이 실행되었다. 그런데 이 명령어가 MACRO_SHAPE를 호출하고 있기 때문에 그 다음에 SURFACE 명령어가 실행되었다. 아래 결과를 보면 매크로 안의 내용은 Command Output Window에 출력될때 -1- 로 시작되는 것을 확인할 수 있다. 그리고 매크로가 실행되면서 #1~#5의 자리에 지정해 놓은 값이 적용된 것도 확인 할 수 있다.

— SYSTEM NEW
— RESET
— MACRO_SHAPE { 5

— $MACRO_SHAPE RECTANGLE 0 10 10 REC
-1-  SURFACE
-1-    OPTICAL Z 0 RECTANGLE 10 10
-1-  OBJECT  ‘SHAPE_REC’

— WINDOW Y X
— PLOT FACETS
Window Vertical: Y = -10.2000     to  10.2000      ( 20.4000    )
Horizontal: X = -10.2000     to  10.2000      ( 20.4000    )
— RETURN

프로그램이 실행되고 나서 3D View 버튼을 눌러 3차원 그림을 그려보자. 그러면 Z축 원점에 사각형이 그려졌고, object의 이름이 SHAPE_REC 인것을 확인할 수 있다.

Macro_rec
그림 8.32 MACRO_SHAPE에 의해 생성된 SHAPE_REC object

위에서는 $MACRO_SHAPE처럼 사용자의 매크로를 $ 첨자로 호출하였다. 그러나, & 첨자로 호출하면 호출된 매크로의 내용은 Command Output Window에 표시하지 않는다. 위의 프로그램을 &MACRO_SHAPE  RECTANGLE  0  10  10  REC 로 변경하고 실행시켜 보자. 그러면 Command Output Window에 -1- 로 시작되는 매크로 내부의 내용은 표시되지 않는것을 확인할 수 있다.

— SYSTEM NEW
— RESET
— MACRO_SHAPE { 5

— &MACRO_SHAPE RECTANGLE 0 10 10 REC

— WINDOW Y X
— PLOT FACETS
Window Vertical: Y = -10.2000     to  10.2000      ( 20.4000    )
Horizontal: X = -10.2000     to  10.2000      ( 20.4000    )
— RETURN

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: