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  y z  q [ y’ z’ q’ … ]
Y y  z x      z’ x’
Z z  x y      x’ y’

Option Description
X, Y or Z specifies coordinate axis
x, y or z specifies location along coordinate axis
y z (z x or x y), y’ z’ … coordinates of point in orthogonal axes
q q’ … connection parameters

 


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를 했다.

Edge_^
그림 4.56 points로 선 그리기

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.

q PARAMETER EDGE POINT CONNECTION
q=0 Not connected to the next point (open)
q=1 Connected by a straight line to the next point
q=2

Connected by a quadratic rational Bezier (conic) curve to the point after next. The next point is the intermediate control vertex. The next q is the intermediate weighting factor and is always positive:

0 straight line

<1 ellipse

1 parabola

>1 hyperbola

q=-2 Connected by an elliptical arc to the point after next. The next point is the center of the parent ellipse. The next q is the angular subtense (in degrees) of the arc and must be less than 180 degrees.
q=n Connected by an nth (up to 10th) degree rational Bezier curve. The intermediate n-1 points are control vertices with given (positive) weight factors.

 

이제 한걸음 더 나아가보자. 처음에 작성한 프로그램에 $DOSHIFT 명령어를 추가하였다. 이는 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가 옆으로 나란히 서 있는것 처럼 되는 것이다.

SAWTOOTH
그림 4.57 points로 SAWTOOTH 그리기

그림 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를 이용해서 그린 그림이다.

SWEEP_Points
그림 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 Y1 2
PLOT  FACETS  71  71
RETURN

SWEEP (ASAP Command)
Specifies the optional sweeping of a curve into a surface.

Syntax 1
SWEEP DIR  d [ a,b,c ]
TO   x y z
POS  f [ x y z ]
AXIS t   a,b,c  [ x y z ]

Syntax 2
SWEEP [ OFF ]
d
f
t

Option Description
DIR POS AXIS sweep type (see Remarks)
d actual sweep distance
a b c sweep direction or axis
TO sweep first point on edge TO
x y z sweep point
f fractional sweep distance
t sweep angle
OFF turns off sweep

 


POINTS
로 그려진 EDGE entity를 SWEEP으로 훑고 지나가면 면이 되는 것이다. 지금은 Z 축을 기준으로 270° 회전시켜 면을 만들었다. 면을 만들고 나면 더이상 entity가 아니다. 그래서 OBJECT ‘EDGE_SWEEP’ 처럼 이름을 설정하여 object로 만들어 주어야 한다.

EDGE를 object로 변경하였기 때문에 PLOT EDGEPLOT FACETS 으로 바꿔주어야 object 그림을 볼 수 있다. 그리고 깨끗한 그림을 위해 n n’ parameter를 71로 지정했다. 이 책을 읽으면서도 더 자세한 설명이 필요하면 꼭 Help를 참조하기 바란다.

SWEEP_3D
그림 4.59 SWEEP으로 object 만들기

POINTSSWEEP을 이용해서 형상을 만드는 방법은 아주 많이 그리고 유용하게 사용되는 방법이다. POINTS를 이용하는 방법에 대해서는 각자 이런 저런 형상을 만들어 보면서 연습을 많이 해 보길 바란다.

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: