특수 코드 참조

특수 코드를 사용하여 기하학적 형태를 추가로 작성하고 특정한 동작을 지정할 수 있습니다.

세 자리 문자열(벡터 길이 지정 사항)의 두 번째 자리는 0이 되어야 합니다. 또는 특수 코드 번호를 지정할 수 있습니다. 예를 들어, 008과 8은 모두 유효한 지정입니다.

지정 바이트 코드

코드

설명

000

쉐이프 정의의 끝

그리기는 각 쉐이프가 시작할 때 활성화됩니다. 그리기 모드가 켜지면(코드 1) 벡터가 선을 그립니다. 그리기 모드가 꺼지면(코드 2) 벡터가 그리지 않고 새 위치로 이동합니다.

001

그리기 모드 활성화(펜 다운)

002

그리기 모드 비활성화(펜 업)

003

벡터 길이를 다음 바이트로 나누기

SHAPE 명령으로 지정된 높이는 처음에 단일 직교 벡터(방향 0, 4, 8 또는 C)의 길이로 간주됩니다. 코드 3는 벡터 길이를 다음 바이트로 나눕니다. 코드 4는 다중 벡터 길이를 다음 바이트로 나눕니다. 코드 3과 4 뒤에는 정수 축척 비율(1~255)이 포함된 지정 바이트가 옵니다.

쉐이프 높이로 전체 쉐이프 크기를 지정하고 10 벡터 길이를 사용하여 쉐이프를 그리려는 경우 3,10을 사용하여 높이 지정을 축척할 수 있습니다. 축척 비율은 쉐이프 내에서 누적됩니다. 즉, 2를 곱한 다음 다시 6을 곱하면 축척 비율이 12가 됩니다. 일반적으로 쉐이프의 끝에서, 특히 하위 쉐이프 및 문자 글꼴 쉐이프의 경우 축척 비율의 효과가 반대로 표시되어야 합니다. 이 프로그램은 축척 비율을 자동으로 재설정하지 않습니다.

004

벡터 길이와 다음 바이트를 곱하기

005

스택에 현재 위치 넣기

넣은 것은 모두 꺼내야 합니다. 위치 스택의 깊이는 4 위치에 불과합니다. 너무 많이 넣었거나 넣은 만큼 꺼내기 작업을 하지 않으면 스택 오버플로우가 발생하여 쉐이프를 그릴 때 다음 메시지가 표시됩니다.

Position stack overflow in shape nnn

마찬가지로 스택에 넣은 위치보다 더 많은 위치를 꺼내려고 하면 쉐이프를 그릴 때 다음 메시지가 표시됩니다.

Position stack underflow in shape nnn

006

스택에서 현재 위치 팝

007

다음 바이트로 제공된 하위 세이프 번호 그리기

유니코드가 아닌 글꼴의 경우 코드 7 다음의 지정 바이트는 1부터 255 사이의 쉐이프 번호입니다. 유니코드 글꼴의 경우 코드 7 다음에 1부터 65535 사이의 유니코드 쉐이프 번호가 표시됩니다. 유니코드 쉐이프 번호는 2바이트로 계산해야 합니다.

이때 같은 쉐이프 파일에서 해당 번호의 쉐이프가 그려집니다. 새 쉐이프의 경우에는 그리기 모드가 재설정되지 않습니다. 하위 쉐이프가 완료되면 현재 쉐이프 그리기가 계속 진행됩니다.

008

다음 두 바이트로 제공된 X-Y 변위

보통 벡터 지정 바이트는 사전에 정의된 16개의 방향으로만 그리며 가장 긴 길이는 15입니다. 이러한 제한 사항으로 쉐이프를 효율적으로 정의할 수 있지만, 간혹 이러한 효율성에도 한계가 있습니다. 코드 8은 다음에 오는 2바이트가 제공하는 X-Y 변위를 지정합니다. 코드 8 뒤에는 다음 형식의 두 가지 지정 바이트가 와야 합니다.

