Points로 Edge 만들기
ASAP는 POINTS(점)들을 연결해서 우리가 원하는 EDGE(경계)를 만든다. ASAP™ Primer에서는 “모든 edge들은 점들을 연결하는 것 그 이상도 그 이하도 아니다” 라고 얘기하고 있다. 즉 POINTS를 이용해서 EDGE를 만들고 이 EDGE를 이용해서 우리가 원하는 형태의 2D나 3D 형상을 만드는 것이다. 그럼 ASAP이 POINTS를 어떻게 정의하고 있는지 Help를 통해 알아보자.
POINTS (2D) (ASAP Command) | ||||||||||
Creates a generalized planar edge. Syntax
|
POINTS X x는 X축을 기준으로 잡고 x 위치에서 시작되는 그림을 그리게 된다. 그리고 X축에 수직한 면(YZ평면)의 y z 위치에 우리가 원하는 point를 찍게 된다. 다음으로 또 다른 하나의 점 y’ z’ 을 찍게 되면 이들 두 점이 연결되어 선(line)을 이루게 되는 것이다. 이때 두 선을 어떻게 연결할지를 결정하는 것이 q 값이다.
정리하면 순서는 이렇다.
1) POINTS를 선언하고 기준축 X와 시작위치 x를 지정한다.
2) YZ평면상의 위치 y z 값을 지정하고, 그 다음의 점과는 어떤 형태로 연결할지를 q값을 통해 결정한다.
3) 그 다음 점인 y’ z’ 값을 지정하고, 또 그 다음의 점과의 연결 방법인 q’ 값을 지정한다.
4) 이와 같은 방법으로 원하는 점을 찍으면서 선을 그려 나가면 된다.
Note… |
ASAP은 Cyclical coordinate ordering을 사용한다. ELLIPSE Y y z x 를 예를 들어보면 기준축을 Y 로 설정하였다. 그런 다음에는 기준축의 값인 y 의 좌표값이 먼저 나오고 다음에는 z, 그리고 x 의 값이 나와 y → z → x 의 순으로 돌아가게 된다. 좌표들은 순환하면서 정의된다는 뜻이다. 즉, ASAP에서 기준축을 Y축으로 잡았다면 점은 ZX 평면에 그려지게 되고 POINTS Y y z x q z’ x’ q’ … 처럼 순환되게 작성해야 한다는 것이다. 참고로, 3D View 그림을 그리고 좌표를 보면 Red, Green, Blue의 색으로 좌표 축이 그려지는데… Red(X축), Green(Y축), Blue(Z축)을 말하는 것이다. |
그럼 이제 그림을 한번 그려보자.
SYSTEM NEW
RESET
EDGE
POINTS X 0 0 0 1, 1 1 1, 2 0 0
WINDOW Z –1 3 Y –1 2
PLOT EDGE
RETURN
SYSTEM을 초기화하고 EDGE를 선언했다. 그리고 3개의 POINTS를 찍었다. POINTS를 다 찍은 후에는 보려고 하는 WINDOW 평면과 크기를 정의하고 각각의 POINTS로 연결된 EDGE를 보기위해 PLOT EDGE를 했다.
SAWTOOTH 처럼 생긴 ‘^’ 모양이 만들어졌다. 그럼 POINTS에 대해서 좀 더 자세히 알아보자.
위에서 계속 얘기한 것이지만 POINTS를 선언하고 X축은 0, YZ는 0 0인 지점을 시작점으로 찍었다. 그리고 직선으로 다음 점과 연결하기 위해서 q 값을 1로 설정했다. 다음 점은 1 1 을 찍고 마지막 점과도 직선으로 연결하기 위해서 q 를 1로 설정했다. 끝으로 Y 2, Z 0 지점을 찍고 points를 끝내기 위해서 q 를 0으로 설정했다. 0 은 더이상 선을 연결하지 않고 끝내겠다는 뜻이다.
q q’ … parameters | ||||||||||||
The q parameters control how each edge point is connected to the next, as described in the following table.
|
이제 한걸음 더 나아가보자. 처음에 작성한 프로그램에 $DO와 SHIFT 명령어를 추가하였다. 이는 C/C++에서 사용하는 for 함수와 같은 기능이다.
SYSTEM NEW
RESET
$DO 0 9
{
EDGE
POINTS X 0 0 0 1, 1 1 1, 2 0 0
SHIFT Y ?*2
}
PLOT EDGE
RETURN
$DO 0 9 3 이라고 하면 0에서 9까지 3씩 증가시키면서 반복하라는 의미이다. 즉 4개의 값(0, 3, 6, 9)이 도출된다. 그런데 위에서는 증가량에 대한 값이 설정되어 있지 않기 때문에 default로 1씩 증가하게 된다. 그리고 이때 도출된 값은 ‘?’에 입력된다. SHIFT는 뒤에 지정된 Y 축으로 0*2, 1*2, 2*2 … 9*2 만큼씩 이동하라는 명령어이다. 즉 그려진 EDGE가 옆으로 나란히 서 있는것 처럼 되는 것이다.
그림 4.57은 위의 프로그램을 3D View로 본 것이다. 그런데 위의 그림에서 이상한 점이 하나 있다. 10개의 EDGE를 그렸는데 색깔이 모두 다르게 그려졌다. 왜 그럴까? 이것은 ASAP이 10개의 EDGE를 모두 따로따로 인식하고 있기 때문이다. ASAP은 각각의 object에 대해 각각의 색을 지정해 줄 수 있다. 그런데 우리가 색을 지정해 주지 않으면 ASAP은 object 마다 색을 따로따로 지정해 준다. 그래서 위의 그림이 다양한 색으로 그려진 것이다.
이제 좀 더 복잡한 그림을 그려보자.
SYSTEM NEW
RESET
EDGE
POINTS X 0 0 0 1, 1 0 1, 1 1 -2, 0 1 90, 0 2 0
WINDOW Z –1 3 Y –1 2
PLOT EDGE
RETURN
q 값에 –2와 90이 등장하였다. 우선 그림을 한번 보자. 그림 4.58에서 검은색 실선이 위의 POINTS를 이용해서 그린 그림이다.
1) (POINTS X 0) : X축을 먼저 설정했기 때문에 points들은 YZ 평면에서 그려진다.
2) (0 0 1,) : YZ평면 0 0 에서 시작해서 다음 점까지 직선으로 연결 (q=1) 한다.
3) (1 0 1,) : 1 0 점에서 다음 점까지도 직선으로 연결 (q=1)한다.
4) (1 1 -2,) : 1 1 점까지는 직선으로 연결되었지만, 다음 점은 타원형의 원호(elliptical arc)로 연결하겠다는 뜻이다.
5) (0 1 90,) : 원호 그리기의 다음 단계는 연결되는 다음 점이 아니라 원호의 중심점이 먼저 지정되어야 한다. (0 1) 점을 중심으로 90° 만큼의 각도를 가지는 원호를 그리겠다는 뜻이다.
6) (0 2 0) : 원호의 다음 점인 0 2를 지정하고 points를 끝내기 위해 q=0으로 설정했다. Points에 대한 좀 더 자세한 내용은 ‘7.1장 POINTS’에서 확인 할 수 있다.
EDGE로 그려진 위의 선을 면으로 만들 수 있는 방법이 있다. 바로 SWEEP 명령어다.
SYSTEM NEW
RESET
EDGE
POINTS X 0 0 0 1, 1 0 1, 1 1 –2, 0 1 90, 0 2 0
SWEEP AXIS 270 0 0 1
OBJECT ‘EDGE_SWEEP’
WINDOW Z –1 3 Y –1 2
PLOT FACETS 71 71
RETURN
SWEEP (ASAP Command) | ||||||||||||||||||
Specifies the optional sweeping of a curve into a surface.
Syntax 1 Syntax 2
|
POINTS로 그려진 EDGE entity를 SWEEP으로 훑고 지나가면 면이 되는 것이다. 지금은 Z 축을 기준으로 270° 회전시켜 면을 만들었다. 면을 만들고 나면 더이상 entity가 아니다. 그래서 OBJECT ‘EDGE_SWEEP’ 처럼 이름을 설정하여 object로 만들어 주어야 한다.
EDGE를 object로 변경하였기 때문에 PLOT EDGE도 PLOT FACETS 으로 바꿔주어야 object 그림을 볼 수 있다. 그리고 깨끗한 그림을 위해 n n’ parameter를 71로 지정했다. 이 책을 읽으면서도 더 자세한 설명이 필요하면 꼭 Help를 참조하기 바란다.
POINTS와 SWEEP을 이용해서 형상을 만드는 방법은 아주 많이 그리고 유용하게 사용되는 방법이다. POINTS를 이용하는 방법에 대해서는 각자 이런 저런 형상을 만들어 보면서 연습을 많이 해 보길 바란다.