TOP>2009年02月

2009年02月26日

■ブラウザでCADデーターを見てみる。

 題の通りのことですが・・・
 ちょっと調べたいことがあって、あるサイトに行くと CADデーターをブラウザで見れるようだったので、それのレビューです。

訪れたサイト
■URL:ダイケン製品CADデータ

インストールしたソフト
■URL:Autodesk Design Review
 ※ダウンロードしたファイルは最新版ではないようです。
   ソフトを単独で起動すると、Ver確認画面がでますので、それで最新版入手可能です。
   そのままでも起動します。


 さて まずは結果を見てみよう。
200902260033.jpg
 拡大して確認してくだしさい。

ブラウザ上で、保存、プリント その他拡大縮小など いろいろな操作が可能です。

起動時間も何の不満もなく プレビューできます。

操作さも PDFを見るような重さも感じません。とても いい感じです。



200902260044.jpg
 ※Autodesk Design Reviewを使って、ブラウザ上でDWFファイルを プレビューする際は、IEエンジンをしようしてください。
  Firefoxhでは動作しません。ただし、IE Tab(FirefoxAdd in)では プレビューできます。



 今後このような 格好でCADデーターの公開と閲覧ができると、とても便利だとおもいます。

2009年02月26日

[AFsoft-script!3D] script!3Dで立体を作ろう(14) 円柱~円錐

当方の「script!3D」を使って立体を作ろう話その14。
今回は、円柱(円筒、シリンダー)の作図命令です。
円といっても内接する多角形になりますけれど。
円柱の作図
CYLIND n,sp,r,z,f1,f2,f
原点・作図基準平面は、変換マトリックスとなります。
 n : (out) 登録された最終図形要素番号(1~)
 sp: 分割数(3-1000)
   設定画面の「円円弧分割数」を利用する場合は
   変数 SetArcSep を指定して下さい。
 r : 底面半径[mm] (>0)
 z : 高さ  [mm] (>0)
 f1: 底面の表示 0:しない 1:する
 f2: 上面の表示 0:しない 1:する
 f : 表裏逆フラグ 0:外側が表面 1:内側が表面
例です。分割数が多ければ多いほど綺麗に円に見えるようになりますが、データ量が大きくなります。
// 円柱作図テスト01
#VAR
 n
#DRAW
 PEN 11
 CYLIND n,SetArcSep,50,100, 1,1,0
実行すると下記のようになります。
20090226a

円形の上面・底面は分割数分の三角面の集まりとなります。側面は分割数分の四角面の集まりとなります。例えば分割数を12とすると、上面12+側面12+底面12=36個のデータとなります。四角面を2つの三角面のデータにするソフトに受け渡した場合には、上面12+側面12×2+底面12=48個のデータとなります。
データが多ければ多い程、仲介するファイルのサイズも大きくなりますし、相手CAD/CGソフトでも重くなっていきますので、分割数はほどほどにした方が良いです。ちなみにスケッチアップでの円の標準の分割数(セグメント数)は24のようですね。

次に「円底面体(円形チューブ)」です。
これは四角底面体、三角底面体と同様、円錐の上部を水平面ですぱっと切ったような形状となります。
円底面体の作図
CTUBE n,sp,sr,sz,ur,ax,ay,f1,f2,f
原点・作図軸・作図基準平面は、変換マトリックスとなります。
 n : (out) 登録された最終図形要素番号(1~)
 sp: 分割数(3-1000)
 sr: 底面半径[mm] (>0)
 sz: 高さ  [mm] (>0)
 ur: 上面半径[mm] (>0)
 ax: 上面偏心X [mm]
 ay: 上面偏心Y [mm]
 f1: 底面の表示 0:しない 1:する
 f2: 上面の表示 0:しない 1:する
 f : 表裏逆フラグ 0:外側が表面 1:内側が表面
以下は一例です。
// 円底面体作図テスト01
#VAR
 n
#DRAW
 PEN 13
 CTUBE n,SetArcSep,50,100, 20, 0,0, 1,1,0
これを実行すると下図のようになります。
20090226b

偏心X,Yを指定すると、上面がスライド移動して、斜めになったような図形を作図する事が出来ます。

次に「円錐(コーン)」です。
円錐の作図
CCONE n,sp,sr,sz,ax,ay,f1,f
原点・作図軸・作図基準平面は、変換マトリックスとなります。
 n : (out) 登録された最終図形要素番号(1~)
 sp: 分割数(3-1000)
 sr: 底面半径[mm] (>0)
 sz: 高さ  [mm] (>0)
 ax: 上面偏心X [mm]
 ay: 上面偏心Y [mm]
 f1: 底面の表示 0:しない 1:する
 f : 表裏逆フラグ 0:外側が表面 1:内側が表面
一例です。
// 円錐作図テスト01
#VAR
 n
#DRAW
 PEN 15
 CCONE n,SetArcSep,50,100, 0,0, 1,0
実行します。
20090226c

偏心X,Yを指定すると、頂点がスライド移動して、斜めになったような図形を作図する事が出来ます。

