続きです。
面取り/丸め付き四角形の作図03を修正しソリッド図形の作図を追加します。前回同様に各点座標を計算させてから作図させます。丸めの箇所は、同心円状となりますので円環ソリッド図形がそのまま利用出来ます。但し、間隔値がマイナスになる場合(内側に指定する場合)、更に内側の円弧が作図できない場合は円環ソリッドではなく扇形ソリッドを利用しないといけない、という事に注意します。

面取りの指定を行い実行します。

丸めの指定を行い実行します。

面取り/丸め付き四角形の作図03を修正しソリッド図形の作図を追加します。前回同様に各点座標を計算させてから作図させます。丸めの箇所は、同心円状となりますので円環ソリッド図形がそのまま利用出来ます。但し、間隔値がマイナスになる場合(内側に指定する場合)、更に内側の円弧が作図できない場合は円環ソリッドではなく扇形ソリッドを利用しないといけない、という事に注意します。
// 面取り/丸め付き四角形の作図07実行しますと下記のような画面が表示されます。
// 面取り/丸め付き四角形の作図03改 ソリッド付
// ※追加した面取量・丸めRは間隔値分増減するバージョン
#LIST
base = "左上","中上","右上","左中","中中","右中","左下","中下","右下"
marume = "なし","面取り","丸め"
#VAR
scol= 0 ;*ソリッド任意色
col = 1 ;*線色
typ = 1 ;*線種
wid = 0 ;*線幅
sx =100 ;*幅
sy =100 ;*高さ
ds = 10 ;*間隔
base = 中中 ;*基準点
marume = なし ;*面取り/丸め指定
mm = 10 ;*面取量/丸めR
ib
gx
gy
kx
ky
im
w1
w2
w3
w4
w5
w6
px1
py1
px2
py2
px3
py3
px4
py4
px5
py5
px6
py6
px7
py7
px8
py8
qx1
qy1
qx2
qy2
qx3
qy3
qx4
qy4
qx5
qy5
qx6
qy6
qx7
qy7
qx8
qy8
#DRAW
PEN col,typ,wid
CAL gx = sx // gx,gyは外側サイズ
CAL gy = sy
#IF (ds > 0)
CAL gx = sx + ds*2
CAL gy = sy + ds*2
#END
CHKITEM ib,base,base
#IF (ib == 0)
CAL kx = gx/2
CAL ky =-gy/2
#END
#IF (ib == 1)
CAL kx = 0
CAL ky =-gy/2
#END
#IF (ib == 2)
CAL kx =-gx/2
CAL ky =-gy/2
#END
#IF (ib == 3)
CAL kx = gx/2
CAL ky = 0
#END
#IF (ib == 4)
CAL kx = 0
CAL ky = 0
#END
#IF (ib == 5)
CAL kx =-gx/2
CAL ky = 0
#END
#IF (ib == 6)
CAL kx = gx/2
CAL ky = gy/2
#END
#IF (ib == 7)
CAL kx = 0
CAL ky = gy/2
#END
#IF (ib == 8)
CAL kx =-gx/2
CAL ky = gy/2
#END
CHKITEM im,marume,marume
#IF (im != 0)
#GOTO *N1
#END
// ----- 四角 -----
CAL px1 = kx - sx/2
CAL py1 = ky - sy/2
CAL px2 = kx + sx/2
CAL py2 = ky + sy/2
CAL qx1 = kx - sx/2 - ds
CAL qy1 = ky - sy/2 - ds
CAL qx2 = kx + sx/2 + ds
CAL qy2 = ky + sy/2 + ds
#IF (ds == 0)
4SOLID scol, px1,py1, px1,py2, px2,py2, px2,py1
BOX px1,py1,px2,py2
#ELSE
4SOLID scol, px1,py1, px1,py2, qx1,qy2, qx1,qy1
4SOLID scol, px1,py2, px2,py2, qx2,qy2, qx1,qy2
4SOLID scol, px2,py2, px2,py1, qx2,qy1, qx2,qy2
4SOLID scol, px2,py1, px1,py1, qx1,qy1, qx2,qy1
BOX px1,py1,px2,py2
BOX qx1,qy1,qx2,qy2
#END
#EXIT
// ----- 面取り・丸め付き四角 -----
*N1
// --- 共通部分 ---
CAL px1 = kx - sx/2 + mm
CAL py1 = ky - sy/2
CAL px2 = kx - sx/2
CAL py2 = ky - sy/2 + mm
CAL px3 = kx - sx/2
CAL py3 = ky + sy/2 - mm
CAL px4 = kx - sx/2 + mm
CAL py4 = ky + sy/2
CAL px5 = kx + sx/2 - mm
CAL py5 = ky + sy/2
CAL px6 = kx + sx/2
CAL py6 = ky + sy/2 - mm
CAL px7 = kx + sx/2
CAL py7 = ky - sy/2 + mm
CAL px8 = kx + sx/2 - mm
CAL py8 = ky - sy/2
CAL qx1 = kx - sx/2 + mm
CAL qy1 = ky - sy/2 - ds
CAL qx2 = kx - sx/2 - ds
CAL qy2 = ky - sy/2 + mm
CAL qx3 = kx - sx/2 - ds
CAL qy3 = ky + sy/2 - mm
CAL qx4 = kx - sx/2 + mm
CAL qy4 = ky + sy/2 + ds
CAL qx5 = kx + sx/2 - mm
CAL qy5 = ky + sy/2 + ds
CAL qx6 = kx + sx/2 + ds
CAL qy6 = ky + sy/2 - mm
CAL qx7 = kx + sx/2 + ds
CAL qy7 = ky - sy/2 + mm
CAL qx8 = kx + sx/2 - mm
CAL qy8 = ky - sy/2 - ds
#IF (im == 2)
#GOTO *N2
#END
// ----- 面取り付き四角 -----
#IF (ds == 0)
4SOLID scol, px1,py1, px2,py2, px3,py3, px4,py4
4SOLID scol, px1,py1, px4,py4, px5,py5, px8,py8
4SOLID scol, px5,py5, px6,py6, px7,py7, px8,py8
#ELSE
4SOLID scol, px1,py1, px2,py2, qx2,qy2, qx1,qy1
4SOLID scol, px2,py2, px3,py3, qx3,qy3, qx2,qy2
4SOLID scol, px3,py3, px4,py4, qx4,qy4, qx3,qy3
4SOLID scol, px4,py4, px5,py5, qx5,qy5, qx4,qy4
4SOLID scol, px5,py5, px6,py6, qx6,qy6, qx5,qy5
4SOLID scol, px6,py6, px7,py7, qx7,qy7, qx6,qy6
4SOLID scol, px7,py7, px8,py8, qx8,qy8, qx7,qy7
4SOLID scol, px8,py8, px1,py1, qx1,qy1, qx8,qy8
#END
LINE px1,py1, px2,py2
LINE px2,py2, px3,py3
LINE px3,py3, px4,py4
LINE px4,py4, px5,py5
LINE px5,py5, px6,py6
LINE px6,py6, px7,py7
LINE px7,py7, px8,py8
LINE px8,py8, px1,py1
#IF (ds != 0)
LINE qx1,qy1, qx2,qy2
LINE qx2,qy2, qx3,qy3
LINE qx3,qy3, qx4,qy4
LINE qx4,qy4, qx5,qy5
LINE qx5,qy5, qx6,qy6
LINE qx6,qy6, qx7,qy7
LINE qx7,qy7, qx8,qy8
LINE qx8,qy8, qx1,qy1
#END
#EXIT
// ----- 丸め付き四角 -----
*N2
CAL w1 = 0
CAL w2 = 0.5*PI
CAL w3 = PI
CAL w4 = 1.5*PI
CAL w5 = mm
CAL w6 = mm + ds
#IF (ds == 0)
4SOLID scol, px1,py1, px2,py2, px3,py3, px4,py4
4SOLID scol, px1,py1, px4,py4, px5,py5, px8,py8
4SOLID scol, px5,py5, px6,py6, px7,py7, px8,py8
YSOLID scol, px1,py2, w5,w5,0,w3,w4
YSOLID scol, px4,py3, w5,w5,0,w2,w3
YSOLID scol, px5,py6, w5,w5,0,w1,w2
YSOLID scol, px8,py7, w5,w5,0,w4,w1
#ELSE
4SOLID scol, px2,py2, px3,py3, qx3,qy3, qx2,qy2
4SOLID scol, px4,py4, px5,py5, qx5,qy5, qx4,qy4
4SOLID scol, px6,py6, px7,py7, qx7,qy7, qx6,qy6
4SOLID scol, px8,py8, px1,py1, qx1,qy1, qx8,qy8
//
#IF (ds > 0)
BSOLID scol, px1,py2, w6,w6,0, w3,w4, w5
BSOLID scol, px4,py3, w6,w6,0, w2,w3, w5
BSOLID scol, px5,py6, w6,w6,0, w1,w2, w5
BSOLID scol, px8,py7, w6,w6,0, w4,w1, w5
#ELSE
#IF (w6 > 0)
BSOLID scol, px1,py2, w5,w5,0, w3,w4, w6
BSOLID scol, px4,py3, w5,w5,0, w2,w3, w6
BSOLID scol, px5,py6, w5,w5,0, w1,w2, w6
BSOLID scol, px8,py7, w5,w5,0, w4,w1, w6
#ELSE
PSOLID scol, px1,py2, w5,w5,0, w3,w4
PSOLID scol, px4,py3, w5,w5,0, w2,w3
PSOLID scol, px5,py6, w5,w5,0, w1,w2
PSOLID scol, px8,py7, w5,w5,0, w4,w1
#END
#END
#END
LINE px2,py2, px3,py3
LINE px4,py4, px5,py5
LINE px6,py6, px7,py7
LINE px8,py8, px1,py1
ARC px1,py2, w5,w3,w4
ARC px4,py3, w5,w2,w3
ARC px5,py6, w5,w1,w2
ARC px8,py7, w5,w4,w1
#IF (ds != 0)
LINE qx2,qy2, qx3,qy3
LINE qx4,qy4, qx5,qy5
LINE qx6,qy6, qx7,qy7
LINE qx8,qy8, qx1,qy1
ARC px1,py2, w6,w3,w4
ARC px4,py3, w6,w2,w3
ARC px5,py6, w6,w1,w2
ARC px8,py7, w6,w4,w1
#END

面取りの指定を行い実行します。

丸めの指定を行い実行します。
