特殊コードを使用して、追加的な幾何形状を作成したり、特定のアクションを指定することができます。
3 文字の文字列の第 2 文字(ベクトルの長さ指定)を 0(ゼロ)にする必要があります。または、特殊コード番号を指定することもできます。たとえば 008 と 8 はどちらも有効な指定です。
特殊なバイト コード |
||
---|---|---|
コード |
説明 |
|
000 |
シェイプ定義の終了 |
描画は、各シェイプの開始時点でアクティブになります。描画モードがオンになると(コード 1)、ベクトルによって線が描かれます。描画モードがオフになると(コード 2)、ベクトルは描画されずに新しい位置に移動します。 |
001 |
描画モードをアクティブにします(ペンダウン) |
|
002 |
描画モードを非アクティブにします(ペンアップ) |
|
003 |
次のバイトでベクトルの長さを割ります |
SHAPE[シェイプ挿入]コマンドで指定する高さは、最初は単一の直交ベクトル(方向 0、4、8、C)の長さとみなされます。コード 3 は、次のバイトでベクトルの長さを割ります。コード 4 は、次のバイトをベクトルの長さに掛けます。コード 3 と 4 の後には、整数値の尺度係数(1~255)を指定する指定バイトが続きます。 シェイプ全体のサイズを SHAPE コマンドで指定した高さになるようにし、ベクトルの長さを 10 と指定してシェイプを描画する場合は、3,10 と指定して SHAPE コマンドでの高さ指定を尺度変更します。尺度係数は、シェイプ内で累積されます。たとえば、2 を掛けてから再び 6 を掛けると、尺度係数は 12 になります。通常、特にサブシェイプや文字フォント シェイプの場合、シェイプの最後で尺度係数を元に戻す必要があります。尺度係数は、自動的にはリセットされません。 |
004 |
次のバイトをベクトルの長さに掛けます |
|
005 |
現在の位置をスタックにプッシュします |
ただし、プッシュしたらすべてポップしなくてはなりません。位置スタックに入れておけるのは、4 つの位置までです。プッシュが多すぎたり、ポップし忘れたためにスタックがオーバーフローすると、シェイプの作成時に次のメッセージが表示されます。 位置スタック オーバーフロー (シェイプ nnn) 同様に、スタックにプッシュした数より多くをポップしようとすると、シェイプの作成時に次のメッセージが表示されます。 位置スタック アンダーフロー (シェイプ nnn) |
006 |
現在の位置をスタックからポップします |
|
007 |
次のバイトで指定される番号のサブシェイプを描画します |
非 Unicode フォントでは、コード 7 に続く指定バイトは、1 から 255 の間のシェイプ番号です。Unicode フォントでは、コード 7 の後には 1 から 65535 の間の Unicode シェイプ番号を指定します。Unicode シェイプ番号は、2 バイトとみなされます。 その番号のシェイプ(同じシェイプ ファイル内)が、この時点で作成されます。このとき、新しいシェイプに対して、描画モードはリセットされません。サブシェイプが完成すると、現在のシェイプの描画が再開されます。 |
008 |
次の 2 バイトで指定される X-Y 変位 |
標準のベクトル指定バイトの場合には、その描画方向としてあらかじめ定義されているのは 16 方向のみであり、長さの最大値は 15 です。これらの制限は、シェイプ定義を効率的に行う上では有効ですが、表現できない形状もでてきます。コード 8 は、次の 2 バイトで指定される X-Y 変位を指定します。コード 8 の後には、次の形式の指定バイトを 2 つ続ける必要があります。 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 |
複数の X-Y 変位、(0,0)で終了 |
|
00A |
次の 2 バイトで定義される八分円弧 |
この円弧は、1 つ以上の 45 度の円弧の組み合わせからなり、45 度間隔の境界線上で開始および終了するため、これを 「八分円弧」と呼びます。八分円弧の境界には、次の図のように、3 時の位置から反時計回りに番号が付いています。 ![]() 円弧指定は、次のようになります。 10,radius,(-)0SC 半径には、1 から 255 までの任意の値を指定することができます。2 番目の指定バイトは、円弧の方向(正であれば反時計回り、負であれば時計回り)、八分円弧の開始位置( s は 0 から 7 までの値)、線を引く八分円弧の数( c は 0 から 7 までの値で、0 の場合は完全な円を描く)を指定します。括弧を使用して読みやすくすることもできます。たとえば、シェイプ定義の中に次のような部分があるとします。 ...012,10,(1,-032),01E,... このコードは、1 単位のベクトルを右上の方向に描き、八分円弧の境界 3 から時計回りの円弧(半径 1 単位の 2 つの八分円弧)を描き、さらに 1 単位のベクトルを右下の方向に描きます。次の図を参照してください。 ![]() |
00B |
次の 5 バイトで定義される自由円弧 |
この定義には、次のように 5 つの指定バイトを使用します。 11,start_offset,end_offset,high_radius,radius,(-)0SC 開始オフセット と 終了オフセット は、円の開始位置と終了位置が八分円弧の境界線からどのくらい離れているのかを表します。 半径上位バイト は、半径の上位 8 ビットを表します。つまり、 半径 が 255 単位を超えない限り、半径上位バイトは 0(ゼロ)になります。 半径上位バイト の値に 256 を掛けて、その値を 半径 の値に加算すると、255 を超える半径が得られます。 半径 と最後の指定バイトについては、八分円弧指定(前述のコード 00A)と同じです。 開始オフセットを決めるには、まず開始八分円弧の境界線の位置角度(45 度の倍数)と円弧の開始位置の角度の差を計算します。そして、その差に 256 を掛けてから 45 で割ります。円弧が八分円弧の境界線上から始まるときは、開始オフセットは 0(ゼロ)になります。 終了オフセットも同様に計算しますが、円弧と交差する八分円弧の最後の境界線の度数を使用します。円弧が八分円弧の境界線上で終わるときは、終了オフセットは 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 は 1 つの円弧セグメントを描きます。コード 00D は、変位(0,0)によって終了するまで複数の円弧セグメント(ポリゴン円弧)を描きます。 コード 00C の後には、次のように、円弧を記述する 3 バイトを続けます。 0C,X-displacement,Y-displacement,Bulge ふくらみには円弧の曲率を指定します。X 変位および Y 変位は、-127 から +127 の範囲で指定します。変位によって指定される線分セグメントの長さを D、その線分の中点からの垂線の長さを H とすると、ふくらみの値は ((2 * H / D) * 127) になります。現在の位置から新しい位置への方向が時計回りの円弧では、符号が負になります。 ![]() 半円は、ふくらみが 127(または -127)で、これらのコードを使用したときに単一の円弧セグメントとして表現できる最大の円弧です(さらに大きい円弧を描くには、2 つの連続する円弧セグメントを定義します)。ふくらみに 0(ゼロ)を指定することもできます。その場合は、直線セグメントが描かれます。ただし、直線セグメントを定義する場合は、コード 8 を使用した方が、シェイプ記述に必要なバイト数が少なくて済みます。 ポリゴン円弧コード(00D または 13)の後には 0(ゼロ)または円弧セグメントを定義する 3 バイトがいくつか続き、変位(0,0)で終了します。最後の変位の後には、ふくらみを指定しないことに注意してください。たとえば、S という文字は、次の指定によって定義できます。 13,(0,5,127),(0,5,-127),(0,0) ポリゴン円弧では、直線セグメントを表現するのにセグメントのふくらみを 0(ゼロ)にすると便利です。この方法を使用する方が、いったんポリゴン円弧を終了させ、1 本の直線セグメントを挿入してから別のポリゴン円弧を再開する方法より効率的です。 円弧セグメントおよびポリゴン円弧定義では、数値 -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 ![]() |