8,X-displacement,Y-displacement

X-Y 변위의 범위는 –128에서 +127까지입니다. 앞의 +는 선택적이며 괄호를 사용하여 보기 편하게 만들 수 있습니다. 다음 보기에서는 왼쪽에 10 단위, 위쪽에 3 단위를 그리는(또는 이동하는) 벡터가 만들어졌습니다.

8,(-10,3)

2 변위 지정 바이트 후에 쉐이프는 법선 벡터 모드로 복귀합니다.

코드 9를 사용하여 비표준 벡터 순서를 그릴 수 있습니다. 코드 9는 개수에 관계없이 X-Y 변위 쌍을 지정합니다. 코드 순서는 (0,0) 쌍에 의해 종료됩니다. 다음 보기에서는 3개의 비표준 벡터를 그리고 법선 벡터 모드로 복귀합니다.

9,(3,1),(3,2),(2,-3),(0,0)

이 프로그램이 법선 벡터 또는 그 뒤에 오는 특수 코드를 인식하도록 하려면 X-Y 변위 쌍 시퀀스를 (0,0) 쌍으로 종료해야 합니다.

009

(0,0)으로 종결된 다중 X-Y 변위

00A

다음 두 바이트로 정의된 8분원 호

하나 이상의 45도 8분원에 걸쳐 있으며, 8분원 경계에서 시작되고 끝나기 때문에 이를 8분원 호라고 합니다. 8분원은 다음 그림과 같이 3시 위치에서 시계 반대 방향으로 번호가 매겨집니다.

호 지정은 다음과 같습니다.

10,radius,(-)0SC

radius는 1에서 255 사이의 값 중 어느 값이든 될 수 있습니다. 두 번째 지정 바이트는 호의 방향(양수일 경우 시계 반대 방향, 음수일 경우 시계 방향임), 호의 시작 8분원( s , 0~7 사이의 값) 및 걸쳐진 8분원 수( c , 0~7 사이의 값. 0은 8개의 8분원 또는 전체 원임)를 나타냅니다. 읽기 쉽게 하기 위해 괄호를 사용할 수 있습니다. 예를 들어, 다음과 같은 쉐이프 정의 단편을 고려해 보십시오.

...012,10,(1,-032),01E,...

이 코드는 다음 그림처럼 오른쪽 위로 1단위 벡터를 그리고, 8분원 3(두 개의 8분원에 대해 1단위 반지름)에서 시계 방향의 호를 그린 다음, 오른쪽 아래로 1단위 벡터를 그립니다.

00B

다음 다섯 바이트로 정의된 분수 호

정의에서는 5개의 지정 바이트를 사용합니다.

11,start_offset,end_offset,high_radius,radius,(-)0SC

start_offset end_offset 는 호가 8분원 경계에서 얼마나 떨어진 위치에서 시작하고 끝나는지 나타냅니다. high_radius 는 최상위 8비트를 나타내며 radius 가 255 단위보다 크지 않으면 이 값은 0입니다. high_radius 값에 256를 곱해서 그 값을 radius 값에 더하면 255보다 큰 호 반지름이 생성됩니다. 8분원 호 지정의 radius 및 끝 지정 바이트(앞에서 설명한 코드 00A)는 같습니다.

시작 8분원 경계(45도의 배수)와 호 시작점 사이의 각도 차이를 계산하면startoffset이 결정됩니다. 그런 다음, 이 차이 값에 256를 곱하고 45로 나누십시오. 호가 8분원 경계에서 시작되면 start offset은 0입니다.

end offset도 비슷한 방법으로 계산되지만 호의 끝을 교차하는 마지막 8분원 경계를 기준으로 하는 각도를 사용해야 합니다. 호가 8분원 경계에서 끝나면 end offset은 0입니다.

예들 들어, 반지름이 3 단위인 55도에서 95도까지의 분수 호는 다음과 같이 코드화됩니다.

