クラス SGCairoDraw

ドロー系の図形描画クラス [詳細]

#include <sgcairo.h>

すべてのメンバ一覧

Public メソッド

 SGCairoDraw ()
 コンストラクタ
 SGCairoDraw (SGSurface *surface)
 コンストラクタ
virtual ~SGCairoDraw ()
 デストラクタ
void CvSetSurface (SGSurface *surface)
 描画を行うサーフェースを登録する
SGSurfaceCvGetSurface ()
 登録したサーフェスを取得する
int CvBegin ()
 描画準備を行う
int CvReady ()
 描画準備が出来ているか確認する
int CvUpdate ()
 描画を更新する
int CvEnd (int update=TRUE)
 描画を終了する
void CvCopyPage ()
 コピーページ
void CvSetAntialias (int enable)
 アンチエイリアス機能のON/OFFを行う
void CvColor (int red, int green, int blue)
 カレントペンの色を指定する
void CvColor ()
 カレントペンの色を透明色に指定する
void CvSetLineWidth (double width)
 線の太さを設定する
void CvSetDash (int *dashes=NULL, int num=0, int offset=0)
 線種(実線・破線)の指定
void CvSetFillRule (int rule)
 塗りつぶし規則を指定する
void CvSetLineCap (int cap)
 線の端属性を指定する
void CvSetLineJoin (int join)
 線の接続属性の指定する
void CvSetMiterLimit (int limit)
 線の接続属性「MITER」の限界角度を設定する
int CvSetOperator (int op)
 描画属性を設定する
double CvSetTolerance (double tolerance)
 精度を設定する
void CvNewPath ()
 新しいパスを準備する
void CvNewSubPath ()
 新しいサブパスを準備する
void CvClosePath ()
 パスを閉じる
void CvMoveTo (int x, int y)
 カレントポイントを移動する
void CvMoveToRel (int dx, int dy)
 カレントポイントを相対座標指定で移動する
void CvLineTo (int x, int y)
 カレントパスに直線を追加する
void CvLineToRel (int dx, int dy)
 カレントパスに直線を相対座標指定で追加する
void CvCurveTo (int c1x, int c1y, int c2x, int c2y, int x, int y)
 カレントパスに曲線を追加する
void CvCurveToRel (int c1dx, int c1dy, int cl2dx, int c2dy, int dx, int dy)
 カレントパスに曲線を相対座標指定で追加する
void CvTextPath (const char *text, int size)
 カレントパスに文字列パスを追加する
void CvRectangle (int x, int y, int w, int h)
 カレントパスに矩形を追加する
void CvCircle (int cx, int cy, int radius)
 カレントパスに円形を追加する
void CvCircleNegative (int cx, int cy, int radius)
 カレントパスに円形(反時計周り)を追加する
void CvArc (int xc, int yc, int radius, int deg1, int deg2)
 時計回り円弧を追加
void CvArcNegative (int xc, int yc, int radius, int deg1, int deg2)
 反時計回り円弧を追加
void CvPreservePath ()
 パスデータの維持を指示する
void CvStroke ()
 輪郭線を描く
void CvFill ()
 塗りつぶす
void CvClip ()
 クリッピングする
void CvResetClip ()
 クリッピングを解除する
void CvSave ()
 状態を保存する
void CvRestore ()
 状態を復元する
void CvTransformTranslate (int tx, int ty)
 変換-平行移動
void CvTransformScale (double sx, double sy)
 変換-拡大縮小
void CvTransformRotate (int angle)
 変換-回転
void CvTransformSlant (int degx, int degy)
 変換-傾斜
void CvTransformMatrix (double xx, double yx, double xy, double yy, double x0, double y0)
 変換マトリックス
void CvTransformGetMatrix (double &xx, double &yx, double &xy, double &yy, double &x0, double &y0)
 変換マトリックスの取得
void CvTransformGetMatrixInvert (double &xx, double &yx, double &xy, double &yy, double &x0, double &y0)
 変換マトリックスの取得
void CvTransformReset ()
 変形効果のリセット
void CvTransformDo (SGRect &rect)
 矩形の座標を現在の変換マトリックスで変換します。
void CvTransformDo (int &x, int &y)
 座標を現在の変換マトリックスで変換します。
