建築資料館の掲示板で以下のような質問がありました。
DOS版のJW_CADは知りませんけれども、まぁ、端点を共有する線を検索して面取りや丸めを施す、というのは外部変形で出来そうな気はします。重複していたらどうするのかとか、T字十字の時の考慮するしないとかあるかもしれませんけれど。でもまぁ、単純な四角を描いてから面取り・丸め、という手法と、面取り・丸め付きの四角を描くって手法があるとして、後者のほうは、marusanさんのサイトのブログで見たのが一番早かったような(私の場合)。
全然関係無いですけれど、昔作ったツール「fg」(ドローソフトみたいなソフト)では、R付き四角形みたいなコマンドを用意していて、結構多用していたような気はします。
そういう訳で取りあえず、Script! で面取り/丸め付きの四角形の作図を考えてみます。まずは単純な1つの四角状態から。

基準点を左下にして、面取り付き

基準点を右上にして、丸め付き

次に、2重で作図するようにします。間隔値を指定するようにします。

面取りしました。

丸めしました。

DOSjwcでは単独柱4角など一括面取可能だったような気がするのですが、jwwではできないでしょうか?http://www.ath-j.com/cbbs2/cbbs.cgi?mode=all&namber=38775&type=0&space=0&no=1
DOS版のJW_CADは知りませんけれども、まぁ、端点を共有する線を検索して面取りや丸めを施す、というのは外部変形で出来そうな気はします。重複していたらどうするのかとか、T字十字の時の考慮するしないとかあるかもしれませんけれど。でもまぁ、単純な四角を描いてから面取り・丸め、という手法と、面取り・丸め付きの四角を描くって手法があるとして、後者のほうは、marusanさんのサイトのブログで見たのが一番早かったような(私の場合)。
全然関係無いですけれど、昔作ったツール「fg」(ドローソフトみたいなソフト)では、R付き四角形みたいなコマンドを用意していて、結構多用していたような気はします。
そういう訳で取りあえず、Script! で面取り/丸め付きの四角形の作図を考えてみます。まずは単純な1つの四角状態から。
// 面取り/丸め付き四角形の作図01実行します。標準状態。
#LIST
base = "左上","中上","右上","左中","中中","右中","左下","中下","右下"
marume = "なし","面取り","丸め"
#VAR
col = 1 ;*線色
typ = 1 ;*線種
wid = 0 ;*線幅
sx =100 ;*幅
sy =100 ;*高さ
base = 中中 ;*基準点
marume = なし ;*面取り/丸め指定
mm = 10 ;*面取量/丸めR
ib
kx
ky
im
w1
w2
w3
w4
w5
#DRAW
PEN col,typ,wid
CHKITEM ib,base,base
#IF (ib == 0)
CAL kx = sx/2
CAL ky =-sy/2
#END
#IF (ib == 1)
CAL kx = 0
CAL ky =-sy/2
#END
#IF (ib == 2)
CAL kx =-sx/2
CAL ky =-sy/2
#END
#IF (ib == 3)
CAL kx = sx/2
CAL ky = 0
#END
#IF (ib == 4)
CAL kx = 0
CAL ky = 0
#END
#IF (ib == 5)
CAL kx =-sx/2
CAL ky = 0
#END
#IF (ib == 6)
CAL kx = sx/2
CAL ky = sy/2
#END
#IF (ib == 7)
CAL kx = 0
CAL ky = sy/2
#END
#IF (ib == 8)
CAL kx =-sx/2
CAL ky = sy/2
#END
CHKITEM im,marume,marume
#IF (im != 0)
#GOTO *N1
#END
// ----- 四角 -----
CAL w1 = kx - sx/2
CAL w2 = ky - sy/2
CAL w3 = kx + sx/2
CAL w4 = ky + sy/2
BOX w1,w2,w3,w4
#EXIT
// ----- 面取り・丸め付き四角 -----
*N1
// --- 共通部分 ---
CAL w1 = kx - sx/2 + mm
CAL w2 = ky + sy/2
CAL w3 = kx + sx/2 - mm
CAL w4 = w2
LINE w1,w2,w3,w4 // 上線
CAL w2 = ky - sy/2
CAL w4 = w2
LINE w1,w2,w3,w4 // 下線
CAL w1 = kx - sx/2
CAL w2 = ky + sy/2 - mm
CAL w3 = w1
CAL w4 = ky - sy/2 + mm
LINE w1,w2,w3,w4 // 左線
CAL w1 = kx + sx/2
CAL w3 = w1
LINE w1,w2,w3,w4 // 右線
#IF (im == 2)
#GOTO *N2
#END
// --- 面取り部 ---
CAL w1 = kx - sx/2
CAL w2 = ky + sy/2 - mm
CAL w3 = kx - sx/2 + mm
CAL w4 = ky + sy/2
LINE w1,w2,w3,w4 // 左上
CAL w1 = kx + sx/2 - mm
CAL w2 = ky + sy/2
CAL w3 = kx + sx/2
CAL w4 = ky + sy/2 - mm
LINE w1,w2,w3,w4 // 右上
CAL w1 = kx - sx/2
CAL w2 = ky - sy/2 + mm
CAL w3 = kx - sx/2 + mm
CAL w4 = ky - sy/2
LINE w1,w2,w3,w4 // 左下
CAL w1 = kx + sx/2 - mm
CAL w2 = ky - sy/2
CAL w3 = kx + sx/2
CAL w4 = ky - sy/2 + mm
LINE w1,w2,w3,w4 // 右下
#EXIT
// --- 丸め部 ---
*N2
CAL w1 = kx - sx/2 + mm
CAL w2 = ky + sy/2 - mm
CAL w3 = mm
CAL w4 = 90/180*PI
CAL w5 = 180/180*PI
ARC w1,w2,w3,w4,w5 // 左上
CAL w1 = kx + sx/2 - mm
CAL w2 = ky + sy/2 - mm
CAL w3 = mm
CAL w4 = 0/180*PI
CAL w5 = 90/180*PI
ARC w1,w2,w3,w4,w5 // 右上
CAL w1 = kx - sx/2 + mm
CAL w2 = ky - sy/2 + mm
CAL w3 = mm
CAL w4 = 180/180*PI
CAL w5 = 270/180*PI
ARC w1,w2,w3,w4,w5 // 左下
CAL w1 = kx + sx/2 - mm
CAL w2 = ky - sy/2 + mm
CAL w3 = mm
CAL w4 = 270/180*PI
CAL w5 = 0
ARC w1,w2,w3,w4,w5 // 右下

