AFsoft World

AF日記。 コンピュータ・CAD・漫画・アニメ・ゲーム・スポーツ等についてのたわいもない話、などなど。

【Script!】

[JWW] 三角形の作図・・・

Jw_cad作者さんサイトの掲示板で以下な発言がありました
いつもお世話になっており 感謝しております。
二つの質問をさせていただきます。

1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。
 ○ □ のコマンドはあるのに三角はないです。
 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。

2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、
 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。

1>
三角といっても、正三角形、二等辺三角形、直角三角形、というお決まり形状と、1辺と2角、2辺と1角、3辺、のどのパターンでの入力なのか、作図基準点はどこなのか(3頂点のどれか、重心、外心、内心、辺上の点)、傾き角度の指定、考えれば色々なパターンがありすぎるので、1コマンドとして収束するのが難しいのでしょう。
多分。

軸角を指定して(不要なら省略可)、長方形を描いて、対角線を描いて、不要な2つの線を消す、としても、5ステップ(軸角指定しない場合は4ステップ)必要なわけですが、 それでOKなの?

それでOKなら、あのさ〜

線コマンドで、水平・垂直にチェックを入れて、横線書いて、縦線書いて、先のチェックを外して、斜め線を描けば、3ステップで描けるんじゃないの? つまり、御自身で最初から書いてる「1本ずつ線を描く」って方法ですけども、御自身で書かれた方法のほうが手数は少ないんだけど。 手数としては多くなってるのに、OKなの?

よくわかりません。

手数を減らしたいということなら、建具でファイナルアンサーなんじゃないだろうか? あるいは、それ用の外部変形を利用するか、でしょうか?

うちの「Script!」なら
// 直角三角形
#VAR
 L1 = 100  ;*底辺の長さ
 L2 = 50  ;*高さの長さ
#DRAW
 LINE 0,0,L1,0
 LINE L1,0,L1,L2
 LINE L1,L2,0,0
みたいな感じ。
Script!で動かして、2辺の長さを入力して[実行]して、[JWWクリップボード転送]して、Jw_cad で [貼付] みたいな感じかな。

2>
コマンドを改造する事は出来ないので、その表計算のコマンドのコントロールバー上に [√ A^2+B^2] みたいなボタンをくっつける事は出来ません。 まぁこれも、2つの文字を選択して、計算させる外部変形を作って利用する、って事になるかもしれませんが、三角形が作図されているんであれば、斜線の長さを測定して記入するのが早いでしょうね〜 たぶん。

まぁ、「とかを」 って書かれているんで、その、それ以外の内容については、それに応じた手法を取る必要があると思いますが、まぁ、質問者本人がエクセルを使うって言ってるのなら、それでいいんじゃない?って気はする。

超久しぶりに Script! した

建築フォーラムの会議室にて。
// レールの作図
// 
#VAR
 rw = 50   ;*レール幅
 rd = 1000  ;*レール間隔
 ml = 2000  ;*枕木長さ
 mw = 100   ;*枕木幅
 md = 500   ;*枕木間隔
 n = 10    ;*枕木の数
 i
 x1
 y1
 x2
 y2
 
#DRAW
 // レールの作図
 LAYER 0
 CAL i = 0
 CAL y1 = 0
 #WHILE (i < (n+1))
  CAL x1 = -rd/2-rw
  CAL x2 = x1
  CAL y2 = y1 + md
  LINE x1,y1,x2,y2
  CAL x1 = -rd/2
  CAL x2 = x1
  LINE x1,y1,x2,y2
  CAL x1 = rd/2
  CAL x2 = x1
  LINE x1,y1,x2,y2
  CAL x1 = rd/2+rw
  CAL x2 = x1
  LINE x1,y1,x2,y2
  CAL y1 = y1 + md + mw
  CAL i = i + 1
 #END
 // 枕木の作図
 LAYER 1
 CAL i = 0
 CAL y1 = md
 #WHILE (i < n)
  CAL x1 = -ml/2
  CAL x2 = ml/2
  CAL y2 = y1 + mw
  BOX x1,y1,x2,y2
  CAL y1 = y1 + mw + md
  CAL i = i + 1
 #END

これを[実行]して動かして、[JWWクリップボード転送]をして、Jw_cad にて[貼付]をすると、下図のような図が出来上がり〜
20150120a
超久しぶりすぎて、書き方をすっかり忘れてる・・・

飾り罫線・・・

Jw_cad作者さんのサイトの掲示板で以下のような質問がありました
ビラなどを作るとき飾り罫線を使いたいのですが、その方法があれば教えてください
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=ntr;tree=45332;id=004
飾り罫線といえば、昔、
Script! で作ろうとしたことがあったっけ。
http://afsoft.jp/program/p09a.html
点と角度、だっけ?
当時はまだ外部変形の作り方は知らなかったなぁ。
もし知ってたら、そっちで作ってたと思う。

で、そのあとで、
線の作図2
http://p-cata.from.tv/jwwgapp/p105.html
を作ったんだっけ。

今だったら、多角形指定/範囲選択での1曲線選択をして、指定距離毎の分割点を発生させて、そこに図形を作図する、とかを作るんかもしれないなぁ。 図形は、JWK/JWS を指定出来るようにすると面白いかもしれない。
出来るかどうか知らないけど。
ただ、図形がブロック図形になると容量節約になるんだろうけども、外部変形ではブロック図形は使えないので、無理だろうな。

[JWW] 溶接記号や表面粗さ

Jw_cad作者さんのサイトの掲示板で以下のような質問がありました。
Jw_cadを機械系のCADとして使用する場合、溶接記号や表面粗さ等の記号はどうすれば使用できますか。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=ntr;tree=44061;id=004
うちでは、「Script!」で作ってます。
『溶接記号 JISZ3021-2000』スクリプトファイル
  http://afsoft.jp/program/p09_002.html
『製品の幾何特性仕様−表面性状の図示方法(旧・面の肌の図示)JISB0031-2003』スクリプトファイル
  http://afsoft.jp/program/p09_003.html

他のフリーのスクリプトファイルで十分に動作を確認してから、良かったらどぞ。 レジスト確認したらメールで送ります。 まぁ、1本もレジストされていないので、多分、スルーされるでしょうけれども。

そういえば最近、新しいJIS規格本を買ってない。1冊1万円くらいするからなぁ。レジストされて溜まったら新しいのを買おうと思ってますけれども〜 無理だっぺ。

[Script!] クロソイド曲線の作図

建築資料館の掲示板で下記のような質問がありました。
教えてください。
S型クロソイドが描ける外部変形はありませか?
http://www.ath-j.com/cbbs2/cbbs.cgi?mode=all&namber=42829&type=0&space=0&no=1
外部変形ではありませんが、
S型かどうかは知りませんが、
うちの「Script!」では、クロソイド曲線を作図する命令を実装してます。
// クロソイド
#VAR
L1 = 0  ;*開始曲線長さ
L2 = 30  ;*終了曲線長さ
 A = 5  ;*パラメータ
 sp = 50  ;*分割数

#DRAW
 CLOTHOID sp,0,0,0,L1,L2,A,0
これを実行すると
20120118a
となるので、[JWWクリップボード転送]ボタンをクリックしてから
Jw_cad で [貼付]をクリック
20120118b
で作図出来ます。

[Script!+JWW] 球風な円環ソリッドの作図?

前回はあまり球っぽくは見えませんが、これは間隔が一定だから、というのが1つの原因だと思います。また、斜めから光が当たっているように表現してみたい、というのもありますね。そうすると、円環ソリッドは使えません。なので、大きい円から小さい円へ作図するように重ね描きをするようにして、中心位置をすこしずつずらしていくようにしてみます。描画順を逆にすると外側の円1つしか見えない状態になりますが、まぁ、円弧分割・円外ソリッド・弓形ソリッドなどを考えるよりは遥かに簡単に作れます。
// 円環ソリッドの作図2
#VAR
 col1 = 255 ;*開始色(任意色)
 col2 = 0  ;*終了色(任意色)
 r = 100   ;*半径
 n = 10   ;*数
 xd =-3   ;*X方向ずらし量
 yd = 3   ;*Y方向ずらし量
 i
 t
 c
 c1
 c2
 c3
 c4
 c5
 c6
 x
 y
#DRAW
 CAL c1 = col1 % 256
 CAL c2 = Int(col1 / 256) % 256
 CAL c3 = Int(col1 / 65536)
 CAL c4 = col2 % 256
 CAL c5 = Int(col2 / 256) % 256
 CAL c6 = Int(col2 / 65536)
 CAL c1 = Int((c1 - c4)/(n-1))
 CAL c2 = Int((c2 - c5)/(n-1))
 CAL c3 = Int((c3 - c6)/(n-1))
 CAL c = col2
 CAL i = 1
 CAL x = 0
 CAL y = 0
 CAL t = r
 #WHILE (i <= n)
  CSOLID c,x,y,t,t,0
  CAL i = i + 1
  CAL c = c + c1 + c2*256 + c3*65536
  #IF (i = n)
   CAL c = col1
  #END
  CAL x = x + xd
  CAL y = y + yd
  CAL t = r*Cos(0.5*PI/n*(i-1))
 #END