void CvSelectFont (const char *face, int slant, int bold)
 書体選択
void CvShowText (const char *text, int size)
 文字列を描画する
void CvGetTextExtents (const char *text, int size, int &ascender, int &width, int &height)
 文字列を描画するのに必要なサイズを取得する

説明

ドロー系の図形描画クラス

指定のキャンバス(SGSurface)へ図を描くことができます。
カイロ(libcairo)というグラフィック描画ライブラリを使用します。
PlusGオリジナルなグラフィック描画クラスSGCanvasDrawというクラスもあります。

┌──────┬────┬────┬────┐
│            │  精度  │  機能  │  速度  │
├──────┼────┼────┼────┤
│SGCanvasDraw│  整数  │  低い  │  早い  │
│SGCairoDraw │ 倍精度 │  高い  │  遅い  │
└──────┴────┴────┴────┘

コンストラクタとデストラクタ

SGCairoDraw (  ) 

コンストラクタ

SGCairoDraw ( SGSurface surface  ) 

コンストラクタ

引数:
surface サーフェース
~SGCairoDraw (  )  [virtual]

デストラクタ


関数

void CvSetSurface ( SGSurface surface  ) 

描画を行うサーフェースを登録する

描画を行うサーフェースを登録します。

SGSurface * CvGetSurface (  ) 

登録したサーフェスを取得する

登録したサーフェスを取得します。

戻り値:
サーフェス
int CvBegin (  ) 

描画準備を行う

描画準備を行います。
描画の前に必ずコールする必要があります。
グラフィックを使用する為に1度だけコールしてください。

戻り値:
TRUE 成功
FALSE 失敗
int CvReady (  ) 

描画準備が出来ているか確認する

描画準備が出来ているか確認します。
描画準備はCvBegin()で行います。

戻り値:
TRUE 準備が出来ている状態です
FALSE 準備ができていない状態です
int CvUpdate (  ) 

描画を更新する

描画を更新します。

戻り値:
TRUE 正常
FALSE 異常
int CvEnd ( int  update = TRUE  ) 

描画を終了する

描画を終了する為に1度だけコールします。
描画は反映されます。

戻り値:
TRUE 正常
FALSE 異常
void CvCopyPage (  ) 

コピーページ

現在描画中のページ画像をサーフェースへコピーして反映する。

void CvSetAntialias ( int  enable  ) 

アンチエイリアス機能のON/OFFを行う

アンチエイリアス機能のON/OFFを行います。
パレットモード(8Bit mode)の時は設定できません。

引数:
enable ON/OFF

TRUE  アンチエイリアスする
FALSE アンチエイリアスしない
void CvColor ( int  red,
int  green,
int  blue 
)

カレントペンの色を指定する

カレントペンの色を指定します。

引数:
red 赤要素(0-255)
green 緑要素(0-255)
blue 青要素(0-255)
void CvColor (  ) 

カレントペンの色を透明色に指定する

カレントペンの色を透明に指定します。

void CvSetLineWidth ( double  width  ) 

線の太さを設定する

線の太さを設定します。

引数:
width 太さ
void CvSetDash ( int *  dashes = NULL,
int  num = 0,
int  offset = 0 
)

線種(実線・破線)の指定

破線(実線)の設定を行います。
パラメータを全て省略すると実線を指定します。

引数:
dashes 破線データの配列
num 配列の数
offset 開始のオフセット
void CvSetFillRule ( int  rule  ) 

塗りつぶし規則を指定する

塗りつぶしの規定を指定します。
クローズサブパスが複数存在するパスの内側/外側を判定する法則を指定します。

引数:
rule 塗りつぶしの法則

CV_FILL_RULE_WINDING  パスの方向、右回り/左回りで判断する(規定)
CV_FILL_RULE_EVEN_ODD 偶数/奇数で判断する
void CvSetLineCap ( int  cap  ) 

線の端属性を指定する

線の端属性を設定します。

canvas_cap.png

線の端タイプ

上からBUTT、ROUND、SQUARE。

引数:
cap 端属性