11,(56,28,0,3,012)

다음은 이에 대한 설명입니다.

start_offset     = 56 because ((55 - 45) * 256 / 45) = 56 
end_offset       = 28 because ((95 - 90) * 256 / 45) = 28
high_radius      = 0  because (radius < 255) 
radius           = 3 
starting octant  = 1  because arc starts in the 45 degree octant
ending octant    = 2  because arc ends in the 90 degree octant

00C

X-Y 변위 및 돌출로 정의된 호

이러한 코드는 X-Y 변위를 지정할 수 있다는 점에서 코드 8 및 9와 비슷합니다. 그러나 코드 00C와 00D는 변위 벡터에 돌출 비율을 적용하여 호를 그립니다. 코드 00C는 하나의 호 세그먼트를 그리는 반면, 코드 00D는 (0,0) 변위로 종료될 때까지 다중 호 세그먼트(polyarcs)를 그립니다.

코드 00C 뒤에는 호에 대해 설명하는 3바이트가 와야 합니다.

0C,X-displacement,Y-displacement,Bulge

호의 곡률을 지정하는 XY 변위와 돌출의 범위는 둘 다 -127에서 +127까지입니다. 변위로 지정된 선 세그먼트의 길이가 D이고, 이 세그먼트의 중간 점에서 직교 거리의 높이가 H인 경우, 돌출의 크기는 ((2* H / D) * 127)입니다. 현재 위치에서 새 위치까지 호가 시계 방향으로 그려진 경우, 부호는 음수입니다.

반원은 돌출 127(또는 –127)을 가지며, 이러한 코드를 사용하여 단일 호 세그먼트로 나타낼 수 있는 가장 큰 호입니다(더 큰 호는 두 개의 연속 호 세그먼트를 사용함). 돌출 지정 0은 유효하며 직선 세그먼트를 나타냅니다. 그러나 직선 세그먼트에 코드 8을 사용하면 바이트가 쉐이프 설명에 저장됩니다.

폴리호 코드(00D 또는 13) 뒤에는 0 또는 추가로 3중 호 세그먼트가 오며 (0,0) 변위로 종료됩니다. 마지막 변위 다음에는 돌출이 지정되지 않음을 주의하십시오. 예를 들어, 문자 S는 다음 순서로 정의될 수 있습니다.

13,(0,5,127),(0,5,-127),(0,0)

0 돌출 세그먼트는 폴리호 내에서 직선 세그먼트를 나타내는 데 유용하며, 폴리호를 종료하고 하나의 직선 세그먼트를 삽입한 다음 다른 폴리호를 시작하는 것보다 훨씬 효과적입니다.

호 세그먼트 및 폴리호 정의에서는 숫자 –128을 사용할 수 없습니다.

00D

다중 돌출 지정 호

00E

수직 문자인 경우에만 다음 명령 처리

이 특수 코드가 문자 정의에 사용되면 방향에 따라 그 다음 코드를 처리하거나 건너뜁니다. 세로 방향이면 다음 코드를 처리하고, 가로 방향이면 다음 코드를 건너뜁니다.

가로 문자에서 각 문자의 시작점은 기준선의 왼쪽 끝입니다. 세로 문자에서 시작점은 문자의 맨 위쪽 중심으로 간주됩니다. 각 문자의 끝에는 보통 펜 업 세그먼트가 그려져 그 다음 문자의 시작점을 지정합니다. 가로 문자에서 시작점은 오른쪽이고, 세로 문자에서는 아래쪽입니다. 특수 코드 00E(14)는 주로 시작점과 끝점의 차이를 조절하는 데 사용되며, 동일한 문자 쉐이프 정의를 가로와 세로로 모두 사용할 수 있게 합니다. 예를 들어, 다음과 같은 대문자 D의 정의를 가로 또는 세로 문자에 사용할 수 있습니다.

*68,22,ucd 
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0