3D図形を複数合体させるような場合は、接する上面や底面の表示を「しない」にすると良い場合が多いです。相手の3D-CAD/CGソフトによっては、面が重複している部分が点滅?状態になったりして見た目が余りよくない状態になったりする場合がありますし、作図しなくて良い面は無い方がファイルサイズも小さくなり、データもその分軽くなります。

例えば、円柱と円底面体と円錐を合体させたような図形を作図するとします。
// 円錐作図テスト02
#VAR
 n
#DRAW
 PEN 1
 CTUBE n,SetArcSep,100,50, 50, 0,0, 1,1,0
 PEN 2
 MATRIXL 0,0,50  // 相対原点を上に+50
 CYLIND n,SetArcSep,50, 50, 1,1,0
 PEN 3
 MATRIXL 0,0,50  // 相対原点を上に+50
 CCONE n,SetArcSep,50,50, 0,0, 1,0
これを実行すると下図のようになります。
20090226d

これをスケッチアップへ送信します。以下の画面が出ます。
20090226e

     ↓
20090226f

前の方の面を非表示にしてみます。
20090226g

すると、円錐と円柱、円柱と円底面体の間に面があるのが分ります。しかも二重に重なった状態です。この面は要らないので、円底面体の底面以外は作図しないようにします。
// 円錐作図テスト03
#VAR
 n
#DRAW
 PEN 1
 CTUBE n,SetArcSep,100,50, 50, 0,0, 1,0,0
 PEN 2
 MATRIXL 0,0,50  // 相対原点を上に+50
 CYLIND n,SetArcSep,50, 50, 0,0,0
 PEN 3
 MATRIXL 0,0,50  // 相対原点を上に+50
 CCONE n,SetArcSep,50,50, 0,0, 0,0
上面・底面の表示をしない、としている以外は先と同じです。実行します。
20090226h

見た目は同じですね。スケッチアップへ送信します。
20090226i

     ↓
20090226j

前回はデータ数は「96」だったものが「48」つまり半分になっています。先と同様に面を非表示にします。
20090226k

図形と図形の間の面がなくなりました。円錐の底面12個+円柱の上面・底面24個+円底面体の上面12個=合計48個分が出力されていない=データが軽くなった、という事です。
データ量が少ないうちは、あってもなくてもさほど変わらないと感じるでしょうけれども、全体のデータ量が大きくなればなるほど、不要な面の蓄積が効いてきますので、こまめに不要な面は出力しない、と決めて作っておくほうが良い場合が多いです。

2009年02月25日

[JWW] SXF対応拡張線色・線種

Jw_cad作者さんのサイトの掲示板で下記のような質問がありました。
DXFデータを読み込むと、線種が拡張線種となって印刷時の太さ設定や
範囲属性選択なんかで線色指定なんかも大変です。みなさんはどうしてますか?
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=ntr;tree=14787;id=003
とりあえず、先日、Jw_cad 作者さんに話はしましたけれども(JWFとか線記号変形とかも含めて)、基本色+256色の設定画面というのは大変だろうなとは思いますけれども(1つ1つ指定していくのは人間技じゃないかも?:ソフト的にも、コンポーネントを多用するとリソース消費も激しいのできついかも→画面切替式?当方のソフトでは表(StringGrid)で逃げていますけれど)。

現状としては、最新バージョンのJw_cadを使いたい & SXF対応拡張線色・線種を使いたくないという方向で、
・Ver.4.10a ? を利用して読み込み
  当方の「JWSW」を使えば、
  バッチファイルを実行するという手間は無くなります。
  複数バージョンインストールは推奨されていませんが。
・KITIさんの外部変形などを利用
  当方の「JW色線種変換」「JWW色線幅・線種変換」を使えば
  寸法図形とかブロック図形でも変換可能です。
・JacConvertなどを利用
  Ver.4.20形式(16色) で変換すれば良いかと。
というのはありますね。

せっかく実装されている機能ですから使わないと勿体無いような気はしますが、この辺りは便利に使うためのインターフェイスがまだ完備されていない感じはしますので、以降のバージョンアップに期待、というところでしょうか?

2009年02月25日

[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といえば、そういえば以前、建築フォーラムでの会議室でも何か質疑応答があったような記憶がありますが・・・まぁい~か♪

2009年02月25日

[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

2009年02月25日

■ XnView (v1.96/1.70)

 XnView1.96 VerUp

XnViewはグラフィックファイルの表示や変換するソフトウェアです。416種類のファイルを開くことが出来ますので、開けない画像ファイルがありましたらこれで試してみて下さい。
画像加工機能やコンバーターとしても使える総合的な画像ソフトです。GIFで読み書きも可能です。



xn1962009224.jpg

 ■URL:XnView

 ■Download:XnView

■以前の記事■
■現場のJW+Web2.0■ ■XnView1.82.4

■現場のJW+Web2.0■ ■XnView v1.90.2 Standard version (JPEG2000)

2009年02月25日

[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

2009年02月25日

[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

2009年02月25日

[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

2009年02月25日

[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