CV_LINE_CAP_BUTT   端なし。ぶつ切り。(規定)
CV_LINE_CAP_ROUND  線の太さが直径の半円の端。
CV_LINE_CAP_SQUARE 線の太さの正方形の半分の端。
void CvSetLineJoin ( int  join  ) 

線の接続属性の指定する

線の接続属性を設定します。

canvas_join.png

線の接続タイプ

左からMITER、ROUND、BEVEL。

引数:
join 接続属性

CV_LINE_JOIN_MITER 真っすに線を延ばして交差させる
CV_LINE_JOIN_ROUND 線の太さが直径の円弧でつなぐ
CV_LINE_JOIN_BEVEL 端の外角を直線でつなぐ
void CvSetMiterLimit ( int  limit  ) 

線の接続属性「MITER」の限界角度を設定する

線の接続属性に「MITER」を選択した場合の限界角度を設定します。
接続線の角度が、ここで指定した角度より小さい角度(より鋭角)の場合、 接続属性を「BEVEL」に置き換えて線を描きます。
例えば、30を指定した場合、30度の接続線は「MITER」で描画しますが、 29度の接続線は「BEVEL」で描画します。
初期値は約11.4度が設定されています。

引数:
limit 角度deg
int CvSetOperator ( int  op  ) 

描画属性を設定する

引数:
op 属性

CV_OPERATOR_CLEAR 
CV_OPERATOR_SOURCE
CV_OPERATOR_OVER  
CV_OPERATOR_IN    
CV_OPERATOR_OUT   
CV_OPERATOR_ATOP  
CV_OPERATOR_DEST  
CV_OPERATOR_DEST_OVER
CV_OPERATOR_DEST_IN  
CV_OPERATOR_DEST_OUT 
CV_OPERATOR_DEST_ATOP
CV_OPERATOR_XOR      
CV_OPERATOR_ADD      
CV_OPERATOR_SATURATE 
double CvSetTolerance ( double  tolerance  ) 

精度を設定する

引数:
tolerance 精度
void CvNewPath (  ) 

新しいパスを準備する

新しいパスを準備します。
この関数のコール後、カレントポイント、カレントパスは無くなります。

void CvNewSubPath (  ) 

新しいサブパスを準備する

新しいサブパスを準備します
この関数のコール後、カレントポイントは無くなります。
CvMoveTo() を使用した時も同じ効果が得られます。したがって、ほとんどの場合において この関数を使用する必要はありません。
この関数を使用すると便利な場面は、パスの先頭が円弧の時です。
円弧で始まるサブパスの描画準備を CvMoveTo() で行おうとすると円弧の描画開始位置を わざわざ計算し、その場所へ移動しなければならなくなります。
そのような場合に CvNewSubPath() を使うと簡単に開始できます。

void CvClosePath (  ) 

パスを閉じる

カレントポイントからパスの始点へ線を追加してパスを閉じます。
パスの始点とは最後に CvMoveTo() を行った点です。
カレントパスを CvStroke() を使って描画する場合は、 CvLineTo() で手動でパスを閉じる場合と CvClosePath() を使用してパスを閉じる場合とでは、結果が違ってきます。 CvLineTo() で始点に向かって線を引いた場合、始点も終点も線の「端」です。接続されていません。
カレントポイントが無い場合、この関数は何の意味もなくなります。

void CvMoveTo ( int  x,
int  y 
)

カレントポイントを移動する

新しいサブパスを準備します。
この関数を実行するとカレントポイントをx,yに移動します。

引数:
x カレントポイントX
y カレントポイントY
void CvMoveToRel ( int  dx,
int  dy 
)

カレントポイントを相対座標指定で移動する

この関数は相対座標指定タイプの CvMoveTo() です。 新しいサブパスを準備します。
この関数を実行するとカレントポイントをdx,dy分移動します。
cp=カレントポイント
CvMoveTo( cpx+dx , cpy+dy );
と等価です。

引数:
dx カレントポイント移動量X
dy カレントポイント移動量Y
void CvLineTo ( int  x,
int  y 
)

カレントパスに直線を追加する

カレントパスに直線を追加します。
直線はカレントポイントからx,y座標に引かれます。
カレントポイントがない状態でこの関数を実行すると CvMoveTo() と同じになります。 この関数を終了するとカレントポイントは(x,y)座標になります。

