こんにちは、A.Cです。
グラフィックスパス機能を使って
二つの円弧とそれをつなぐ直線で無理やりやってみましたけどどうでしょうか。
#include "a2d.hsp"
#module
#func GdipCreatePath "GdipCreatePath" int,int
#func GdipDeletePath "GdipDeletePath" int
#func GdipClosePathFigures "GdipClosePathFigures" int
#func GdipSetPathFillMode "GdipSetPathFillMode" int,int
#func GdipFillPath "GdipFillPath" int,int,int
#func GdipAddPathLine "GdipAddPathLine" int,float,float,float,float
#func GdipAddPathArc "GdipAddPathArc" int,float,float,float,float,float,float
#func GdipGetPenWidth "GdipGetPenWidth" int,int
#deffunc alDrawArc2 int p1, int p2, int p3, int p4, double p5, double p6
if imgValid@a2d{
;線の太さを取得
GdipGetPenWidth imgPen@a2d,varptr(ff)
f=todouble(ff)
;点の位置取得用変数
rw1=0.5*(p3+f)
rh1=0.5*(p4+f)
rw2=0.5*(p3-f)
rh2=0.5*(p4-f)
;パス作成
GdipCreatePath 0,varptr(path)
;円弧2つと、それをつなぐ直線のパス
GdipAddPathLine path,rw1*cos(m_pi*p5/180)+p1+p3/2,rh1*sin(m_pi*p5/180)+p2+p4/2,rw2*cos(m_pi*p5/180)+p1+p3/2,rh2*sin(m_pi*p5/180)+p2+p4/2
GdipAddPathArc path,1.0*p1+0.5*f,1.0*p2+0.5*f,1.0*p3-f,1.0*p4-f,p5,p6
GdipAddPathArc path,1.0*p1-0.5*f,1.0*p2-0.5*f,1.0*p3+f,1.0*p4+f,p5,p6
GdipAddPathLine path,rw1*cos(m_pi*(p5+p6)/180)+p1+p3/2,rh1*sin(m_pi*(p5+p6)/180)+p2+p4/2,rw2*cos(m_pi*(p5+p6)/180)+p1+p3/2,rh2*sin(m_pi*(p5+p6)/180)+p2+p4/2
;完成
GdipClosePathFigures path
;塗りつぶし
GdipFillPath imgGraphics@a2d, imgBrush@a2d, path
GdipDeletePath path
return 0
}
return -1
#defcfunc todouble int p1
temp = 0.0
lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000)
lpoke temp, 0, p1 << 29
return temp
#global
; 仮想イメージ 0 を作成
alCreateImage 0, 640, 480
if stat = -1 : dialog "GDI+ を初期化できませんでした。" : end
d = 600.0 // 半径
// s0=1.5にしても、200以下ぐらいにするとズレる
f = d*0.9 // 太さ
px = -d/2 + 20
py = -d/2 + 20
r0 = 0.0 // 開始角度
r1 = 90.0 // 終了角度 この条件なので端部は水平垂直になるはず!
s0 = 0.0 // 描画角度を延長
// s0 = 1.5 度にすると綺麗に水平垂直になる
r0 -= s0
r1 += s0*2
// 目安線
alColor 0, 0,0, 255
alPenWidth 1
alDrawLine px+d/2,py+d/2, px+d*2,py+d/2
alDrawLine px+d/2,py+d/2, px+d/2,py+d*2
// 円弧
alColor 255, 0,0, 127
alPenWidth f
alDrawArc2 px,py, d,d, r0,r1
alCopyImageToScreen 0, 0
redraw
円弧をつなぐ直線の座標計算はもう少しスマートな式にできそうですけど
頭がこんがらがってきたのでギブです(笑