XArc(3) 円弧/楕円弧の描画、弧を表す構造体

Other Alias

XDrawArc, XDrawArcs

書式

XDrawArc(display, d, gc, x, y, width, height, angle1, angle2)

      Display *display;

      Drawable d;

      GC gc;

      int xy;

      unsigned int widthheight;

      int angle1angle2;

XDrawArcs(display, d, gc, arcs, narcs)

      Display *display;

      Drawable d;

      GC gc;

      XArc *arcs;

      int narcs;

引き数

angle1
弧の中心と3時の位置を結んだ線を基準として弧の開始角を指定する。 単位は弧度(degree)*64である。
angle2
弧の開始角からの角度で弧の軌跡と領域を指定する。 単位は弧度*64である。
arcs
弧の配列を指定する。
d
ドロウアブルを指定する。
display
X サーバへの接続を指定する。
gc
GC を指定する。
narcs
配列中の弧の数を指定する。
width

height
幅と高さを指定する。 これは弧の長軸と短軸である。
x

y
x, y 座標を指定する。 これはドロウアブルの原点からの相対座標であり、円弧を囲む長方形の左上隅 の座標である。

説明

delim %% 関数 XDrawArc は単独の円あるいは楕円の弧を描画し、 XDrawArcs は複数の円あるいは楕円の弧を描画する。 は それぞれの弧は長方形と2つの角度で指定される。 円、あるいは楕円の弧の中心は長方形の中心であり、長軸と短軸は長方形の幅 と高さで指定する。 正の角度は反時計周りの向きを示し、負の角度は時計周りの向きを示す。 angle2 の大きさが360度以上の場合、 XDrawArcXDrawArcs はこの角度を360度に縮める。

%[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]% で指定される弧の場合、 長軸と短軸の原点は % [ x +^ {width over 2} , ~y +^ {height over 2} ]% である。また、円や楕円の無限に細い軌跡は横軸とは
 % [ x, ~y +^ {height over 2}  ]% と  % [ x +^ width , ~y +^ { height over 2 }] % で交わり、縦軸とは % [ x +^ { width over 2 } , ~y ]%
 % [ x +^ { width over 2 }, ~y +^ height ]% で交わる。 これらの座標は小数であり、離散的な座標には丸められない。 軌跡は数学的に厳密に定義すべきである。 幅 lw を持つ線の場合、塗りつぶしの輪郭線は、円/楕円の軌跡からの距離が lw/2(これは小数になり得る) に等しい点からなる2つの無限に細い軌跡によっ て与えられる。 弧の端点については、その円/楕円の接線に対する cap_style や join_style と同じものが用いられる。

% [ ~x, ~y, ~width, ~height, ~angle1, ~angle2 ]% で指定される弧の場合、 この角度は実際には歪んでいる楕円の座標系で定義しなければならない(円の 場合には、角度と座標系は一致している)。 これらの角度とスクリーンの通常の座標系で表現される角度(分度器で測るよ うな角度)の関係は次式で表される。

% roman "skewed-angle" ~ = ~ atan left ( tan ( roman "normal-angle" )
 * width over height right ) +^ adjust%

skewed-angle と normal-angle は範囲が % [ 0 , ~2 pi ]% のラジアン(64 で割った弧度ではない)で表される。この角度のアークタンジェントは範囲 % [ - pi over 2 , ~pi over 2 ] % を返す。また、adjust は以下の値を取 る。

%0%       通常の角度が % [ 0 , ~pi over 2  ]% の範囲にある場合
%pi%      通常の角度が % [ pi over 2 , ~{3 pi} over 2  ]% の範囲にある場合
%2 pi%    通常の角度が % [ {3 pi} over 2 , ~2 pi  ]% の範囲にある場合

与えられた弧について、 XDrawArcXDrawArcs は、1つのピクセルを1度しか描画しない。 正しく接続している2つの弧の幅が 0 より大きく、弧が交わっている場合に は、 XDrawArcXDrawArcs は、1つのピクセルを1度しか描画しない。 そうでない場合、交わっている弧のピクセルは複数回描画される。 ある端点から時計周りに指定した弧と他方の端点から反時計周りに同じ角度を 指定した弧は、接続に違いが出る以外は同じピクセルを描画する。

ある弧の終点と次の弧の最初の点が一致した場合、2つの弧は正しく接続され る。 最初の弧の最初の点と最後の弧の最後の点が一致する場合、2つの弧は正しく 接続される。 1つの軸に 0 を指定すれば、水平な線か垂直な線を描くことができる。 角度は単に座標系に基づいて計算され、アスペクト比は無視される。

どちらの関数も以下の GC コンポーネントを使用する。 function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dash-list.

XDrawArcXDrawArcs はエラー BadDrawable, BadGC, BadMatch を起こすことがある。

構造体

XArc 構造体の内容を示す。

typedef struct {
     short x, y;
     unsigned short width, height;
     short angle1, angle2;             
} XArc;

x, y メンバは符号付きの整数である。 width, height メンバは16ビットの符号なし整数である。 プロトコルはこれらの値について16ビットのフィールドしか持っていないので、 座標やサイズが16ビットの範囲を越えないように注意しなければならない。

返り値

BadDrawable
引き数 Drawable の値が、定義されている Window や Pixmap を指していない。
BadGC
引き数 GContext の値が、定義されている GContext を指していない。
BadMatch
InputOnly のウィンドウがドロウアブルとして指定された。
BadMatch
引き数や引き数の組は正しい型・範囲を持っているが、そのリクエストが要求する 他の条件に適合できなかった。