Example #1
0
// 塗り潰し円弧(回転、拡大縮小つき)
// center_x, center_y  円の中心位置
// radius_x, radius_y  半径(横と縦)
// start_rad, end_rad  開始・終了角度
// division            円の分割数(数値が大きいと滑らかな円になる)
// color               色
// angle_rad           回転角度(ラジアン)
// scaling             横、縦の拡大縮小率
// origin              矩形の原点位置
void drawFillArc(const float center_x, const float center_y,
                 const float radius_x, const float radius_y,
                 const float start_rad, const float end_rad,
                 const int division,
                 const Color& color,
                 const float angle_rad,
                 const Vec2f& scaling,
                 const Vec2f& origin) {

  // 回転、拡大縮小の行列を生成
  auto matrix = transformMatrix2D(angle_rad,
                                  Vec3f(center_x, center_y, 0.0f),
                                  Vec3f(scaling.x(), scaling.y(), 1.0f));

  // 行列をOpenGLに設定
  glPushMatrix();
  glMultMatrixf(matrix.data());

  // 描画
  drawFillArc(-origin.x(), -origin.y(),
              radius_x, radius_y,
              start_rad, end_rad,
              division,
              color);

  // 行列を元に戻す
  glPopMatrix();
}
Example #2
0
void drawPointDetail(Display* dpy, Drawable w, GC gc, XPoint* up, int num){
    int i = 0;
    for(; i < num; i++){
        XPoint p = up[i];
        char str[20];
        sprintf(str, "(%d) x:%hd y:%hd",i ,p.x, p.y);
        if (p.x < WIDTH / 2) {
            XDrawString(dpy, w, gc, p.x, p.y-3, str, (int)strlen(str));
        } else {
            XDrawString(dpy, w, gc, p.x-25, p.y-3, str, (int)strlen(str));
        }
        drawFillArc(dpy, w, gc, p.x, p.y, 6);
    }
}