これを実行すると、こんな感じです。
20110211c

ずらし量は、一定値ずつずらしてますが、これはテキトーです。円の大きさ・数によって、それなりに見えるように、適切に指定して下さい。[JWWクリップボード転送]をクリックし、Jw_cad にて[貼付]をしますと
20110211d

こんな感じ。

[Script!+JWW] 同心円の円環ソリッドの作図

同心円で、分割のピッチも一定、での円環状ソリッドの作図というのを、当方の「Script!」で書いてみると、こんな感じでしょうか?
// 円環ソリッドの作図
#VAR
 col1 = 255 ;*開始色(任意色)
 col2 = 0  ;*終了色(任意色)
 r = 100   ;*半径
 n = 10   ;*数
 i
 t
 tb
 c
 c1
 c2
 c3
 c4
 c5
 c6
#DRAW
 CAL c1 = col1 % 256
 CAL c2 = Int(col1 / 256) % 256
 CAL c3 = Int(col1 / 65536)
 CAL c4 = col2 % 256
 CAL c5 = Int(col2 / 256) % 256
 CAL c6 = Int(col2 / 65536)
 CAL c1 = Int((c4 - c1)/(n-1))
 CAL c2 = Int((c5 - c2)/(n-1))
 CAL c3 = Int((c6 - c3)/(n-1))
 CAL c = col1
 CAL i = 1
 CAL t = r/n
 #WHILE (i <= n)
  #IF (i = 1)
   CSOLID c,0,0,t,t,0
  #ELSE
   DSOLID c,0,0,t,t,0,tb
  #END
  CAL i = i + 1
  CAL c = c + c1 + c2*256 + c3*65536
  #IF (i = n)
   CAL c = col2
  #END
  CAL tb = t
  CAL t = t + r/n
 #END
これを実行すると
20110211a

となるので、[JWWクリップボード転送]をクリックし
Jw_cad で[貼付]をクリックして位置指定
20110211b

こんな感じ。
円ソリッドは、内側から作図していきます。
開始色は一番内側の色、終了色は一番外側の色、です。

[Script!] リンク3改

というわけで、このリンク3のものを少し改造します。
といっても、諸元名のところに、「TR:〜〜」と追加するだけです。それ以外は変えてません。
// リンクその3(改)
// リンク2の終点に制限を入れる事を考えます
// リンク1の位置Yと同じになるようにします
//  =リンク2の角度を算出
#VAR
 dmy1 = "---リンク(1)---"  ;dmy1
 px1 = 0    ;*位置X
 py1 = 0    ;*位置Y
 pa1 = 0    ;*角度[°]__TR:0,360
 ll1 =50    ;*リンク長さ__TR:0,500
 lw1 =10    ;*リンク幅__TR:0,300
 dmy2 = "---リンク(2)---"  ;dmy2
 px2      ;位置X
 py2      ;位置Y
 pa2      ;角度[°]
 ll2 =80    ;*リンク長さ__TR:0,500
 lw2 =15    ;*リンク幅__TR:0,300
 // 作業用
 no
 px
 py
 ll
 lw
 pan
 w1
 w2
 w3
 w4
 w5
 w6
 w7
 w8

#DRAW
 LAYER SetLineLay1  // 外形線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1

 CAL no = 1
 CAL pan = pa1/180.0*PI
 CAL px = px1
 CAL py = py1
 CAL ll = ll1
 CAL lw = lw1
 #GOTO *LINKDRAW
*RET1
 CAL w1 = ll1*Sin(pan)
 CAL w2 = ASIN(w1/ll2)
 CAL w3 = -(pan + w2)
 CAL pa2 = w3*180.0/PI

 CAL no = 2
 CAL px2 = px1 + ll1*Cos(pan)
 CAL py2 = py1 + ll1*Sin(pan)
 CAL pan = (pa1+pa2)/180.0*PI
 CAL px = px2
 CAL py = py2
 CAL ll = ll2
 CAL lw = lw2
 #GOTO *LINKDRAW
*RET2
 #EXIT


// リンク1本を作図
//  no = 1、2
*LINKDRAW
 CAL w1 = px
 CAL w2 = py
 CAL w3 = lw/2.0
 CAL w4 = pan + 0.5*PI
 CAL w5 = pan + 1.5*PI
 ARC w1,w2,w3,w4,w5

 CAL w1 = px
 CAL w2 = py + lw/2.0
 CAL w3 = px + ll
 CAL w4 = w2
 GETREV w5,w6, w1,w2,px,py,pan
 GETREV w7,w8, w3,w4,px,py,pan
 LINE w5,w6,w7,w8

 CAL w1 = px
 CAL w2 = py - lw/2.0
 CAL w3 = px + ll
 CAL w4 = w2
 GETREV w5,w6, w1,w2,px,py,pan
 GETREV w7,w8, w3,w4,px,py,pan
 LINE w5,w6,w7,w8

 CAL w3 = px + ll
 CAL w4 = py
 GETREV w1,w2, w3,w4,px,py,pan
 CAL w3 = lw/2.0
 CAL w4 = pan + 1.5*PI
 CAL w5 = pan + 0.5*PI
 ARC w1,w2,w3,w4,w5

 #IF ( no == 1 )
  #GOTO *RET1
 #END
 #GOTO *RET2
これを「Script!19」で実行してみてください。
最初:
20100405a
諸元表の「角度」のところをクリックすると
20100405b
という入力画面が出て、このトラックバーを操作すると
20100405c
超遅いので、ゆっくりトラックバーを動かしてね〜
カクカクと動かせて見せる事が出来る・・・のやもしれません。

諸元表の諸元名のよこに「TR:」とつけたものは、諸元値入力編集する際、トラックバーのある画面が出ます。TR:○○,△△ と書いて、○○が最小値、△△が最大値です。その間を100分割して変化&プレビューさせる事が出来ます。遅いですが。スクリプトが重いとかなりきついかもしれません。
かなりパッチ当て的な対処法で、定数値しか使えませんが、まぁ、遊べるかもしれません。

[Script!] リンク機構のネタ

フォルダの中を見てると、
test_リンク1.sf 〜 test_リンク4.sf というスクリプトのファイルがありました。。。。ググってみると・・・あ・・・

http://blog.livedoor.jp/afsoft/archives/51208371.html
http://blog.livedoor.jp/afsoft/archives/51208375.html
http://blog.livedoor.jp/afsoft/archives/51208377.html
http://blog.livedoor.jp/afsoft/archives/51208392.html

あったのねん・・・

すっかり忘却のザムドでした。

Script!19&ScriptRunner Ver.1.13 <更新>

「Script!19」と「ScriptRunner Ver.1.13」
久しぶりに修正しました。
http://afsoft.jp/program/p05.html
http://afsoft.jp/program/p06.html

数値変数設定の諸元名のあとに「TR:0,100」という風に追加すると、諸元表の数値をクリックした際、トラックバーを表示するようになって、0〜100の値を変化&プレビューできるようになります。1/100単位となりますので数値指定によっては端数がでますので注意。定数値しか指定できませんけれども、まぁ、遊び程度にはなるかなと思います。あと、結構遅いので、余り期待はしないで下さい。

そのほか、少し微調整しています。
JWWクリップボードからの縮尺の取り込みの際の Ver.7.00対応とか、DXF出力の際のヘッダに少し追加したとか。

[Script!+JWW] 円弧長による円弧作図

というわけで?
Script!で書くとすれば以下のような感じ
(敢えてわざと余計なものも入れてますが)
// テストプログラム:円弧長指定の円弧作図
//
// =============================================
// (C)Copyright 2010 AFsoft All Rights Reserved.
// =============================================
#VAR
 r = 100    ;*半径[mm]
 // sa = 0    ;*開始角度[°]
 // ea = 90    ;*終了角度[°]
 //
 // sa = 0    ;*作図開始角度[°]
 // da = 90    ;*作図円弧角度[°]
 //
 sl =  0   ;*開始円弧長[mm]
 dl = 100   ;*作図円弧長[mm]
 x
 y
 a1
 a2
 a3

