続きです。
面取り/丸め付き四角形の作図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
実行しますと下記のような画面が表示されます。
20090225d

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

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