引数:
x 直線の終点座標X
y 直線の終点座標Y
void CvLineToRel ( int  dx,
int  dy 
)

カレントパスに直線を相対座標指定で追加する

この関数は相対座標指定タイプの CvLineTo() です。 カレントパスに直線を追加します。
直線はカレントポイントからdx,dy分移動した座標に引かれます。
cp=カレントポイント
CvLineTo( cpx+dx , cpy+dy );
と等価です。
カレントポイントが無い状態でこの関数を実行するとエラー終了となります。 この関数を正常終了するとカレントポイントは(cpx+dx,cpy+dy)座標になります。

引数:
dx 直線の終点座標X(移動量、カレントポイントからの相対で指定)
dy 直線の終点座標Y(移動量、カレントポイントからの相対で指定)
void CvCurveTo ( int  c1x,
int  c1y,
int  c2x,
int  c2y,
int  x,
int  y 
)

カレントパスに曲線を追加する

カレントパスに曲線を追加します。
カレントポイントから(x,y)座標に、2つのコントロールポイント(c1x,c1y)(c2x,c2y)を使用した曲線を引きます。
この関数を終了するとカレントポイントは(x,y)座標になります。 カレントポイントがない状態でこの関数を実行すると CvMoveTo(x,y) と同じになります。

引数:
c1x コントロールポイント1X
c1y コントロールポイント1Y
c2x コントロールポイント2X
c2y コントロールポイント2Y
x 曲線の終点座標X
y 曲線の終点座標Y
void CvCurveToRel ( int  c1dx,
int  c1dy,
int  c2dx,
int  c2dy,
int  dx,
int  dy 
)

カレントパスに曲線を相対座標指定で追加する

この関数は相対座標指定タイプの CvCurveTo() です。 cp=カレントポイント
CvCurveTo( cpx+c1x,cpy+c1y , cpx+c2x,cpy+c2y , cpx+dx,cpy+dy );
と等価です。
カレントパスに曲線を追加します。
カレントポイントから(cpx+dx,cpy+dy)座標に、2つのコントロールポイント (cpx+c1x,cpy+c1y)(cpx+c2x,cpy+c2y)を使用した曲線を引きます。
カレントポイントが無い状態でこの関数を実行するとエラー終了となります。 この関数を正常終了するとカレントポイントは(cpx+dx,cpy+dy)座標になります。

引数:
c1dx コントロールポイント1X(移動量、カレントポイントからの相対で指定)
c1dy コントロールポイント1Y(移動量、カレントポイントからの相対で指定)
c2dx コントロールポイント2X(移動量、カレントポイントからの相対で指定)
c2dy コントロールポイント2Y(移動量、カレントポイントからの相対で指定)
dx 曲線の終点座標X(移動量、カレントポイントからの相対で指定)
dy 曲線の終点座標Y(移動量、カレントポイントからの相対で指定)
void CvTextPath ( const char *  text,
int  size 
)

カレントパスに文字列パスを追加する

カレントパスに文字列textから作成されたクローズドパスを追加します。
追加されたパスを CvFill() で塗りつぶすと CvShowText(text,size) と似た結果になります。
基本的な動作は CvShowText() と同じです。 CvShowText() の説明も参照下さい。
この関数を実行するとカレントポイントは文字列の最後の文字の次の位置へ移動します。
したがって、関数を連続的に使用することが可能です。

引数:
text パスを生成する文字列
size 文字のサイズ
void CvRectangle ( int  x,
int  y,
int  w,
int  h 
)

カレントパスに矩形を追加する

カレントパスに矩形クローズドパスを追加します。
この関数はカレントポイント位置に矩形を追加します。

引数:
x 矩形左下座標X
y 矩形左下座標Y
w 矩形の幅
h 矩形の高さ
void CvCircle ( int  cx,
int  cy,
int  radius 
)

カレントパスに円形を追加する

カレントパスに円形クローズドパスを追加します。
この関数はカレントポイント位置に円形を追加します。

引数:
cx 円の中心のX座標
cy 円の中心のY座標
radius 円の半径
void CvCircleNegative ( int  cx,
int  cy,
int  radius 
)

カレントパスに円形(反時計周り)を追加する