#DRAW
 LAYER SetLineLay1  // 外径線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1
 // ----- 入力した角度で円弧を作図するパターン
 // CAL a1 = sa/180*PI
 // CAL a2 = ea/180*PI
 // CAL a3 = a1
 // ----- 入力した作図円弧角度で円弧を作図するパターン
 // CAL a1 = sa/180*PI
 // CAL a2 = (sa+da)/180*PI
 // CAL a3 = a1
 // #IF (da < 0)
 //  CAL a1 = (sa+da)/180*PI
 //  CAL a2 = sa/180*PI
 //  CAL a3 = a2
 // #END
 // ----- 入力した作図円弧長で円弧を作図するパターン
 CAL a1 = sl/r
 CAL a2 = (sl+dl)/r
 CAL a3 = a1
 #IF (dl < 0)
  CAL a1 = (sl+dl)/r
  CAL a2 = sl/r
  CAL a3 = a2
 #END

 // 原点=中心
 // CAL x = 0
 // CAL y = 0
 // 原点=開始点
 CAL x =-r*Cos(a3)
 CAL y =-r*Sin(a3)

 // 作図
 ARC x,y,r,a1,a2
当方の「Script!」に貼り付けて、これを実行すると
20100328a
というような感じで、[JWWクリップボード転送]をクリックし、Jw_cad で[貼付]をクリックすると、こんな感じ。
20100328b

[Script!+JWW] X型リフター続々編

先日のX型リフターな図の Script!テストですが、少しだけチェックを入れました。
// テストプログラム:リフト(修正)
//
// =============================================
// (C)Copyright 2010 AFsoft All Rights Reserved.
// =============================================
#LIST
 ko = "左","中","右"
#VAR
 d1x = 1000   ;*土台X
 d1y = 100   ;*土台Y
 d2x = 1000   ;*リフト台X
 d2y = 100   ;*リフト台Y
 ko = 左    ;*リンク固定点
 l = 1200    ;*リンク長さ
 w = 100    ;*リンク太さ
 l1x = 50    ;*リンク土台端からのX(左/右の際に有効)
 l1y = 50    ;*リンク土台底辺からの高さ
 l2y = 50    ;*リンクリフト台底辺からの高さ
 h = 1000    ;*高さ

 ang
 iko
 kx
 ky
 x1
 y1
 x2
 y2
 cx1
 cy1
 cx2
 cy2
 w1
 w2
 wx1
 wy1
 wx2
 wy2
 wx3
 wy3
 wx4
 wy4
 