基準点を左下にして、面取り付き

基準点を右上にして、丸め付き

次に、2重で作図するようにします。間隔値を指定するようにします。
// 面取り/丸め付き四角形の作図02これを実行しますと以下のようになります。
// ※外側と内側の面取量・丸めRは同じ値のバージョン
#LIST
base = "左上","中上","右上","左中","中中","右中","左下","中下","右下"
marume = "なし","面取り","丸め"
#VAR
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
#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 w1 = kx - sx/2
CAL w2 = ky - sy/2
CAL w3 = kx + sx/2
CAL w4 = ky + sy/2
BOX w1,w2,w3,w4
#IF (ds <> 0)
CAL w1 = kx - sx/2 - ds
CAL w2 = ky - sy/2 - ds
CAL w3 = kx + sx/2 + ds
CAL w4 = ky + sy/2 + ds
BOX w1,w2,w3,w4
#END
#EXIT
// ----- 面取り・丸め付き四角 -----
*N1
// --- 共通部分 ---
CAL w1 = kx - sx/2 + mm
CAL w2 = ky + sy/2
CAL w3 = kx + sx/2 - mm
CAL w4 = w2
LINE w1,w2,w3,w4 // 上線
CAL w2 = ky - sy/2
CAL w4 = w2
LINE w1,w2,w3,w4 // 下線
CAL w1 = kx - sx/2
CAL w2 = ky + sy/2 - mm
CAL w3 = w1
CAL w4 = ky - sy/2 + mm
LINE w1,w2,w3,w4 // 左線
CAL w1 = kx + sx/2
CAL w3 = w1
LINE w1,w2,w3,w4 // 右線
#IF (ds <> 0)
CAL w1 = kx - sx/2 - ds + mm
CAL w2 = ky + sy/2 + ds
CAL w3 = kx + sx/2 + ds - mm
CAL w4 = w2
LINE w1,w2,w3,w4 // 上線
CAL w2 = ky - sy/2 - ds
CAL w4 = w2
LINE w1,w2,w3,w4 // 下線
CAL w1 = kx - sx/2 - ds
CAL w2 = ky + sy/2 + ds - mm
CAL w3 = w1
CAL w4 = ky - sy/2 - ds + mm
LINE w1,w2,w3,w4 // 左線
CAL w1 = kx + sx/2 + ds
CAL w3 = w1
LINE w1,w2,w3,w4 // 右線
#END
#IF (im == 2)
#GOTO *N2
#END
// --- 面取り部 ---
CAL w1 = kx - sx/2
CAL w2 = ky + sy/2 - mm
CAL w3 = kx - sx/2 + mm
CAL w4 = ky + sy/2
LINE w1,w2,w3,w4 // 左上
CAL w1 = kx + sx/2 - mm
CAL w2 = ky + sy/2
CAL w3 = kx + sx/2
CAL w4 = ky + sy/2 - mm
LINE w1,w2,w3,w4 // 右上
CAL w1 = kx - sx/2
CAL w2 = ky - sy/2 + mm
CAL w3 = kx - sx/2 + mm
CAL w4 = ky - sy/2
LINE w1,w2,w3,w4 // 左下
CAL w1 = kx + sx/2 - mm
CAL w2 = ky - sy/2
CAL w3 = kx + sx/2
CAL w4 = ky - sy/2 + mm
LINE w1,w2,w3,w4 // 右下
#IF (ds <> 0)
CAL w1 = kx - sx/2 - ds
CAL w2 = ky + sy/2 + ds - mm
CAL w3 = kx - sx/2 - ds + mm
CAL w4 = ky + sy/2 + ds
LINE w1,w2,w3,w4 // 左上
CAL w1 = kx + sx/2 + ds - mm
CAL w2 = ky + sy/2 + ds
CAL w3 = kx + sx/2 + ds
CAL w4 = ky + sy/2 + ds - mm
LINE w1,w2,w3,w4 // 右上
CAL w1 = kx - sx/2 - ds
CAL w2 = ky - sy/2 - ds + mm
CAL w3 = kx - sx/2 - ds + mm
CAL w4 = ky - sy/2 - ds
LINE w1,w2,w3,w4 // 左下
CAL w1 = kx + sx/2 + ds - mm
CAL w2 = ky - sy/2 - ds
CAL w3 = kx + sx/2 + ds
CAL w4 = ky - sy/2 - ds + mm
LINE w1,w2,w3,w4 // 右下
#END
#EXIT
// --- 丸め部 ---
*N2
CAL w1 = kx - sx/2 + mm
CAL w2 = ky + sy/2 - mm
CAL w3 = mm
CAL w4 = 90/180*PI
CAL w5 = 180/180*PI
ARC w1,w2,w3,w4,w5 // 左上
CAL w1 = kx + sx/2 - mm
CAL w2 = ky + sy/2 - mm
CAL w3 = mm
CAL w4 = 0/180*PI
CAL w5 = 90/180*PI
ARC w1,w2,w3,w4,w5 // 右上
CAL w1 = kx - sx/2 + mm
CAL w2 = ky - sy/2 + mm
CAL w3 = mm
CAL w4 = 180/180*PI
CAL w5 = 270/180*PI
ARC w1,w2,w3,w4,w5 // 左下
CAL w1 = kx + sx/2 - mm
CAL w2 = ky - sy/2 + mm
CAL w3 = mm
CAL w4 = 270/180*PI
CAL w5 = 0
ARC w1,w2,w3,w4,w5 // 右下
#IF (ds <> 0)
CAL w1 = kx - sx/2 - ds + mm
CAL w2 = ky + sy/2 + ds - mm
CAL w3 = mm
CAL w4 = 90/180*PI
CAL w5 = 180/180*PI
ARC w1,w2,w3,w4,w5 // 左上
CAL w1 = kx + sx/2 + ds - mm
CAL w2 = ky + sy/2 + ds - mm
CAL w3 = mm
CAL w4 = 0/180*PI
CAL w5 = 90/180*PI
ARC w1,w2,w3,w4,w5 // 右上
CAL w1 = kx - sx/2 - ds + mm
CAL w2 = ky - sy/2 - ds + mm
CAL w3 = mm
CAL w4 = 180/180*PI
CAL w5 = 270/180*PI
ARC w1,w2,w3,w4,w5 // 左下
CAL w1 = kx + sx/2 + ds - mm
CAL w2 = ky - sy/2 - ds + mm
CAL w3 = mm
CAL w4 = 270/180*PI
CAL w5 = 0
ARC w1,w2,w3,w4,w5 // 右下
#END

面取りしました。

丸めしました。