カレントパスに円形クローズドパスを追加します。
この関数はカレントポイント位置に円形(反時計周り)を追加します。

引数:
cx 円の中心のX座標
cy 円の中心のY座標
radius 円の半径
void CvArc ( int  xc,
int  yc,
int  radius,
int  deg1,
int  deg2 
)

時計回り円弧を追加

カレントパスに円弧を追加します
弧は(xc,yc)を中心に、半径radius、開始角deg1から終了角deg2まで時計回りで描画されます。
カレントパスが存在する場合、描画された円弧はカレントパスに追加されます。
追加したくない場合はCvNewSubPath()を呼ぶことで回避できます。
角度は3時の位置が0度です。

引数:
xc 円弧の中心座標X
yc 円弧の中心座標Y
radius 半径
deg1 開始角度
deg2 終了角度
void CvArcNegative ( int  xc,
int  yc,
int  radius,
int  deg1,
int  deg2 
)

反時計回り円弧を追加

カレントパスに円弧を追加します。
弧は(xc,yc)を中心に、半径radius、開始角deg1から終了角deg2まで反時計回りで描画されます。 カレントパスが存在する場合、描画された円弧はカレントパスに追加されます。
追加したくない場合はCvNewSubPath()を呼ぶことで回避できます。 角度は3時の位置が0度です。

引数:
xc 円弧の中心座標X
yc 円弧の中心座標Y
radius 半径
deg1 開始角度
deg2 終了角度
void CvPreservePath (  ) 

パスデータの維持を指示する

輪郭 CvStroke()、塗りつぶし CvFill()、クリップ CvClip() を実行後も パスのデータを維持するように指示します。
通常、CvStroke() CvFill() CvClip() は実行後カレントのパスは消えてしまいます。
この CvPreservePath() をコールしておくとカレントのパスデータが維持されます。

void CvStroke (  ) 

輪郭線を描く

カレントのパスをカレントの色、線種、太さで輪郭線を描きます。
コマンド実行後カレントのパスデータは消えてしまいます。
パスデータを維持させたい場合は CvPreservePath() を実行前にコールします。

void CvFill (  ) 

塗りつぶす

カレントのパスをカレントの色で塗りつぶします。
コマンド実行後カレントのパスデータは消えてしまいます。
パスデータを維持させたい場合は CvPreservePath() を実行前にコールします。

void CvClip (  ) 

クリッピングする

カレントのパス領域をクリッピング領域に指定します。
クリッピング領域設定後は領域外への描画ができなくなります。

void CvResetClip (  ) 

クリッピングを解除する

クリッピングを解除します。

void CvSave (  ) 

状態を保存する

現在の全ての状態を保存します。

void CvRestore (  ) 

状態を復元する

すべての状態を CvSave() で保存した時点に戻します。

void CvTransformTranslate ( int  tx,
int  ty 
)

変換-平行移動

変形パラメータに平行移動効果を追加します。
(原点が指定した座標に移動します。)
以降の描画に影響を与えます。既に描かれているものには影響しません。
変形効果は現在の値に追加されます。
新たに効果を与える場合はCvTransformReset()で効果をリセットしてください。

引数:
tx X方向移動量
ty Y方向移動量
void CvTransformScale ( double  sx,
double  sy 
)

変換-拡大縮小

変形パラメータに拡大縮小効果を追加します。
以降の描画に影響を与えます。既に描かれているものには影響しません。
変形効果は現在の値に追加されます。
新たに効果を与える場合はCvTransformReset()で効果をリセットしてください。

引数:
sx X方向拡大縮小係数
sy Y方向拡大縮小係数
void CvTransformRotate ( int  deg  ) 

変換-回転

変形パラメータに回転効果を追加します。
原点を中心に時計回りに回転します。 以降の描画に影響を与えます。既に描かれているものには影響しません。
変形効果は現在の値に追加されます。
新たに効果を与える場合はCvTransformReset()で効果をリセットしてください。

引数:
deg 回転角度
void CvTransformSlant ( int  degx,
int  degy 
)

変換-傾斜

変形パラメータに傾斜効果を追加します。
以降の描画に影響を与えます。既に描かれているものには影響しません。
変形効果は現在の値に追加されます。
新たに効果を与える場合はCvTransformReset()で効果をリセットしてください。