#DRAW
 // エラーチェック(最低限)
 // CAL x1 = (d1y - l1y) + l2y  // 土台の上にリフト台が乗る場合
 CAL x1 = 0
 CAL x2 = l
 #IF ( (h < x1) || (h > x2) )
  BEEP
  MESSAGE "入力エラー","高さの入力エラーです","値を再入力して下さい。",x1,x2
  #EXIT
 #END
 CAL x1 = Sqrt(l*l - h*h)
 CAL x2 = d1x - l1x
 #IF (x1 > x2)
  BEEP
  MESSAGE "入力エラー","リンクが土台からはみ出てしまいます","値を再入力して下さい。",0,0
  #EXIT
 #END
 CAL x2 = d2x - l1x
 #IF (x1 > x2)
  BEEP
  MESSAGE "入力エラー","リンクがリフト台からはみ出てしまいます","値を再入力して下さい。",0,0
  #EXIT
 #END

 GETANGLE ang,x1,h
 CHKITEM iko,ko,ko
 CAL ky = l1y + h - l2y  // リフト台基準点
 CAL kx = 0
 #IF (iko == 0)
  CAL kx =-d1x/2+Abs(l1x)
 #END
 #IF (iko == 2)
  CAL kx = d1x/2-Abs(l1x)
  CAL ang = PI - ang
 #END

 LAYER SetLineLay4  // 基準線
 PEN SetLineCol4,SetLineLtp4,SetLineWid4
 // 基準線
 CAL x1 =-d1x/2 - SetZ1  // 中心線はみ出し距離考慮
 CAL y1 = l1y
 CAL x2 = d1x/2 + SetZ1
 CAL y2 = l1y
 LINE x1,y1,x2,y2

 CAL x1 =-d2x/2 - SetZ1
 CAL y1 = ky + l2y
 CAL x2 = d2x/2 + SetZ1
 CAL y2 = ky + l2y
 LINE x1,y1,x2,y2

 CAL x1 = 0
 CAL y1 = ky + d2y + SetZ1
 CAL x2 = 0
 CAL y2 =-SetZ1
 LINE x1,y1,x2,y2

 LAYER SetLineLay1  // 外径線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1
 // 土台
 CAL x1 =-d1x / 2
 CAL y1 = 0
 CAL x2 = d1x / 2
 CAL y2 = d1y
 BOX x1,y1,x2,y2
 // リフト台
 CAL x1 =-d2x / 2
 CAL y1 = ky
 CAL x2 = d2x / 2
 CAL y2 = ky + d2y
 BOX x1,y1,x2,y2

 // ----- リンク -----

 #IF (iko == 0)
  CAL cx1 = kx
  CAL cy1 = l1y
  CAL cx2 = cx1 + Sqrt(l*l - h*h)
  CAL cy2 = l1y + h
 #END
 #IF (iko == 1)
  CAL cx1 =-Sqrt(l*l - h*h) / 2
  CAL cy1 = l1y
  CAL cx2 = Sqrt(l*l - h*h) / 2
  CAL cy2 = l1y + h
 #END
 #IF (iko == 2)
  CAL cx1 = kx
  CAL cy1 = l1y
  CAL cx2 = cx1 - Sqrt(l*l - h*h)
  CAL cy2 = l1y + h
 #END

 LAYER SetLineLay3  // 中心線
 PEN SetLineCol3,SetLineLtp3,SetLineWid3
 // 中心線
 LINE cx1,cy1,cx2,cy2
 LINE cx1,cy2,cx2,cy1

 LAYER SetLineLay1  // 外径線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1
 CAL wx1 = cx1 + w/2*Cos(ang+0.5*PI)
 CAL wy1 = cy1 + w/2*Sin(ang+0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(ang+0.5*PI)
 CAL wy2 = cy2 + w/2*Sin(ang+0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w2,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 #IF ( (w1 == 1) && (w2 == 1) )
  LINE x1,y1,x2,y2
 #END
 
 CAL wx1 = cx1 + w/2*Cos(ang-0.5*PI)
 CAL wy1 = cy1 + w/2*Sin(ang-0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(ang-0.5*PI)
 CAL wy2 = cy2 + w/2*Sin(ang-0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w2,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 #IF ( (w1 == 1) && (w2 == 1) )
  LINE x1,y1,x2,y2
 #END
 
 CAL wx1 = cx1 + w/2*Cos(PI-ang+0.5*PI)
 CAL wy1 = cy2 + w/2*Sin(PI-ang+0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(PI-ang+0.5*PI)
 CAL wy2 = cy1 + w/2*Sin(PI-ang+0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w2,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 #IF ( (w1 == 1) && (w2 == 1) )
  LINE x1,y1,x2,y2
 #END
 
 CAL wx1 = cx1 + w/2*Cos(PI-ang-0.5*PI)
 CAL wy1 = cy2 + w/2*Sin(PI-ang-0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(PI-ang-0.5*PI)
 CAL wy2 = cy1 + w/2*Sin(PI-ang-0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w2,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 #IF ( (w1 == 1) && (w2 == 1) )
  LINE x1,y1,x2,y2
 #END
とりあえずこんな感じ。
当方の「Script!」にて上記を貼り付けて実行すると
20100325a
というふうになるので、[JWWクリップボード転送]をクリックし
Jw_cad を起動し、Jw_cad で[貼付]をクリック。
20100325b
という感じ。

※各数値に、マイナス値を入れないで下さい

[JWW] X型リフター続編

あらあらあら〜(CV:大原さやか のノリで)
菱形のほうをリンクされたのですね〜
それでは、ちょい Script!で作ってみましたので よろしかったらどうぞ〜
// テストプログラム:リフト
//
// =============================================
// (C)Copyright 2010 AFsoft All Rights Reserved.
// =============================================
#LIST
 ko = "左","中","右"
#VAR
 d1x = 1000   ;*土台X
 d1y = 100   ;*土台Y
 d2x = 1000   ;*リフト台X
 d2y = 100   ;*リフト台Y
 ko = 左    ;*リンク固定点
 l = 1200    ;*リンク長さ
 w = 100    ;*リンク太さ
 l1x = 50    ;*リンク土台端からのX(左/右の際に有効)
 l1y = 50    ;*リンク土台底辺からの高さ
 l2y = 50    ;*リンクリフト台底辺からの高さ
 h = 1000    ;*高さ

 ang
 iko
 kx
 ky
 x1
 y1
 x2
 y2
 cx1
 cy1
 cx2
 cy2
 w1
 wx1
 wy1
 wx2
 wy2
 wx3
 wy3
 wx4
 wy4
 
#DRAW
 // エラーチェック(最低限)
 #IF (h >= l)
  BEEP
  MESSAGE "入力エラー","リンク長さよりも高さの方が大きくなってます","値を再入力して下さい。",0,0
  #EXIT
 #END
 CAL x1 = Sqrt(l*l - h*h)
 CAL x2 = d1x - l1x
 #IF (x1 > x2)
  BEEP
  MESSAGE "入力エラー","リンクが土台からはみ出てしまいます","値を再入力して下さい。",0,0
  #EXIT
 #END
 CAL x2 = d2x - l1x
 #IF (x1 > x2)
  BEEP
  MESSAGE "入力エラー","リンクがリフト台からはみ出てしまいます","値を再入力して下さい。",0,0
  #EXIT
 #END

 GETANGLE ang,x1,h
 CHKITEM iko,ko,ko
 CAL ky = l1y + h - l2y  // リフト台基準点
 CAL kx = 0
 #IF (iko == 0)
  CAL kx =-d1x/2+Abs(l1x)
 #END
 #IF (iko == 2)
  CAL kx = d1x/2-Abs(l1x)
  CAL ang = PI - ang
 #END

 LAYER SetLineLay4  // 基準線
 PEN SetLineCol4,SetLineLtp4,SetLineWid4
 // 基準線
 CAL x1 =-d1x/2 - SetZ1  // 中心線はみ出し距離考慮
 CAL y1 = l1y
 CAL x2 = d1x/2 + SetZ1
 CAL y2 = l1y
 LINE x1,y1,x2,y2

 CAL x1 =-d2x/2 - SetZ1
 CAL y1 = ky + l2y
 CAL x2 = d2x/2 + SetZ1
 CAL y2 = ky + l2y
 LINE x1,y1,x2,y2

 CAL x1 = 0
 CAL y1 = ky + d2y + SetZ1
 CAL x2 = 0
 CAL y2 =-SetZ1
 LINE x1,y1,x2,y2

 LAYER SetLineLay1  // 外径線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1
 // 土台
 CAL x1 =-d1x / 2
 CAL y1 = 0
 CAL x2 = d1x / 2
 CAL y2 = d1y
 BOX x1,y1,x2,y2
 // リフト台
 CAL x1 =-d2x / 2
 CAL y1 = ky
 CAL x2 = d2x / 2
 CAL y2 = ky + d2y
 BOX x1,y1,x2,y2

 // ----- リンク -----

 #IF (iko == 0)
  CAL cx1 = kx
  CAL cy1 = l1y
  CAL cx2 = cx1 + Sqrt(l*l - h*h)
  CAL cy2 = l1y + h
 #END
 #IF (iko == 1)
  CAL cx1 =-Sqrt(l*l - h*h) / 2
  CAL cy1 = l1y
  CAL cx2 = Sqrt(l*l - h*h) / 2
  CAL cy2 = l1y + h
 #END
 #IF (iko == 2)
  CAL cx1 = kx
  CAL cy1 = l1y
  CAL cx2 = cx1 - Sqrt(l*l - h*h)
  CAL cy2 = l1y + h
 #END

 LAYER SetLineLay3  // 中心線
 PEN SetLineCol3,SetLineLtp3,SetLineWid3
 // 中心線
 LINE cx1,cy1,cx2,cy2
 LINE cx1,cy2,cx2,cy1

 LAYER SetLineLay1  // 外径線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1
 CAL wx1 = cx1 + w/2*Cos(ang+0.5*PI)
 CAL wy1 = cy1 + w/2*Sin(ang+0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(ang+0.5*PI)
 CAL wy2 = cy2 + w/2*Sin(ang+0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w1,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 LINE x1,y1,x2,y2
 
 CAL wx1 = cx1 + w/2*Cos(ang-0.5*PI)
 CAL wy1 = cy1 + w/2*Sin(ang-0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(ang-0.5*PI)
 CAL wy2 = cy2 + w/2*Sin(ang-0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w1,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 LINE x1,y1,x2,y2
 
 CAL wx1 = cx1 + w/2*Cos(PI-ang+0.5*PI)
 CAL wy1 = cy2 + w/2*Sin(PI-ang+0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(PI-ang+0.5*PI)
 CAL wy2 = cy1 + w/2*Sin(PI-ang+0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w1,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 LINE x1,y1,x2,y2
 
 CAL wx1 = cx1 + w/2*Cos(PI-ang-0.5*PI)
 CAL wy1 = cy2 + w/2*Sin(PI-ang-0.5*PI)
 CAL wx2 = cx2 + w/2*Cos(PI-ang-0.5*PI)
 CAL wy2 = cy1 + w/2*Sin(PI-ang-0.5*PI)
 CAL wx3 =-d1x/2
 CAL wy3 = d1y
 CAL wx4 = d1x/2
 CAL wy4 = d1y
 GETCRSLL w1,x1,y1,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 CAL wx3 =-d2x/2
 CAL wy3 = ky
 CAL wx4 = d2x/2
 CAL wy4 = ky
 GETCRSLL w1,x2,y2,wx1,wy1,wx2,wy2,wx3,wy3,wx4,wy4
 LINE x1,y1,x2,y2
パラメータのとりかたや、数値はテキトウですので、適当に変更してください。
20100325a

リンクがクロスする箇所はCAD側で適当に消す等して下さい。

Script! の使い方

先日書いた件
http://blog.livedoor.jp/afsoft/archives/51472123.html
で うにょさんのブログで使い方が「?」とのようなので

まず当方のサイトより「Script!18」をダウンロードして下さい。自己解凍型圧縮なので、実行をして、どこかに自由な名前のフォルダを作ってそのなかにでも入れてください。「script.exe」というのが出来ますのでこれを実行してください。
「Run」タブの画面右側のエディタ部分に、先のスクリプトのプログラムをコピー&ペーストし、[標準値に戻す]をクリックしてください。別画面が表示されて、うずまき絵が見えると思います。

[JWWクリップボード転送]ボタンをクリックします。

Jw_cad を起動し、[貼付]をします。
指示した場所に、うずまき絵が作図されます。

という感じ

[Script!] 対数螺旋

うにょさんのブログより。
http://unyored.blog59.fc2.com/blog-entry-875.html

対数螺旋ですね。

式は、r = a*e^bθ だそうなので
久しぶりに「Script!」で書くと、こんな感じかな?
// 曲線
// 対数螺旋
#VAR
 a = 0.1   ;*係数a
 b = 0.2   ;*係数b
 t1 = 0    ;*開始角度(°)
 t2 = 1080  ;*終了角度(°)
 n = 100   ;*分割数
 i
 j
 t
 t1r
 t2r
 t3r
 rr
 x1
 y1
 x2
 y2
#DRAW
 CAL t1r = t1/180*PI
 CAL t2r = t2/180*PI
 CAL t3r = (t2-t1)*PI/180/n
 CAL t = t1r
 CAL j = 0
 CAL rr = a*EXP(b*t)
 CAL x1 =-rr*Cos(t)
 CAL y1 =-rr*Sin(t)
*LOOP1
 CAL t = t + t3r
 CAL rr = a*EXP(b*t)
 CAL x2 =-rr*Cos(t)
 CAL y2 =-rr*Sin(t)
 LINE x1,y1,x2,y2

 CAL x1 = x2
 CAL y1 = y2
 CAL j = j + 1
 #IF ( j < n )
   #GOTO *LOOP1
 #END
うにょさんのブログではXYが逆になっているのでx1,y1,x2,y2にはマイナスをかけてますけれど。実行して、JWWクリップボード出力をして、Jw_cad で[貼付]をすれば作図出来ます。係数a,b の値にどんな値を入れたらいいのか分からないですけど〜

[JWW+Script!] 噴水?2.5D

という訳で、先日のScript!3D用のコードを
Jw_cad 2.5D & Script! 用コードに書き換えてみました。
// 噴水?2.5D -1-
#VAR
 h = 2000  ;*高さ
 r = 2000  ;*半径
 sn = 1000  ;*水滴の数
 sr = 10   ;*水滴の半径
 i
 n
 w1
 w2
 w3
 wx
 wy
 wz
 s25d
#DRAW
 RANDOMIZE
 PEN 1,1,0
 CAL i = 0
 #WHILE (i < sn)
  CAL w1 = RAND(r)
  CAL w2 = -4*h/r/r*(w1-r/2)*(w1-r/2)+h
  CAL w3 = RAND(360)/180*PI
  CAL wx = w1*Cos(w3)
  CAL wy = w1*Sin(w3)
  CAL wz = w2
  CIRCLE wx,wy,sr

  ZKATTR $8000
  STRCPY s25d,wz
  TEXT wx,wy,3,3,0,7,s25d
  ZKATTR 0
  CAL i = i + 1
 #END
実行します。
20090523a
JWWクリップボード送信して、Jw_cad で[貼付]
20090523b
2.5D [mm] アイソメ
20090523c
円をたくさん描かせてます。

線でも描いてみようかな?
水滴線長さは、線の3D長さではなくて水平成分距離です。
// 噴水?2.5D -2-
#VAR
 h = 2000  ;*高さ
 r = 2000  ;*半径
 sn = 1000  ;*水滴の数
 sl = 50   ;*水滴線長さ
 i
 n
 w1
 w2
 w3
 wx1
 wy1
 wz1
 wx2
 wy2
 wz2
 s25d
#DRAW
 RANDOMIZE
 PEN 1,1,0
 CAL i = 0
 #WHILE (i < sn)
  CAL w1 = RAND(r-sl)
  CAL w2 = -4*h/r/r*(w1-r/2)*(w1-r/2)+h
  CAL w3 = RAND(360)/180*PI
  CAL wx1 = w1*Cos(w3)
  CAL wy1 = w1*Sin(w3)
  CAL wz1 = w2
  CAL w1 = w1 + sl
  CAL w2 = -4*h/r/r*(w1-r/2)*(w1-r/2)+h
  CAL wx2 = w1*Cos(w3)
  CAL wy2 = w1*Sin(w3)
  CAL wz2 = w2
  LINE wx1,wy1,wx2,wy2

  ZKATTR $8000
  STRCPY s25d,wz1
  TEXT wx1,wy1,3,3,0,7,s25d
  STRCPY s25d,wz2
  TEXT wx2,wy2,3,3,0,7,s25d
  ZKATTR 0
  CAL i = i + 1
 #END
実行します。
20090523d
JWWクリップボード送信して、Jw_cad で[貼付]
20090523e
2.5D [mm] アイソメ
20090523f
線を沢山描かせてます。

[Script] ターンバックル?

建築資料館の掲示板で下記のような質問がありました。
始点から終点に線を書くようにクリックするだけで始点から1000MMのところにその線と並行な2線を25MMづつ、長さ250MMで作図され更にその2線の両端に半円が付いて、始点から終点の距離も作図したいのです。建築のターンバックルブレースの略図を作図と同時に寸法まで表示したいのです。始点から終点の距離の寸法は、異なるレイヤーに作図されるとさらにありがたいです。よろしくお願いします。
http://www.ath-j.com/cbbs2/cbbs.cgi?mode=all&namber=39080&type=0&space=0&no=1
線記号変形は分らないですが、とりあえず、うちのScript!でてきと〜に書いてみました。2クリックは出来ませんので、1クリック+距離入力ですが。角度は、貼り付け時の傾き角度で指定します。
// ターンバックル1
//
#VAR
 l1 = 1000   ;*始点からの長さ
 d = 2000   ;*全距離
 L = 250    ;*ターンバックルL
 W = 50    ;*ターンバックルW
 MH = 40   ;*文字高
 MW = 40   ;*文字幅(全角)
 MM = 5    ;*文字マージン
 w1
 w2
 w3
 w4
 w5
#DRAW
 // 始点〜
 LAYER 0
 PEN 2,1,0
 LINE 0,0, l1,0
 // 〜終点
 LINE l1,0, d,0
 // ターンバックル
 CAL w1 = l1 - L/2
 CAL w2 = W/2
 CAL w3 = l1 + L/2
 CAL w4 = W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 =-W/2
 CAL w3 = l1 + L/2
 CAL w4 =-W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 0.5*PI
 CAL w5 = 1.5*PI
 ARC w1,w2,w3,w4,w5
 CAL w1 = l1 + L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 1.5*PI
 CAL w5 = 0.5*PI
 ARC w1,w2,w3,w4,w5
 // 距離
 CAL w1 = l1 + L/2 + W/2 + MM
 CAL w2 = MM
 TEXT w1,w2,MH,MW,0,7,d
// ターンバックル2
//
#VAR
 l1 = 1000   ;*始点からの長さ
 d = 2000   ;*全距離
 L = 250    ;*ターンバックルL
 W = 50    ;*ターンバックルW
 MH = 40   ;*文字高
 MW = 40   ;*文字幅(全角)
 MM = 5    ;*文字マージン
 ii   // 文字数
 ML   // 文字分の空白部長さ
 i
 w1
 w2
 w3
 w4
 w5
#DRAW
 CAL ii = LENGTH(d)
 #IF (SetMojiWid == 0)
STRLEN ii,d
CAL ii = ii + ii
 #END
 CAL ML = ii*MW/2 + MM*2
 
 // 始点〜
 LAYER 0
 PEN 2,1,0
 CAL w1 = l1 - ML/2
 LINE 0,0, w1,0
 // 〜終点
 CAL w1 = l1 + ML/2
 LINE w1,0, d,0
 // ターンバックル
 CAL w1 = l1 - L/2
 CAL w2 = W/2
 CAL w3 = l1 + L/2
 CAL w4 = W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 =-W/2
 CAL w3 = l1 + L/2
 CAL w4 =-W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 0.5*PI
 CAL w5 = 1.5*PI
 ARC w1,w2,w3,w4,w5
 CAL w1 = l1 + L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 1.5*PI
 CAL w5 = 0.5*PI
 ARC w1,w2,w3,w4,w5
 // 距離
 CAL w1 = l1
 CAL w2 = 0
 TEXT w1,w2,MH,MW,0,5,d
を実行すると
20090509_3
20090509_4
のようになって、Jw_cad で[貼付]をして、”文字も倍率”にすれば思惑通りになるだろう、と思いきや、文字は ずれてしまうので、このままだと使えませんから、少し書き換えます。
// ターンバックル1
//
#VAR
 l1 = 1000   ;*始点からの長さ
 d = 2000   ;*全距離
 L = 250    ;*ターンバックルL
 W = 50    ;*ターンバックルW
 MH = 4    ;*文字高
 MW = 4    ;*文字幅(全角)
 MM = 0.5   ;*文字マージン
 sc = 10   ;*倍率(/縮尺)
 ii   // 文字数
 ML   // 文字分の長さ
 i
 w1
 w2
 w3
 w4
 w5
#DRAW
 CAL ii = LENGTH(d)
 #IF (SetMojiWid == 0)
STRLEN ii,d
CAL ii = ii + ii
 #END
 CAL ML = ii*MW/2

 // 始点〜
 LAYER 0
 PEN 2,1,0
 LINE 0,0, l1,0
 // 〜終点
 LINE l1,0, d,0
 // ターンバックル
 CAL w1 = l1 - L/2
 CAL w2 = W/2
 CAL w3 = l1 + L/2
 CAL w4 = W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 =-W/2
 CAL w3 = l1 + L/2
 CAL w4 =-W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 0.5*PI
 CAL w5 = 1.5*PI
 ARC w1,w2,w3,w4,w5
 CAL w1 = l1 + L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 1.5*PI
 CAL w5 = 0.5*PI
 ARC w1,w2,w3,w4,w5
 // 距離
 CAL w1 = l1 + L/2 + W/2 + MM*sc + ML/2*sc
 CAL w2 = MH/2*sc + MM*sc
 TEXT w1,w2,MH,MW,0,5,d
// ターンバックル2
//
#VAR
 l1 = 1000   ;*始点からの長さ
 d = 2000   ;*全距離
 L = 250    ;*ターンバックルL
 W = 50    ;*ターンバックルW
 MH = 4    ;*文字高
 MW = 4    ;*文字幅(全角)
 MM = 0.5   ;*文字マージン
 sc = 10   ;*倍率(/縮尺)
 ii   // 文字数
 ML   // 文字分の空白部長さ
 i
 w1
 w2
 w3
 w4
 w5
#DRAW
 CAL ii = LENGTH(d)
 #IF (SetMojiWid == 0)
STRLEN ii,d
CAL ii = ii + ii
 #END
 CAL ML = ii*MW/2*sc + MM*2*sc
 
 // 始点〜
 LAYER 0
 PEN 2,1,0
 CAL w1 = l1 - ML/2
 LINE 0,0, w1,0
 // 〜終点
 CAL w1 = l1 + ML/2
 LINE w1,0, d,0
 // ターンバックル
 CAL w1 = l1 - L/2
 CAL w2 = W/2
 CAL w3 = l1 + L/2
 CAL w4 = W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 =-W/2
 CAL w3 = l1 + L/2
 CAL w4 =-W/2
 LINE w1,w2,w3,w4
 CAL w1 = l1 - L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 0.5*PI
 CAL w5 = 1.5*PI
 ARC w1,w2,w3,w4,w5
 CAL w1 = l1 + L/2
 CAL w2 = 0
 CAL w3 = W/2
 CAL w4 = 1.5*PI
 CAL w5 = 0.5*PI
 ARC w1,w2,w3,w4,w5
 // 距離
 CAL w1 = l1
 CAL w2 = 0
 TEXT w1,w2,MH,MW,0,5,d
Script!画面では文字が小さく見えてしまいますがまぁ仕方がありません。倍率には、縮尺が1/10の場合には「10」を、縮尺が1/100の場合には「100」を入れます。文字高・文字幅・文字マージンには図寸で入力します。Jw_cad での貼り付け時には、”文字も倍率”のチェックはオフにして下さい。TEXTコマンドでは配置モード:中中(5)で作図するようにします。
20090509_5
という感じです。レイヤや色・線種を個別に指定したければ、上記のその箇所で「LAYER」や「PEN」コマンドを書けば可能です。

[JWW+Script!] >>>>な線?

という訳で取りあえず作ってみました。
// 飾り罫9 >>>>>
// ----- 変数宣言 -----
#VAR
 L = 100  ;*全線長
 F = 10  ;*幅
 // 作業用変数
 sx   // 基本形状の横サイズ
 sy   // 基本形状の縦サイズ
 cn   // 基本形状を作図する個数
 sp   // 調整用空白部(片方のみ)
 c    // カウンタ
 sl   // 基本形状作図位置(左中央)
 x0
 y0
 x1
 y1
 x2
 y2
// ----- 実行開始 -----
#DRAW
 CAL sx = F
 CAL sy = F
 CAL cn = Int(L/sx)
 CAL sp = (L - cn*sx)/2.0
 LAYER SetLineLay1  // 外形線
 PEN SetLineCol1,SetLineLtp1,SetLineWid1

 CAL c = 0
 CAL sl = sp
*LOOP
 // 基本形状作図
 CAL x0 = sl
 CAL y0 = 0.0
 CAL x1 = x0
 CAL y1 = y0 + sy/2.0
 CAL x2 = x0 + sx
 CAL y2 = y0
 LINE x1,y1,x2,y2
 CAL x1 = x2
 CAL y1 = y2
 CAL x2 = x0
 CAL y2 = y0 - sy/2.0
 LINE x1,y1,x2,y2

 CAL sl = sl + sx
 CAL c = c + 1
 #IF (c < cn)
   #GOTO *LOOP
 #END
実行します。
20090405a

[JWWクリップボード転送]をして、Jw_cad で[貼付]
20090405b

[AFsoft-Script!+JWW] 自動調心ころ軸受

kisaさんのブログ
http://retour.web5.jp/blog2009/
で当方の「Script!」を利用して Jw_cad 上で作図を行うスクリプト
「自動調心ころ軸受」
が公開されました。
自動調心ころ軸受 作図スクリプト
記事で書いていた『自動調心ころ軸受』のスクリプトデータを公開しました。興味のある方は以下からどうぞ。
Self-aligning roller bearings sf v01.zip
データ等チェックしたつもりですが、何せ私のスクリプト作成経験が少なく不具合があるかも知れません。使用にあたっては自己責任の上で御利用下さい。
※作図された外形寸法を必ずチェックして下さい。
※簡略図示なので実際の製品の形状と異なります。
http://retour.web5.jp/blog2009/2009/03/post-56.html

[AFsoft-Script!+JWW] 六角ボルト、ナット、座金2

kisaさんのブログ
http://retour.web5.jp/blog2009/
で当方の「Script!」を利用して Jw_cad 上で作図を行うスクリプト
「六角ボルト、ナット、座金類製図スクリプトv02」
更新されました。
2009.3.2 追記
六角穴付ボルトの追加と、リストの選択名を分かりやすくしました。
http://retour.web5.jp/blog2009/2009/02/v01.html

[AFsoft-Script!+JWW] 六角ボルト、ナット、座金

kisaさんのブログ
http://retour.web5.jp/blog2009/
で当方の「Script!」を利用して Jw_cad 上で作図を行うスクリプト
「六角ボルト、ナット、座金類製図スクリプトv01」
が公開されました。
六角ボルト、ナット、座金類製図スクリプトv01
記事で書いていた『六角ボルト、ナット、座金類』のスクリプトデータを公開しました。興味のある方は以下からどうぞ。データ等チェックしたつもりですが不具合があるかも知れません。使用にあたっては自己責任の上で御利用下さい。
また、「深溝玉軸受製図スクリプト」が更新されました。
2009.2.26追記
6個の種類を1つのスクリプトで選択できるようにしました。

[JWW+Script!] 面取り・丸め矩形の作図7

続きです。
面取り/丸め付き四角形の作図04を参照しながら、面取り/丸め付き四角形の作図07を修正します。面取りの場合のみ dd値の計算分を座標計算に含みます。そのため、marume指定→何番目か?(0,1,2)を保持する変数imの取得のあとに dd 計算を移動しています。それ以外は前回の「07」と同じです。
// 面取り/丸め付き四角形の作図08
// 面取り/丸め付き四角形の作図04/07改 ソリッド付
//  ※追加した面取は複線(オフセット)パターン、
//   丸め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
 dd
 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
 CAL dd = 0
 #IF (im == 1)
  CAL dd = ds/Tan(67.5/180*PI)
 #END
 #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 - dd
 CAL qy1 = ky - sy/2 - ds
 CAL qx2 = kx - sx/2 - ds
 CAL qy2 = ky - sy/2 + mm - dd
 CAL qx3 = kx - sx/2 - ds
 CAL qy3 = ky + sy/2 - mm + dd
 CAL qx4 = kx - sx/2 + mm - dd
 CAL qy4 = ky + sy/2 + ds
 CAL qx5 = kx + sx/2 - mm + dd
 CAL qy5 = ky + sy/2 + ds
 CAL qx6 = kx + sx/2 + ds
 CAL qy6 = ky + sy/2 - mm + dd
 CAL qx7 = kx + sx/2 + ds
 CAL qy7 = ky - sy/2 + mm - dd
 CAL qx8 = kx + sx/2 - mm + dd
 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
面取りを指定して実行します。
20090225g

丸めの指定は、前回 07版と同じく、下記のようになります。
20090225f


という訳で、以上です。こんな感じでしょうか?

Rといえば、そういえば以前、建築フォーラムでの会議室でも何か質疑応答があったような記憶がありますが・・・まぁい〜か♪

[JWW+Script!] 面取り・丸め矩形の作図6

続きです。
面取り/丸め付き四角形の作図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

[JWW+Script!] 面取り・丸め矩形の作図5

続きです。
面取り/丸め付き四角形の作図02を修正しソリッド図形の作図を追加します。各点の座標を計算してから作図するようにしています。丸めR部分は、同じRがスライド移動状態になっているため円環ソリッドは使えません。また、間隔値が狭い場合を考えると円外ソリッドも使えません。内部を白ソリッドで埋めてしまう手法もありますが、この手法を取りたくないパターンも多いと思われますので(ソリッド最初に作図をしない場合等)それも使いません。という訳で、R部分は線分で分解すると考えて四角形ソリッドを分割数の分だけ作図する、という手法を取ります。内側・外側とも内接多角形状態とします。そのため作図には少々時間が掛かります。
// 面取り/丸め付き四角形の作図06
// 面取り/丸め付き四角形の作図02改 ソリッド付
//  ※外側と内側の面取量・丸めRは同じ値のバージョン
#LIST
 base = "左上","中上","右上","左中","中中","右中","左下","中下","右下"
 marume = "なし","面取り","丸め"
#VAR
 scol= 0     ;*ソリッド任意色
 col = 1     ;*線色
 typ = 1     ;*線種
 wid = 0     ;*線幅
 sx =100     ;*幅
 sy =100     ;*高さ
 ds = 10     ;*間隔
 base = 中中   ;*基準点
 marume = なし  ;*面取り/丸め指定
 mm = 10     ;*面取量/丸めR
 rn = 8     ;*丸めR部分の分割数
 i
 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
 wx1
 wy1
 wx2
 wy2
 wx3
 wy3
 wx4
 wy4
#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 - ds + mm
 CAL qy1 = ky - sy/2 - ds
 CAL qx2 = kx - sx/2 - ds
 CAL qy2 = ky - sy/2 - ds + mm
 CAL qx3 = kx - sx/2 - ds
 CAL qy3 = ky + sy/2 + ds - mm
 CAL qx4 = kx - sx/2 - ds + mm
 CAL qy4 = ky + sy/2 + ds
 CAL qx5 = kx + sx/2 + ds - mm
 CAL qy5 = ky + sy/2 + ds
 CAL qx6 = kx + sx/2 + ds
 CAL qy6 = ky + sy/2 + ds - mm
 CAL qx7 = kx + sx/2 + ds
 CAL qy7 = ky - sy/2 - ds + mm
 CAL qx8 = kx + sx/2 + ds - 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

 #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, 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
  //
  CAL i = 0
  CAL w6 = w3
  CAL wx1 = px1 + w5*Cos(w6)
  CAL wy1 = py2 + w5*Sin(w6)
  CAL wx2 = qx1 + w5*Cos(w6)
  CAL wy2 = qy2 + w5*Sin(w6)
  #WHILE (i < rn)
   CAL w6 = w6 + 0.5*PI/rn
   CAL wx3 = px1 + w5*Cos(w6)
   CAL wy3 = py2 + w5*Sin(w6)
   CAL wx4 = qx1 + w5*Cos(w6)
   CAL wy4 = qy2 + w5*Sin(w6)
   4SOLID scol, wx1,wy1, wx2,wy2, wx4,wy4, wx3,wy3
   CAL wx1 = wx3
   CAL wy1 = wy3
   CAL wx2 = wx4
   CAL wy2 = wy4
   CAL i = i + 1
  #END
  //
  CAL i = 0
  CAL w6 = w2
  CAL wx1 = px4 + w5*Cos(w6)
  CAL wy1 = py3 + w5*Sin(w6)
  CAL wx2 = qx4 + w5*Cos(w6)
  CAL wy2 = qy3 + w5*Sin(w6)
  #WHILE (i < rn)
   CAL w6 = w6 + 0.5*PI/rn
   CAL wx3 = px4 + w5*Cos(w6)
   CAL wy3 = py3 + w5*Sin(w6)
   CAL wx4 = qx4 + w5*Cos(w6)
   CAL wy4 = qy3 + w5*Sin(w6)
   4SOLID scol, wx1,wy1, wx2,wy2, wx4,wy4, wx3,wy3
   CAL wx1 = wx3
   CAL wy1 = wy3
   CAL wx2 = wx4
   CAL wy2 = wy4
   CAL i = i + 1
  #END
  //
  CAL i = 0
  CAL w6 = w1
  CAL wx1 = px5 + w5*Cos(w6)
  CAL wy1 = py6 + w5*Sin(w6)
  CAL wx2 = qx5 + w5*Cos(w6)
  CAL wy2 = qy6 + w5*Sin(w6)
  #WHILE (i < rn)
   CAL w6 = w6 + 0.5*PI/rn
   CAL wx3 = px5 + w5*Cos(w6)
   CAL wy3 = py6 + w5*Sin(w6)
   CAL wx4 = qx5 + w5*Cos(w6)
   CAL wy4 = qy6 + w5*Sin(w6)
   4SOLID scol, wx1,wy1, wx2,wy2, wx4,wy4, wx3,wy3
   CAL wx1 = wx3
   CAL wy1 = wy3
   CAL wx2 = wx4
   CAL wy2 = wy4
   CAL i = i + 1
  #END
  //
  CAL i = 0
  CAL w6 = w4
  CAL wx1 = px8 + w5*Cos(w6)
  CAL wy1 = py7 + w5*Sin(w6)
  CAL wx2 = qx8 + w5*Cos(w6)
  CAL wy2 = qy7 + w5*Sin(w6)
  #WHILE (i < rn)
   CAL w6 = w6 + 0.5*PI/rn
   CAL wx3 = px8 + w5*Cos(w6)
   CAL wy3 = py7 + w5*Sin(w6)
   CAL wx4 = qx8 + w5*Cos(w6)
   CAL wy4 = qy7 + w5*Sin(w6)
   4SOLID scol, wx1,wy1, wx2,wy2, wx4,wy4, wx3,wy3
   CAL wx1 = wx3
   CAL wy1 = wy3
   CAL wx2 = wx4
   CAL wy2 = wy4
   CAL i = i + 1
  #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 qx1,qy2, w5,w3,w4
  ARC qx4,qy3, w5,w2,w3
  ARC qx5,qy6, w5,w1,w2
  ARC qx8,qy7, w5,w4,w1
 #END
実行します。
20090225a

面取りします。
20090225b

丸めします。
20090225c

[JWW+Script!] 面取り・丸め矩形の作図4

続きです。
今度は、ソリッド図形を追加したものです。
先にソリッド図形を作図してから線等を作図していますので、作図タイミングの問題で面取り・丸め共有部分というのはバラしています。
// 面取り/丸め付き四角形の作図05
// 面取り/丸め付き四角形の作図01改 ソリッド付
#LIST
 base = "左上","中上","右上","左中","中中","右中","左下","中下","右下"
 marume = "なし","面取り","丸め"
#VAR
 scol = 0    ;*ソリッド任意色
 col = 1     ;*線色
 typ = 1     ;*線種
 wid = 0     ;*線幅
 sx =100     ;*幅
 sy =100     ;*高さ
 base = 中中   ;*基準点
 marume = なし  ;*面取り/丸め指定
 mm = 10     ;*面取量/丸めR
 ib
 kx
 ky
 im
 w1
 w2
 w3
 w4
 w5
 w6
 w7
 w8
#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 == 1)
  #GOTO *N1
 #END
 #IF (im == 2)
  #GOTO *N2
 #END
// ----- 四角 -----
 CAL w1 = kx - sx/2
 CAL w2 = ky - sy/2
 CAL w3 = kx + sx/2
 CAL w4 = ky + sy/2
 4SOLID scol,w1,w2,w1,w4,w3,w4,w3,w2
 BOX w1,w2,w3,w4

 #EXIT

// ----- 面取り付き四角 -----
*N1
 CAL w1 = kx - sx/2
 CAL w2 = ky + sy/2 - mm
 CAL w3 = kx - sx/2 + mm
 CAL w4 = ky + sy/2
 CAL w5 = kx + sx/2 - mm
 CAL w6 = ky + sy/2
 CAL w7 = kx + sx/2
 CAL w8 = ky + sy/2 - mm
 4SOLID scol,w1,w2,w3,w4,w5,w6,w7,w8  // 上部台形
 CAL w1 = kx - sx/2
 CAL w2 = ky - sy/2 + mm
 CAL w3 = kx + sx/2
 CAL w4 = ky + sy/2 - mm
 4SOLID scol,w1,w2,w1,w4,w3,w4,w3,w2  // 中央長方形
 CAL w1 = kx - sx/2 + mm
 CAL w2 = ky - sy/2
 CAL w3 = kx - sx/2
 CAL w4 = ky - sy/2 + mm
 CAL w5 = kx + sx/2
 CAL w6 = ky - sy/2 + mm
 CAL w7 = kx + sx/2 - mm
 CAL w8 = ky - sy/2
 4SOLID scol,w1,w2,w3,w4,w5,w6,w7,w8  // 下部台形

 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  // 右線

 // --- 面取り部 ---
 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 = kx - sx/2 + mm
 CAL w4 = ky + sy/2
 CAL w5 = kx + sx/2 - mm
 CAL w6 = ky + sy/2
 CAL w7 = kx + sx/2 - mm
 CAL w8 = ky + sy/2 - mm
 4SOLID scol,w1,w2,w3,w4,w5,w6,w7,w8  // 上部長方形
 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
 PSOLID scol,w1,w2,w3,w3,0,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
 PSOLID scol,w1,w2,w3,w3,0,w4,w5  // 右上
 CAL w1 = kx - sx/2
 CAL w2 = ky - sy/2 + mm
 CAL w3 = kx + sx/2
 CAL w4 = ky + sy/2 - mm
 4SOLID scol,w1,w2,w1,w4,w3,w4,w3,w2  // 中央長方形
 CAL w1 = kx - sx/2 + mm
 CAL w2 = ky - sy/2
 CAL w3 = kx - sx/2 + mm
 CAL w4 = ky - sy/2 + mm
 CAL w5 = kx + sx/2 - mm
 CAL w6 = ky - sy/2 + mm
 CAL w7 = kx + sx/2 - mm
 CAL w8 = ky - sy/2
 4SOLID scol,w1,w2,w3,w4,w5,w6,w7,w8  // 下部長方形
 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
 PSOLID scol,w1,w2,w3,w3,0,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
 PSOLID scol,w1,w2,w3,w3,0,w4,w5  // 右下

 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  // 右線

 // --- 丸め部 ---
 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  // 右下
実行します。
20090224l

面取りします。
20090224m

丸めします。
20090224n

[JWW+Script!] 面取り・丸め矩形の作図3

続きです。

Jw_cad での矩形コマンドでの面取り付き矩形は、先の02・03パターンではなく、複線(オフセット)的な作図が行われています。ただ、オフセット機能に相当するようなコードを書くのが手間なので、計算で求めます。
20090224j

ds=10の場合は、10/Tan(67.5/180*PI)=4.14213562373098 で
Jw_cad で作図したものと同じになりますから大丈夫でしょう。
// 面取り/丸め付き四角形の作図04
//  ※追加した面取は複線(オフセット)パターン、
//   丸め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
 dd
 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
 CAL dd = ds/Tan(67.5/180*PI)
 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 + mm - dd
  CAL w2 = ky + sy/2 + ds
  CAL w3 = kx + sx/2 - mm + dd
  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 - mm + dd
  CAL w3 = w1
  CAL w4 = ky - sy/2 + mm - dd
  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 - mm + dd
  CAL w3 = kx - sx/2 + mm - dd
  CAL w4 = ky + sy/2 + ds
  LINE w1,w2,w3,w4  // 左上
  CAL w1 = kx + sx/2 - mm + dd
  CAL w2 = ky + sy/2 + ds
  CAL w3 = kx + sx/2 + ds
  CAL w4 = ky + sy/2 - mm + dd
  LINE w1,w2,w3,w4  // 右上
  CAL w1 = kx - sx/2 - ds
  CAL w2 = ky - sy/2 + mm - dd
  CAL w3 = kx - sx/2 + mm - dd
  CAL w4 = ky - sy/2 - ds
  LINE w1,w2,w3,w4  // 左下
  CAL w1 = kx + sx/2 - mm + dd
  CAL w2 = ky - sy/2 - ds
  CAL w3 = kx + sx/2 + ds
  CAL w4 = ky - sy/2 + mm - dd
  LINE w1,w2,w3,w4  // 右下
 #END
面取りにして実行します。
20090224k

[JWW+Script!] 面取り・丸め矩形の作図2

続きです。

次は、面取り量・丸めRが変動するパターンです。
// 面取り/丸め付き四角形の作図03
//  ※追加した面取量・丸め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 + mm
  CAL w2 = ky + sy/2 + ds
  CAL w3 = kx + sx/2 - 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 - mm
  CAL w3 = w1
  CAL w4 = ky - sy/2 + 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 - mm
  CAL w3 = kx - sx/2 + mm
  CAL w4 = ky + sy/2 + ds
  LINE w1,w2,w3,w4  // 左上
  CAL w1 = kx + sx/2 - mm
  CAL w2 = ky + sy/2 + ds
  CAL w3 = kx + sx/2 + ds
  CAL w4 = ky + sy/2 - mm
  LINE w1,w2,w3,w4  // 右上
  CAL w1 = kx - sx/2 - ds
  CAL w2 = ky - sy/2 + mm
  CAL w3 = kx - sx/2 + mm
  CAL w4 = ky - sy/2 - ds
  LINE w1,w2,w3,w4  // 左下
  CAL w1 = kx + sx/2 - mm
  CAL w2 = ky - sy/2 - ds
  CAL w3 = kx + sx/2 + ds
  CAL w4 = ky - sy/2 + 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 + mm
  CAL w2 = ky + sy/2 - mm
  CAL w3 = mm + ds
  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 + ds
  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 + ds
  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 + ds
  CAL w4 = 270/180*PI
  CAL w5 = 0
  ARC w1,w2,w3,w4,w5  // 右下
 #END
これを実行します。
20090224g

面取りします。
20090224h

丸めします。
20090224i

[JWW+Script!] 面取り・丸め矩形の作図

建築資料館の掲示板で以下のような質問がありました。
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  // 右下
実行します。標準状態。
20090224a

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

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


次に、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
これを実行しますと以下のようになります。
20090224d

面取りしました。
20090224e

丸めしました。
20090224f

[Script!] 引出線/引出注記

somemさんのブログで外部変形「引出線」のお話がありましたので、うちの「Script!」で書く場合にはどんな感じなのかを書いてみます。
// 引出注記
//
// ==================================================
// (C)Copyright 2008-2009 AFsoft All Rights Reserved.
// ==================================================
#LIST
 dir = "右出し","左出し"

#VAR
 s1          ;*文字(上段
 s2          ;*文字(下段
 dir = 右出し     ;*引出の向き
 mh = 5       ;*文字高[mm]
 mw = 5       ;*文字幅[mm]
 ms = 1       ;*文字と引出線のすき間[mm]
 md = 5       ;*文字前後のはみ出し長[mm]
 ya = 60       ;*矢印線角度[°]
 yl = 20       ;*矢印線長さ[mm]

 ii1    // 上段文字数
 ii2    // 下段文字数
 ii    // 長いほうの文字数
 idir   // 向き 0:右 1:左
 yan    // 矢印線角度[rad]
 kx    // 記号位置
 ky
 w1    // 作業用
 w2
 w3
 w4
 w5

#DRAW
 CAL w1 = 100000
 #IF ((mh <= 0)||(mh > w1))
   BEEP
   MESSAGE "入力エラー","文字高の値が異常です。","文字高の値を再入力して下さい。",0,w1
   #EXIT
 #END
 CAL w1 = mh*0.1
 CAL w2 = mh*10
 #IF ((mw < w1)||(mw > w2))
   BEEP
   MESSAGE "入力エラー","文字幅の値が異常です。","文字幅の値を再入力して下さい。",w1,w2
   #EXIT
 #END
 CAL w1 = 0
 CAL w2 = mh
 #IF ((ms < w1)||(ms > w2))
   BEEP
   MESSAGE "入力エラー","すき間の値が異常です。","すき間の値を再入力して下さい。",w1,w2
   #EXIT
 #END
 CAL w1 = 0
 CAL w2 = mh*100
 #IF ((md < w1)||(md > w2))
   BEEP
   MESSAGE "入力エラー","はみ出し長の値が異常です。","はみ出し長の値を再入力して下さい。",w1,w2
   #EXIT
 #END

 CHKITEM idir,dir,dir
 CAL yan = ya/180*PI
 CAL ii1 = LENGTH(s1)
 CAL ii2 = LENGTH(s2)
 #IF (SetMojiWid == 0)
   STRLEN ii1,s1
   STRLEN ii2,s2
   CAL ii1 = ii1 + ii1
   CAL ii2 = ii2 + ii2
 #END
 CAL ii = ii1
 #IF (ii < ii2)
   CAL ii = ii2
 #END

 LAYER SetLineLay2  // 寸法線
 PEN SetLineCol2,SetLineLtp2,SetLineWid2
 // 矢印線
 #IF (yl <> 0)
   CAL w1 = 0
   CAL w2 = 0
   CAL w3 = yl*Cos(yan)
   CAL w4 = yl*Sin(yan)
   LINE w1,w2,w3,w4
 #END
 CAL w5 = 2*md + mw*0.5*ii
 #IF (idir == 1)
   CAL w5 = - w5
 #END
 CAL w1 = yl*Cos(yan)
 CAL w2 = yl*Sin(yan)
 CAL w3 = w1 + w5
 CAL w4 = w2
 LINE w1,w2,w3,w4

 #IF (yl == 0)
   CAL yan = 0
 #END
 #IF ( (yl == 0)&&(idir == 1) )
   CAL yan = PI
 #END
 CAL kx = yl*Cos(yan)
 CAL ky = yl*Sin(yan)
 #IF (idir == 1)
   CAL kx = kx - 2*md - mw*0.5*ii
 #END
 #IF (yl < 0)
   CAL yan = yan + PI
 #END

 // 矢印
 CAL w1 = 0
 CAL w2 = 0
 CAL w3 = SetAL*Cos(yan+SetAA)
 CAL w4 = SetAL*Sin(yan+SetAA)
 LINE w1,w2,w3,w4
 CAL w3 = SetAL*Cos(yan-SetAA)
 CAL w4 = SetAL*Sin(yan-SetAA)
 LINE w1,w2,w3,w4

 // 文字
 #IF (ii1 > 0)
   CAL w1 = kx + md
   CAL w2 = ky + ms
   TEXT w1,w2,mh,mw,0,7,s1
 #END

 #IF (ii2 > 0)
   CAL w1 = kx + md
   CAL w2 = ky - ms - mh
   TEXT w1,w2,mh,mw,0,7,s2
 #END
こんな感じかな?
クリップボード経由で貼付になりますので、2点指定が出来ませんから、第2点を角度+長さでの指定にしていますけれども、まぁ、仕方が無いですね。
Script!には引出注釈の命令がありますが、この命令の仕様は古いものなので、Jw_cad の半角全角の幅の違いに対応していなかったと思いますので使っていません。また、曲線属性の指定は、この Script!では出来ませんので、やっていないです。

縮尺が1/100の場合には、Jw_cad側で倍率を 100倍 として貼り付けて下さい。Script!側で 100倍値で入力するパターンもありますが面倒だと思いますので〜

[JWW] たるんだ電線

Jw_cad作者さんのサイトの掲示板で下記のような質問がありました。
たるんだ電線はどのように書くのですか?
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=ntr;tree=32428;id=004
懸垂曲線(カテナリー曲線)とのこと。
式は、y = a*cosh(x/a) だそうなので当方の「Script!」で組んでみました。
// 懸垂曲線(カテナリー曲線)

#VAR
 X = 100  ;*横長さ
 a = 50  ;*係数a(a>0)
 n = 20  ;*分割数

 c
 w1
 w2
 x1
 y1
 x2
 y2
 xd
 yd

#DRAW
 LAYER SetLineLay1
 PEN SetLineCol1,SetLineLtp1,SetLineWid1

 CAL xd = -X/2
 CAL yd = -a*Cosh(xd/a)

 CAL c = 0
 CAL x1 = 0
 CAL y1 = 0
 #WHILE (c < n)
  CAL x2 = x1 + X/n
  CAL w1 = x2 + xd
  CAL w2 = a*Cosh(w1/a)
  CAL y2 = w2 + yd

  LINE x1,y1,x2,y2
  CAL x1 = x2
  CAL y1 = y2
  CAL c = c + 1
 #END
実行して、[JWWクリップボード転送]をして、Jw_cad側で「貼付」を行ってみて下さい。
Recent Comments
livedoor 天気