// 塗り潰し円弧(回転、拡大縮小つき) // 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(); }
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); } }