引数:
degx X方向傾斜角
degy Y方向傾斜角
void CvTransformMatrix ( double  xx,
double  yx,
double  xy,
double  yy,
double  x0,
double  y0 
)

変換マトリックス

変換マトリックスを使用して変形パラメータを設定します。
以降の描画に影響を与えます。既に描かれているものには影響しません。
変形効果は現在の値に追加されます。
新たに効果を与える場合はCvTransformReset()で効果をリセットしてください。

引数:
xx アフィン変換係数
yx アフィン変換係数
xy アフィン変換係数
yy アフィン変換係数
x0 アフィン変換係数
y0 アフィン変換係数
アフィン変換(3×3のマトリックス)
    xx ,    xy ,    x0
    yx ,    yy ,    y0
     0 ,     0 ,     1

移動
     1 ,     0 , X移動量
     0 ,     1 , Y移動量
     0 ,     0 ,     1

拡大縮小
 倍率X,     0 ,     0
     0 , 倍率Y,     0
     0 ,     0 ,     1

回転 d=角度
 cos(d),-sin(d),     0
 sin(d), cos(d),     0
     0 ,     0 ,     1
void CvTransformGetMatrix ( double &  xx,
double &  yx,
double &  xy,
double &  yy,
double &  x0,
double &  y0 
)

変換マトリックスの取得

現在の変換マトリックスを取得します。

引数:
xx アフィン変換係数
yx アフィン変換係数
xy アフィン変換係数
yy アフィン変換係数
x0 アフィン変換係数
y0 アフィン変換係数
アフィン変換(3×3のマトリックス)
    xx ,    xy ,    x0
    yx ,    yy ,    y0
     0 ,     0 ,     1
void CvTransformGetMatrixInvert ( double &  xx,
double &  yx,
double &  xy,
double &  yy,
double &  x0,
double &  y0 
)

変換マトリックスの取得

現在の変換マトリックスを取得します。

引数:
xx アフィン変換係数
yx アフィン変換係数
xy アフィン変換係数
yy アフィン変換係数
x0 アフィン変換係数
y0 アフィン変換係数
アフィン変換(3×3のマトリックス)
    xx ,    xy ,    x0
    yx ,    yy ,    y0
     0 ,     0 ,     1
void CvTransformReset (  ) 

変形効果のリセット

変形パラメータをリセットします。
全ての効果が初期化されます。

void CvTransformDo ( SGRect rect  ) 

矩形の座標を現在の変換マトリックスで変換します。

パラメータrectで与えられた矩形の4点座標を現在の変換マトリックスで変換します。

void CvTransformDo ( int &  x,
int &  y 
)

座標を現在の変換マトリックスで変換します。

パラメータ(x,y)で与えられた座標を現在の変換マトリックスで変換します。

void CvSelectFont ( const char *  face,
int  slant,
int  bold 
)

書体選択

書体を選択します。
この関数で選択された書体は CvTextPath() CvShowText() CvGetTextExtents() で使用されます。

引数:
face フェース名を指定します
slant 斜体文字 FALSE:通常 TRUE:斜体
bold 太字 FALSE:通常 TRUE:太字
void CvShowText ( const char *  text,
int  size 
)

文字列を描画する

canvas_vuggy.png

文字の描画

カレントポイント位置に文字列を描画します。その位置が文字のベースライン、左端になります。
カレントの書体、カレントの色、カレントの変形パラメータを適用し文字列を描画します。
カレントポイントは文字の描画が終了するとベースライン上を文字の幅分右へ移動します。

引数:
text 描画する文字列
size 文字のサイズ
void CvGetTextExtents ( const char *  text,
int  size,
int &  ascender,
int &  width,
int &  height 
)

文字列を描画するのに必要なサイズを取得する

text文字列をsizeの大きさで描画する場合に必要な領域を得ます。

引数:
text 文字列
size 文字のサイズ
ascender ベースラインから上のサイズ(高さ)
width 文字列全体の幅
height 文字列全体の高さ

このクラスの説明は次のファイルから生成されました:

PlusG リファレンスマニュアル Ver 2.0.0