AFsoft World

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

【Script!3D】

Script!3D支援用ツール jww2sc Ver.1.01 更新

当方のフリーウェア・コーナーにて
  Script!3D支援用ツール「jww2sc Ver.1.01」
をアップしました。
Jw_cad(for Windows/JWW)を起動し、範囲選択→コピーを行った後に本ツールで[取込]を行い、Script!3D用すくりぷとコードに変換する事が出来ます。変換後はコピー&ペーストで利用して下さい。
※Jw_cadクリップボードデータは図寸となっている為、実寸にするためレイヤグループ[0]の縮尺をかけています。寸法図形要素・寸法属性の要素・文字要素・ブロック図形・画像の変換は行いません。点マーカーは単純な点データとなります。線種は実線のみとなります。色設定値は白背景時のJWW初期値と同じです。SXFユーザー色は全て[7]です。ソリッド任意色は256色範囲に丸められます。データ容量が多くなればなるほど遅くなります。
※Jw_cad Ver.7.00形式クリップボードデータに対応(2010/05/30)

Script!3D+SketchUp7日本語版にて

Google SketchUp7 日本語版が公開されましたが

Script!3D、Script!3D Runner を利用される場合は
SketchUp6 設定を使って
送信キーを
旧:
「@FE{LEFT}{DOWN}{ENTER}{TAB}A~{TAB}^V{ENTER}」

「@FE{LEFT}{DOWN}{ENTER}{TAB}G~{TAB}^V{ENTER}」
という風にして下さい。

Script!3Dでの「SketchUp7」の設定は、現行の英語版 SketchUp7.1 を対象としており、COLLADAファイルでのやりとりとなっています。SketchUp7日本語版では、COLLADAファイルの入力には対応していませんので、この設定・ボタンは使えませんので御注意下さい。
また、
現行の Google SketchUp7 日本語版では、ファイル|インポート(I) のメニューに、アクセラレータキー ALT+[I] は割り当てられていませんので、「@FI〜」という書き方は出来ません。(※これは、SketchUp6日本語版でも同じでした)

Script!3D Runner サンプルをアップ

Pcataに、Script!3D Runner用のサンプルをアップしました。

Script!3D 配布用スクリプトファイルをアップロードしています。
http://p-cata.from.tv/s3t/s05.html
s05

http://p-cata.from.tv/s3t/s06.html
s06

Script!3D Runner サンプルをアップ

Pcataに、Script!3D Runner用のサンプルをアップしました。

Script!3D 配布用スクリプトファイルをアップロードしています。以前スケッチアップ用お遊びコンポーネントを作成する際に作った Script!3Dスクリプトファイルを配布用スクリプトファイルとして保存したファイル集です。
http://p-cata.from.tv/s3t/s01.html
s01

http://p-cata.from.tv/s3t/s02.html
s02

http://p-cata.from.tv/s3t/s03.html
s03

http://p-cata.from.tv/s3t/s04.html
s04

Script!3D・Runner は建築フォーラムにもアップロード

作成した「Script!3D SE Ver.1.19」及び
「Script!3D Runner」は、建築フォーラムにもアップロード手続きをしておきました。
しばらく後に、建築フォーラムからもダウンロードできるようになると思います。

Script!3D Runner 公開

当方のサイトフリーウェアコーナーに、
「Script!3D Runner」(Ver.1.19対応版)というツールをアップしました。
「Script!3D Shareware Edition」にて作成した配布用スクリプトファイル(拡張子が「.S3T」のファイル)を開いて実行し、3D図形を作図・一時的に3D-DXFファイル 又は COLLADA(.dae)ファイルを生成しそれを Google SketchUp 等へ送信する事により比較的容易に3D図形描画を行おうというためのプログラムです。
という訳でちょっと前から作っていたものですが、ようやく出来ました。結構安直な割には結構時間が掛かってしまいましたけれど。

ファイル一覧表示
20091015a

リスト表示
20091015b

サムネイル表示
20091015c

設定
20091015d

毎度おなじみ実行画面
20091015e

20091015f

Script!3D SE Ver.1.19

当方のサイトシェアウェアコーナーに、
「Script!3D Shareware Edition Ver.1.19」というツールをアップしました。
このソフトウェアは、スクリプトから3次元図形の作成を行い、3D-DXF(3DFACE)、OBJ、STL、VRML(2.0)、X3D、COLLADA(DAE)、BMPファイル出力をするためのプログラムです
・配布用スクリプトファイル(.d3t)の保存を行えるよう追加しました。(レジストしている場合にのみ利用可能)本ソフトでこのファイルを開く事は出来ませんので、通常のスクリプトファイル保存を行うよう御注意下さい。
※この配布用スクリプトファイルは、別ソフトである「Script!3D Runner」にて開き実行する事が出来ます。(この「Script!3D Runner」はフリーウェアです)
・COLLADA(.dae)ファイルで、一部のソフトで、mm単位設定を受け入れてくれないものがあるようですので、標準のm単位で保存するよう修正を行いました。そのため、小数点以下7桁で出力していたのを9桁に修正
・DXF/DAE出力時、SketchUpでは小さい面を作図出来ない為、大きめにインポートしてから SketchUpでスケール調整等を行う必要がありますがSketctUpでのDXFオプション指定画面で単位設定を変更する手間を防ぐ為GSU出力設定で出力倍率を指定出来るよう追加しました。
という訳で今回のメインの追加内容は、配布用スクリプトファイル保存というのをつけたことです。

一生懸命に作った自作スクリプトを他の人に見てもらいたい、利用してもらいたい、という場合に、配布用スクリプトファイルとして保存し、別ソフト(フリーウェア)の「Script!3D Runner」で見てもらって、スケッチアップ等で利用してもらう、というような感じです。

[Script!3D] R_SWEPS (2)

「Script!3D Ver.1.18」で修正した「R_SWEPS」のテストです。
// R_SWEPSテスト2
//
#VAR
 i
 w1
#DRAW
 // パスを作成
 //  長方形軌道(閉図形)とします
 PEN 2
 BOX2D i,0,0,100,100
 RLSEL1 i,-1,-1,0, 0,0,0, 0.001, 1,1,999,999 // 連続線検索&作図&選択
 RENCLR  // 連続線データ・クリア
 RENSET  // 選択図形→連続線セット
 
 // 断面を作成
 // Y-Z面をX-Y面として描くのでY軸回りに-90度回転します
 CAL w1 = -90/180*PI
 ROYMATR w1
 PEN 3
 CIRCLE2D i,SetArcSep, 0,0,20
 RLSEL1 i,-1,-1,0, 0,20,0, 0.001, 1,1,999,3 // 線色3を選択
     // RLSEL1の検索開始点は絶対座標なので注意して下さい
     // 方向の指定で面の向きを簡単に変えられますので使用しています
     // 線を二重描きすることになりますが後で一括して線は消します
 
 // #EXIT
 
 // スイープ開始
 R_SWEPS 0,-1,-1, 1,1
 
 // 線を消します
 ALLSEL i,1,1,999,999  // 選択
 S_DELE
パスが閉図形の場合の例です。
ここでは長方形作図用の「BOX2D」を使っていますが、これを選択する際、連続線になっているかどうかが不明なので、連続線として選択するために「RLSEL1」を利用しています。
それ以外は前回と同じです。

取りあえず、パスと断面はこんな感じ。
20091011d

実行して スイープするとこんな感じ。
20091011e

面の出入り口に
「R_SWEPS 0,-1,-1, 1,1」
として面が作成するよう指示していますが、パスが閉図形の場合(パスの開始点と終了点が同じ場合)は、面の作図は行われません。

[Script!3D] R_SWEPS (1)

「Script!3D Ver.1.18」で修正した「R_SWEPS」のテストです。
// R_SWEPSテスト1
//
#VAR
 i
 w1
#DRAW
 // パスを作成
 //  直線軌道とします
 PEN 2
 LINE2D i,0,0,100,0
 LINE2D i,100,0,100,100
 LINE3D i,100,100,0, 100,100,100
 ALLSEL i,1,1,999,999  // 選択
 RENCLR  // 連続線データ・クリア
 RENSET  // 選択図形→連続線セット
 
 // 断面を作成
 // Y-Z面をX-Y面として描くのでY軸回りに-90度回転します
 CAL w1 = -90/180*PI
 ROYMATR w1
 PEN 3
 CIRCLE2D i,SetArcSep, 0,0,20
 RLSEL1 i,-1,-1,0, 0,20,0, 0.001, 1,1,999,3 // 線色3を選択
     // RLSEL1の検索開始点は絶対座標なので注意して下さい
     // 方向の指定で面の向きを簡単に変えられますので使用しています
     // 線を二重描きすることになりますが後で一括して線は消します
 
 // #EXIT
 
 // スイープ開始
 R_SWEPS 0,-1,-1, 0,0
 
 // 線を消します
 ALLSEL i,1,1,999,999  // 選択
 S_DELE
パスとなる線を描いて選択し連続線データとして保管します。として断面となる線を描いて、これを選択します。ALLSEL で選択すると選択した図形が連続線になっていない可能性もありますし、面が裏表逆になったりすると面倒なので、RLSEL1 を使っています。

取りあえず、パスと断面はこんな感じ。
20091011a

実行して スイープするとこんな感じ。
20091011b

面の出入り口が空いてますが
「R_SWEPS 0,-1,-1, 0,0」

「R_SWEPS 0,-1,-1, 1,1」
にすると面が作成されます。
20091011c

パスの第1線は、断面の法線、つまり、断面と垂直になっている方がコントロールしやすいと思います。そうでない場合は、断面が、パスの第1線を法線とする面へ投影される事になるので、円の場合には、楕円形状でスイープされるようなことになります。

スケッチアップのフォローミーでは、パスの第1点へまず断面が投影されて、その投影された面がスタートとなりますが、この「R_SWEPS」では、投影される面を想定しますが、あくまでもスタートは、作図・選択した断面そのものとなります。

Script!3D SE Ver.1.18

当方のサイトシェアウェアコーナーに、
「Script!3D Shareware Edition Ver.1.18」というツールをアップしました。
このソフトウェアは、スクリプトから3次元図形の作成を行い、3D-DXF(3DFACE)、OBJ、STL、VRML(2.0)、X3D、COLLADA(DAE)、BMPファイル出力をするためのプログラムです。
Ver.1.18 2009/10/11 更新
・以下の命令の修正を行いました
  R_SWEPS(※仕様変更も行っています)
です。
もう少し追加しようと思っていたのですが時間が掛かりそうなので取りあえず上記が気になっていたのでアップしました。

R_SEPSの動作がイマイチ不安定で、座標もおかしくなったりしましたので、これまでの仕様をやめてしまって、スケッチアップのフォローミーみたいな表現に変えてしまいました。(第1面の扱いが違いますけれど)
前のものは関節部をRっぽく表現しようとしていましたが、どうあがいても数学的に合わなくなってしまってやめてしまいました(ルールドサーフェイスにして関節を布で塞ぐような処理も考えられましたが余計にややこしくなるのでパスしました)。Rっぽくしたい場合は、連続線(パス)そのものにR部を記述して下さい。

※本日のAM1:20〜AM4:30にダウンロードされた方がいらっしゃったら、再度、ダウンロードしなおしてください。少しアップロードミスがありました。申し訳ありませんが宜しくお願いします。

Script!3D → SketchUp7.1

Script!3D から Google SketchUp7.1 (英語版;Free版) へのデータの受け渡し

まずは、グーグル・スケッチアップ7.1 を起動し、
メニュー の File → Import を行い
20090927a

ファイルの種類を「Google Earth Files (*.kmz, *.dae)」にして、[Options]をクリックします。
20090927b

チェックを確認・指定しておきます。
画面は閉じておきます。
20090927c

Script!3D を起動し、以前に作った傘のデータを開きます。
20090927d

[GSU7出力]ボタンをクリックします。
(IMEはタスクトレイの中にいれておいてください)
20090927e

スケッチアップ7.1 でインポートされます。
20090927f

[SU出力]ボタンはこれまで同様、DXFファイルを一時的に作成して、それをインポートします。
[GSU7出力]ボタンは、COLLADA(.dae)ファイルを一時的に作成して、それをインポートします。
このデータの場合は、DXFだと156KB、DAEだと143KBです。この場合はDAEのほうが小さいですが、レイヤや色が入り組んでくるともっと大きくなると思います。

Script!3D SE Ver.1.17

当方のサイトシェアウェアコーナーに、
「Script!3D Shareware Edition Ver.1.17」というツールをアップしました。
このソフトウェアは、スクリプトから3次元図形の作成を行い、3D-DXF(3DFACE)、OBJ、STL、VRML(2.0)、X3D、COLLADA(DAE)、BMPファイル出力をするためのプログラムです。
Ver.1.17 2009/09/27 更新
・COLLADA(.dae)ファイル保存を追加しました。
・メニュー「設定」→「SketchUp7出力設定」追加
・ボタン[GSU7出力] 追加
というわけで、Google SketchUp 7.1 Free版〜 でサポートされた COLLADA(.dae) (1.4.1) での出力に対応しました。線データ・三角面データ・四角面データ(2つの三角面として出力)に対応です。点データというのはCOLLADA1.4.1仕様に無さそうなのでありません。

検証は、Google SketchUp 7.1 (Free)、SwirlViewer 2.6.0.0、Blender 2.94b にて行っています。SwirlViewerでは、多くの線データがあるとどうもフリーズしてしまいますので注意して下さい。Blender では線データの読み込みは出来ない?みたいです。
  ↑
※修正:線データはエッジとして読み込みを行っており、Wireモードにすると表示されるとの事です。

[GSU] 座標値入力でガイドポイントを作図

建築資料館の掲示板で下記のような質問がありました。
フリー版ですが 座標値入力でガイドポイントを落とす方法がありますか教えてください
http://www.ath-j.com/cbbs2/cbbs.cgi?mode=one&namber=1091&type=0&space=0&no=19
どこかにプラグインとかあるかな?
少しざっと見たけれども分りませんでした。
point.rb では座標値入力([x,y,z]指定)出来ないみたいだし。
ひょっとして簡単すぎて無いのかな?

という訳で、久しぶりに「Script!3D」を動かしてみました。
ん?
動かない?
あれ〜おかしいな〜 前は動いていたはずなのに
スケッチアップ7なので
設定を「@FI{TAB}SA~{TAB}^V{ENTER}」にしてと。
(旧6用:@FE{LEFT}{DOWN}{ENTER}{TAB}A~{TAB}^V{ENTER})
ウエイト時間を変えてもダメ。
なんでだろう? と思って触っていたら・・・

結論としては、MS-IME が外に出ていたせいだった・・・
MS-IMEをタスクバーの中に仕舞えば実行出来た・・・
やってくれますね、MS-IME。

普通の DXF での点(POINT)を
スケッチアップでは、ガイドポイントとして読み込むようなので
普通に点を作成したら良いみたい。
(ただし、2回目以降のDXFインポートはコンポーネント化されます)
なので、「Script!3D」にて
#VAR
 i
#DRAW
 TEN i, 100,100,100
 TEN i, 200,100,100
 TEN i, 100,200,100
のように単純に羅列するとか
#VAR
 X = 0   ;*X座標
 Y = 0   ;*Y座標
 Z = 0   ;*Z座標
 i
#DRAW
 TEN i, X,Y,Z
のように入力できるようにするとか
でしょうか?

※あらかじめスケッチアップ側で インポート→AutoCAD Filesを選択して[オプション]で単位設定を行っておいて下さい。

[Script!3D+GSU] かざぐるま

somemさんのブログでのネタ〜
「かざぐるま」ですか〜 という訳で
途中まで考えてみました。勿論当方の「Script!3D」にて
各数値はテキトウです。
// ねじり三角
#VAR
 col = 3   ;*線色
 r = 100   ;*半径
 h = 500   ;*高さ
 sx = 10   ;*回転図形X
 sy = 10   ;*回転図形Y
 a = 180   ;*回転角度[°]
 sp = 12   ;*分割数
 ba = 1    ;*最終倍率X
 bx = 1   ;*作成後倍率X
 by = 2   ;*作成後倍率Y
 bz = 1   ;*作成後倍率Z
 i
 j
 w1
 w2
 w3
 w4
#DRAW
 // 回転図形を作図
 LAYER 1
 PEN col
 TEN i,r,0,0

 // 回転体する図形を選択状態にします
 ALLSEL j, 1,999,1,999

 // 回転体します
 CAL w1 = h
 CAL w2 = a/180*PI
 S_ROT2 1,-1,-1,sp, 0,0,0, 0,0,0, 0,0,100, ba,1,1, w1, w2,0
 RLSEL1 i,-1,-1,0, r,0,0, 0.001, 1,1,1,999
 RENCLR
 RENSET

 // 回転図形を作図
 LAYER 2
 PEN col
 TEN i,r,0,0

 // 回転体する図形を選択状態にします
 ALLSEL j, 1,999,2,999

 // 回転体します
 CAL w1 = 0
 CAL w2 = a/180*PI
 S_ROT2 1,-1,-1,sp, 0,0,0, 0,0,0, 0,0,100, ba,1,1, w1, w2,0
 RLSEL1 i,-1,-1,0, r,0,0, 0.001, 1,1,2,999

 R_RULED 1,0,col,1

 // 削除
 ALLSEL j, 1,999,1,999
 S_DELE
 ALLSEL j, 1,999,2,999
 S_DELE

 // 変形
 ALLSEL j, 1,999,999,999
 S_MOVS 0,0,0, 0,0,0, bx,by,bz
つまり、点をスパイラルさせてその軌道の連続線をとり、スパイラルさせずに普通に回転された軌道の連続線とのルールドサーフェイスを作成して、いらないのを消して、とりあえずY軸方向に変形。
20090802a
で、スケッチアップに送信。
20090802b
ソフトニング
20090802c
マテリアルで色をピックして透明度を指定
20090802d
コンポーネント化して、回転コピーして移動して を繰り返し
20090802e
これで 19KB

ただ少し面倒臭いので、Script!3D で一括してやってしまおうとしてみました。
// ねじり三角×4
#VAR
 col = 3   ;*線色
 r = 100   ;*半径
 h = 500   ;*高さ
 sx = 10   ;*回転図形X
 sy = 10   ;*回転図形Y
 a = 180   ;*回転角度[°]
 sp = 12   ;*分割数
 ba = 1    ;*最終倍率X
 bx = 1   ;*作成後倍率X
 by = 2   ;*作成後倍率Y
 bz = 1   ;*作成後倍率Z
 i
 j
 w1
 w2
 w3
 w4
#DRAW
 // 回転図形を作図
 LAYER 1
 PEN col
 TEN i,r,0,0

 // 回転体する図形を選択状態にします
 ALLSEL j, 1,999,1,999

 // 回転体します
 CAL w1 = h
 CAL w2 = a/180*PI
 S_ROT2 1,-1,-1,sp, 0,0,0, 0,0,0, 0,0,100, ba,1,1, w1, w2,0
 RLSEL1 i,-1,-1,0, r,0,0, 0.001, 1,1,1,999
 RENCLR
 RENSET

 // 回転図形を作図
 LAYER 2
 PEN col
 TEN i,r,0,0

 // 回転体する図形を選択状態にします
 ALLSEL j, 1,999,2,999

 // 回転体します
 CAL w1 = 0
 CAL w2 = a/180*PI
 S_ROT2 1,-1,-1,sp, 0,0,0, 0,0,0, 0,0,100, ba,1,1, w1, w2,0
 RLSEL1 i,-1,-1,0, r,0,0, 0.001, 1,1,2,999

 R_RULED 1,0,col,1

 // 削除
 ALLSEL j, 1,999,1,999
 S_DELE
 ALLSEL j, 1,999,2,999
 S_DELE

 // 変形
 ALLSEL j, 1,999,999,999
 S_MOVS 0,0,0, 0,0,0, bx,by,bz

 // 以下の数値はテキトウなので注意
 CAL w1 = 0
 CAL w2 = -30
 CAL w3 = -12
 S_MOVN w1,w2,w3

 CAL w4 = 0.5*PI
 S_COPRX 1,-1,-1, 0,0,0, w4
 CAL w1 = 3
 CAL w2 = 0
 CAL w3 = 0
 S_MOVN w1,w2,w3

 S_COPRX 1,-1,-1, 0,0,0, w4
 S_MOVN w1,w2,w3

 S_COPRX 1,-1,-1, 0,0,0, w4
 S_MOVN w1,w2,w3
これを実行すると
20090802f
となるのでスケッチアップへ送信
20090802g
ソフトニングをして、マテリアルで半透明に
20090802h
そのまま保存をしたら21KB

コンポーネント化しない分すこし増えますが、手間の分を考えるとこの程度は別にかまわないというか〜 いやいや、なるべく小さく小さくするんであれば手間を惜しまない方がいいのか〜

[Script!3D+GSU] 傘・それから

先ほどの「傘」は
Z軸方向で円弧Rを描くようにしていましたが、

1/4楕円弧版
20090708f

直線版
20090708g

というのも作ってみました。

直線版があれば
20090708h
のような閉じたような形状もすぐに作れますが
そういえば「パラソルチョコ」って昔あったなぁ〜
今もあるのかなぁ?
とか思ったりして。

Script!3D から DXF出力をして、CARRARA 4 で開いて
少し触ってみてと。
20090708i

[Script!3D+GSU] 傘〜

somemさんのブログ等で傘の話がありましたので
Script!3D で作ってみました。
(ちょっと時間が掛かってしまいました・・・)
// 傘
#VAR
 kcol = 1  ;*傘の線色
 scol = 7  ;*支柱の線色
 ecol = 5  ;*柄の線色
 kh = 300  ;*傘高さ
 kr = 500  ;*傘半径
 kn = 8   ;*角数
 krx = 20  ;*krx
 krz = 30  ;*krz
 ss = 100  ;*先端部長さ
 sl = 800  ;*支柱長さ
 sr = 5   ;*支柱半径
 el = 100  ;*柄長さ
 er = 10  ;*柄半径
 er2 = 40  ;*柄外半径

 i
 i1
 j
 khx
 khz
 khr
 khsa
 khea
 ka
 krd
 krxx
 krzz
 krr
 kx
 ky
 x1
 y1
 z1
 x2
 y2
 z2
 x3
 y3
 z3
 wx1
 wy1
 wr1
 wsa1
 wea1
 wx2
 wz2
 wr2
 wsa2
 wea2
 a1
 a2
 a3
 a4
 wx3
 wy3
 wz3

#DRAW
 LAYER 0
 PEN kcol
 CAL x1 = kr
 CAL z1 = 0
 CAL x2 = 0
 CAL z2 = kh
 CAL x3 =-kr
 CAL z3 = 0
 GET3PA i,j,khx,khz,khr,khsa,khea, x1,z1,x2,z2,x3,z3
 CAL khea = khea / 2
 //
 CAL ka = 2.0*PI / kn
 CAL krd = kr
 CAL krxx = krx
 CAL krzz = krz
 CAL krr = kr
 CAL i1 = 0
 #WHILE (i1 < (SetArcSep-1))
  CAL kx = krd*Sin(ka/2)
  CAL ky = krd*Cos(ka/2)
  CAL x1 = kx
  CAL y1 =-ky
  CAL x2 = 0
  CAL y2 =-ky + krxx
  CAL x3 =-kx
  CAL y3 =-ky
  GET3PA i,j,wx1,wy1,wr1,wsa1,wea1, x1,y1,x2,y2,x3,y3
  // ARC2D i,SetArcSep, wx1,wy1,wr1,wsa1,wea1
  //
  CAL x1 =-kx
  CAL z1 = 0
  CAL x2 = 0
  CAL z2 =-krzz
  CAL x3 = kx
  CAL z3 = 0
  GET3PA i,j,wx2,wz2,wr2,wsa2,wea2, x1,z1,x2,z2,x3,z3
  //
  CAL z3 = Sqrt(khr*khr - krr*krr) + khz
  //
  CAL a1 = (wea1 - wsa1)/SetArcSep
  CAL a2 = wsa1
  CAL a3 =-(wea2 - wsa2)/SetArcSep
  CAL a4 = wea2
  CAL x1 = wx1 + wr1*Cos(a2)
  CAL y1 = wy1 + wr1*Sin(a2)
  CAL z1 = wz2 + wr2*Sin(a4) + z3
  CAL wx3 = x1
  CAL wy3 = y1
  CAL wz3 = z1
  CAL i = 0
  #WHILE (i < SetArcSep)
   CAL a2 = a2 + a1
   CAL a4 = a4 + a3
   CAL x2 = wx1 + wr1*Cos(a2)
   CAL y2 = wy1 + wr1*Sin(a2)
   CAL z2 = wz2 + wr2*Sin(a4) + z3
   LINE3D j,x1,y1,z1, x2,y2,z2
   CAL x1 = x2
   CAL y1 = y2
   CAL z1 = z2
   CAL i = i + 1
  #END
  //
  RENCLR
  RENSET
  RLSEL1 j,-1,-1,0, wx3,wy3,wz3,0.001,1,1,999,999
  #IF (i1 > 0)
   R_RULED 0,-1,-1,1
  #END
  //
  CAL krd = krd - kr/SetArcSep
  CAL krxx = krxx - krx/SetArcSep
  CAL krzz = krzz - krz/SetArcSep
  CAL krr = krr - kr/SetArcSep
  CAL i1 = i1 + 1
 #END
 S_PICK3 0,-1,-1, 0,0,kh

 // 線を消す
 ALLSEL j, 1,1,999,999
 S_DELE

 // コピー
 ALLSEL j, 1,6,999,999
 CAL a1 = 2.0*PI *(kn-1)/kn
 CAL i = kn-1
 S_COPRS 0,-1,-1,i, 0,0,0, 0,0,0, 0,0,kh, 1,1,1, 0,a1,0

// ----- 支柱〜 -----
 PEN scol
 // 先端部
 CAL x1 = 0
 CAL y1 = 0
 CAL z1 = kh
 MATRIXO x1,y1,z1
 CAL z2 = sr/2
 CTUBE i,SetArcSep,sr,ss,z2,0,0,0,1,0
 // 支柱
 CAL z1 = kh - sl
 MATRIXO x1,y1,z1
 CYLIND i,SetArcSep,sr,sl,0,0,0
 // --- 柄 ---
 PEN ecol
 #IF (er > sr)
  DSLD2D i,SetArcSep,0,0,er,er,0,sr,0
 #ELSE
  #IF (er < sr)
   DSLD2D i,SetArcSep,0,0,sr,sr,0,er,0
  #END
 #END
 #IF (el > er2)
  CAL z1 = -(el - er2)
  MATRIXL x1,y1,z1
  CAL z1 = el - er2
  CYLIND i,SetArcSep,er,z1,0,0,0
 #END
 LAYER 1
 CSLD2D i,SetArcSep,0,0,er,er,0,1
 ALLSEL j, 1,999,1,999
 CAL x1 = er2 - er
 CAL y1 = 0
 CAL z1 = kh - sl - el + er2
 CAL x2 = x1
 CAL y2 = 10
 CAL z2 = z1
 CAL a1 =-PI
 S_ROT1 2,0,-1,SetArcSep, x1,y1,z1,x2,y2,z2,a1
 S_DELE
 LAYER 0
 CAL x1 = er2*2 - er*2
 CAL y1 = 0
 CAL z1 = 0
 MATRIXL x1,y1,z1
 CAL j = Int(SetArcSep/2)
 DOME i,j,er,0,0
実行しますと
20090708a
という感じで、スケッチアップに送信して
20090708d
先端部の円に線があるのを消して、ソフトニング。支柱と柄の部分は少し粗いので別個に再度ソフトニング。
20090708e
こんな感じかなぁ?

[Script!3D] スパイラル(螺旋)(続)

という訳で、cg-off さんからの課題(続き)です。

// スパイラル テスト7c
//
#VAR
 t_Min =-10  ;*t最小値
 t_Max = 10  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 200*exp(-((0.2 * t)^2)) * sin(t*PI)
 CAL y1 = 200*exp(-((0.2 * t)^2)) * cos(t*PI)
 CAL z1 = 201.0 * tanh(0.3 * t)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 200*exp(-((0.2 * t)^2)) * sin(t*PI)
  CAL y2 = 200*exp(-((0.2 * t)^2)) * cos(t*PI)
  CAL z2 = 201.0 * tanh(0.3 * t)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト7d
//
#VAR
 t_Min =-10  ;*t最小値
 t_Max = 10  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = (200 - 140 * exp(-((0.2 * t)^2))) * sin(t*PI)
 CAL y1 = (200 - 140 * exp(-((0.2 * t)^2))) * cos(t*PI)
 CAL z1 = 207.46 * tanh(0.2 * t)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = (200 - 140 * exp(-((0.2 * t)^2))) * sin(t*PI)
  CAL y2 = (200 - 140 * exp(-((0.2 * t)^2))) * cos(t*PI)
  CAL z2 = 207.46 * tanh(0.2 * t)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト8
//
#VAR
 t_Min =-35  ;*t最小値
 t_Max = 35  ;*t最大値
 dt = 0.1   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 200 * cos(t) * cos(atan(0.15 * t))
 CAL y1 = 200 * sin(t) * cos(atan(0.15 * t))
 CAL z1 = - 200 * sin(atan(0.15 * t))
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 200 * cos(t) * cos(atan(0.15 * t))
  CAL y2 = 200 * sin(t) * cos(atan(0.15 * t))
  CAL z2 = - 200 * sin(atan(0.15 * t))
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト9
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 2  ;*t最大値
 dt = 0.001  ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = cos(1*t*PI) * 200 + cos(t*PI) * 50 * cos(100*t*PI)
 CAL y1 = sin(1*t*PI) * 200 + sin(t*PI) * 50 * cos(100*t*PI)
 CAL z1 = 50 * sin(100*t*PI)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = cos(1*t*PI) * 200 + cos(t*PI) * 50 * cos(100*t*PI)
  CAL y2 = sin(1*t*PI) * 200 + sin(t*PI) * 50 * cos(100*t*PI)
  CAL z2 = 50 * sin(100*t*PI)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト10a
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 4  ;*t最大値
 dt = 0.001  ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = cos(1*t*PI) * 200 + cos(t*PI) * 80 * cos(25*t*PI)
 CAL y1 = sin(1*t*PI) * 200 + sin(t*PI) * 80 * cos(25*t*PI)
 CAL z1 = 80 * sin(25*t*PI) + 120 *t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = cos(1*t*PI) * 200 + cos(t*PI) * 80 * cos(25*t*PI)
  CAL y2 = sin(1*t*PI) * 200 + sin(t*PI) * 80 * cos(25*t*PI)
  CAL z2 = 80 * sin(25*t*PI) + 120 *t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト10b
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 6  ;*t最大値
 dt = 0.001  ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = cos(1*t*PI) * 100 + cos(t*PI) * 5 * cos(10*t*PI)
 CAL y1 = sin(1*t*PI) * 100 + sin(t*PI) * 5 * cos(10*t*PI)
 CAL z1 = 5 * sin(10*t*PI) + 80*t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = cos(1*t*PI) * 100 + cos(t*PI) * 5 * cos(10*t*PI)
  CAL y2 = sin(1*t*PI) * 100 + sin(t*PI) * 5 * cos(10*t*PI)
  CAL z2 = 5 * sin(10*t*PI) + 80*t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト10c
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 4  ;*t最大値
 dt = 0.001  ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = cos(t*PI) * 120 + cos(t*PI) * 10 * cos(18*t*PI)
 CAL y1 = sin(t*PI) * 120 + sin(t*PI) * 10 * cos(18*t*PI)
 CAL z1 = 10 * sin(18*t*PI) + 0.5 * 200 *t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = cos(t*PI) * 120 + cos(t*PI) * 10 * cos(18*t*PI)
  CAL y2 = sin(t*PI) * 120 + sin(t*PI) * 10 * cos(18*t*PI)
  CAL z2 = 10 * sin(18*t*PI) + 0.5 * 200 *t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

[Script!3D] スパイラル(螺旋)

という訳で、cg-off さんからの課題です。

// スパイラル テスト1
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 20  ;*t最大値
 dt = 0.05   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 100*Sin(t*PI)
 CAL y1 = 100*Cos(t*PI)
 CAL z1 = 20*t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 100*Sin(t*PI)
  CAL y2 = 100*Cos(t*PI)
  CAL z2 = 20*t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト2
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 20  ;*t最大値
 dt = 0.05   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = (-3.75*t+100)*Sin(t*PI)
 CAL y1 = (-3.75*t+100)*Cos(t*PI)
 CAL z1 = 20*t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = (-3.75*t+100)*Sin(t*PI)
  CAL y2 = (-3.75*t+100)*Cos(t*PI)
  CAL z2 = 20*t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト3
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 20  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 100*Sin(t*PI)
 CAL y1 = 100*Cos(t*PI)
 CAL z1 = 140.2*t^0.35
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 100*Sin(t*PI)
  CAL y2 = 100*Cos(t*PI)
  CAL z2 = 140.2*t^0.35
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト4
//
#VAR
 t_Min = 1  ;*t最小値
 t_Max = 21  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 100*Sin(t*PI)
 CAL y1 = 100*Cos(t*PI)
 CAL z1 = 210.25*(t^0.35-1)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 100*Sin(t*PI)
  CAL y2 = 100*Cos(t*PI)
  CAL z2 = 210.25*(t^0.35-1)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト5
//
#VAR
 t_Min = 0  ;*t最小値
 t_Max = 20  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 100*Sin(t*PI)
 CAL y1 = 100*Cos(t*PI)
 CAL z1 = 424.91*tanh(0.0875*t)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 100*Sin(t*PI)
  CAL y2 = 100*Cos(t*PI)
  CAL z2 = 424.91*tanh(0.0875*t)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト6
//
#VAR
 t_Min =-10  ;*t最小値
 t_Max = 10  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = sqrt(10000 - 100*t*t) * sin(t*PI)
 CAL y1 = sqrt(10000 - 100*t*t) * cos(t*PI)
 CAL z1 = 20*t
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = sqrt(10000 - 100*t*t) * sin(t*PI)
  CAL y2 = sqrt(10000 - 100*t*t) * cos(t*PI)
  CAL z2 = 20*t
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト7a
//
#VAR
 t_Min =-10  ;*t最小値
 t_Max = 10  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = sqrt(10000 - 100*t*t) * sin(t*PI)
 CAL y1 = sqrt(10000 - 100*t*t) * cos(t*PI)
 CAL z1 = 209.22 * tanh(0.1896 * t)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = sqrt(10000 - 100*t*t) * sin(t*PI)
  CAL y2 = sqrt(10000 - 100*t*t) * cos(t*PI)
  CAL z2 = 209.22 * tanh(0.1896 * t)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

// スパイラル テスト7b
//
#VAR
 t_Min =-10  ;*t最小値
 t_Max = 10  ;*t最大値
 dt = 0.01   ;*t差分

 t
 n
 x1
 y1
 z1
 x2
 y2
 z2

#DRAW
 CAL t = t_Min
 CAL x1 = 200*cos(0.05*t*PI) * sin(t*PI)
 CAL y1 = 200*cos(0.05*t*PI) * cos(t*PI)
 CAL z1 = 209.22 * tanh(0.1896 * t)
 #WHILE (t <= t_Max)
  CAL t = t + dt
  CAL x2 = 200*cos(0.05*t*PI) * sin(t*PI)
  CAL y2 = 200*cos(0.05*t*PI) * cos(t*PI)
  CAL z2 = 209.22 * tanh(0.1896 * t)
  LINE3D n,x1,y1,z1, x2,y2,z2
  CAL x1 = x2
  CAL y1 = y2
  CAL z1 = z2
 #END

[Script!3D+GSU] 楕円を描かせてつなげて立体化2

やっぱり、中間指定をして直線的に段々化するよりは放物線的に変化してくれる方がスムーズで面白いので少し書き換えました。
// 楕円を描かせてつなげて立体化2
//  中間指定は中止
//
#VAR
 col = 1    ;*線色
 ex1 = 100   ;*楕円開始X半径
 ey1 = 100   ;*楕円開始Y半径
 ex2 = 100   ;*楕円終了X半径
 ey2 = 100   ;*楕円終了Y半径
 ex = 0    ;*最終中心X
 ey = 0    ;*最終中心Y
 ez = 200   ;*最終高さ
 ka1 = 0    ;*開始傾き角度[°]
 ka2 = 0    ;*終了傾き角度[°]
 es = 32    ;*楕円分割数
 sp = 10    ;*分割数
 i
 n
 x
 y
 z
 rx
 ry
 kan1
 kan2
 ka
 j
 at1
 at2
 at3
 p1x
 p1y
 p1z
 p2x
 p2y
 p2z
 p3x
 p3y
 p3z
 p4x
 p4y
 p4z
#DRAW
 // --- 楕円を描く ---
 CAL i = 0
 CAL x = 0
 CAL y = 0
 CAL z = 0
 CAL rx = ex1
 CAL ry = ey1
 CAL kan1 = ka1/180*PI
 CAL kan2 = ka2/180*PI
 CAL ka = kan1
 PEN col
 #WHILE (i <= sp)
  ELLI3D n,es,x,y,z,rx,ry,ka
  CAL i = i + 1
  CAL x = i*i*ex / sp/sp
  CAL y = i*i*ey / sp/sp
  CAL z = z + ez/sp
  CAL rx = ex1 + i*i*(ex2-ex1)/sp/sp
  CAL ry = ey1 + i*i*(ey2-ey1)/sp/sp
  CAL ka = ka + (kan2-kan1)/sp
 #END
 // --- 楕円同士を接続 ---
 CAL i = 1
 CAL j = i
 GETFIGD j,at1,at2,at3,p1x,p1y,p1z, p2x,p2y,p2z, p3x,p3y,p3z, p4x,p4y,p4z
 RLSEL1 n,-1,-1,0, p1x,p1y,p1z,0.001,1,1,999,999
 #WHILE (i <= sp)
  RENCLR
  RENSET
  CAL j = j + es
  GETFIGD j,at1,at2,at3,p1x,p1y,p1z, p2x,p2y,p2z, p3x,p3y,p3z, p4x,p4y,p4z
  RLSEL1 n,-1,-1,0, p1x,p1y,p1z,0.001,1,1,999,999
  R_RULED 0,-1,-1,0
  CAL i = i + 1
 #END
 // --- 線を消す ---
 ALLSEL n,1,1,999,999
 S_DELE

20090625f

[GSU] 楕円をつなげて立体化

建築資料館の掲示板での「急須」の件
前回の自己発言
somemさんのブログ内でのお話
を考えてみて、ちょっくら、当方の「Script!3D」を使って、楕円を描いて、それをつなげて面にして立体化するようなものを作ってみました。
// 楕円を描かせてつなげて立体化
//
#VAR
 col = 1    ;*線色
 ex1 = 100   ;*楕円開始X半径
 ey1 = 100   ;*楕円開始Y半径
 ex2 = 100   ;*楕円中間X半径
 ey2 = 100   ;*楕円中間Y半径
 ex3 = 100   ;*楕円終了X半径
 ey3 = 100   ;*楕円終了Y半径
 ex = 0    ;*最終中心X
 ey = 0    ;*最終中心Y
 ez = 200   ;*最終高さ
 ka1 = 0    ;*開始傾き角度[°]
 ka2 = 0    ;*終了傾き角度[°]
 es = 32    ;*楕円分割数
 sp = 10    ;*分割数
 i
 n
 x
 y
 z
 rx
 ry
 kan1
 kan2
 ka
 j
 at1
 at2
 at3
 p1x
 p1y
 p1z
 p2x
 p2y
 p2z
 p3x
 p3y
 p3z
 p4x
 p4y
 p4z
#DRAW
 // --- 楕円を描く ---
 CAL i = 0
 CAL x = 0
 CAL y = 0
 CAL z = 0
 CAL rx = ex1
 CAL ry = ey1
 CAL kan1 = ka1/180*PI
 CAL kan2 = ka2/180*PI
 CAL ka = kan1
 PEN col
 #WHILE (i <= sp)
  ELLI3D n,es,x,y,z,rx,ry,ka
  CAL i = i + 1
  CAL x = i*i*ex / sp/sp
  CAL y = i*i*ey / sp/sp
  CAL z = z + ez/sp
  #IF (i <= (sp/2))
   CAL rx = rx + (ex2-ex1)/(sp/2)
   CAL ry = ry + (ey2-ey1)/(sp/2)
  #ELSE
   CAL rx = rx + (ex3-ex2)/(sp/2)
   CAL ry = ry + (ey3-ey2)/(sp/2)
  #END
  CAL ka = ka + (kan2-kan1)/sp
 #END
 // --- 楕円同士を接続 ---
 CAL i = 1
 CAL j = i
 GETFIGD j,at1,at2,at3,p1x,p1y,p1z, p2x,p2y,p2z, p3x,p3y,p3z, p4x,p4y,p4z
 RLSEL1 n,-1,-1,0, p1x,p1y,p1z,0.001,1,1,999,999
 #WHILE (i <= sp)
  RENCLR
  RENSET
  CAL j = j + es
  GETFIGD j,at1,at2,at3,p1x,p1y,p1z, p2x,p2y,p2z, p3x,p3y,p3z, p4x,p4y,p4z
  RLSEL1 n,-1,-1,0, p1x,p1y,p1z,0.001,1,1,999,999
  R_RULED 0,-1,-1,0
  CAL i = i + 1
 #END
 // --- 線を消す ---
 ALLSEL n,1,1,999,999
 S_DELE

単に実行しただけであれば単なる円柱です。
20090625a
楕円中間半径と楕円終了半径を指定します。
変化が直線的ですが・・・
20090625b
最終中心を指定します。
20090625c
傾きも変更できるようにしてますので、ねじれをつけることも出来ます。
スケッチアップに送ります。
20090625d
ソフトニングします。
20090625e
みたいな。

[GSU+Script!3D] 噴水?

というわけで、取りあえず
Script!3D で 噴水もどきを作ってみました。
はっきり言って、遅いです。
// 噴水?
#VAR
 h = 2000  ;*高さ
 r = 2000  ;*半径
 sn = 1000  ;*水滴の数
 sr = 10   ;*水滴の半径
 i
 n
 w1
 w2
 w3
 wx
 wy
 wz
#DRAW
 RANDOMIZE
 PEN 4
 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
  MATRIXO wx,wy,wz
  SPHERE n,SetArcSep,sr,0
  CAL i = i + 1
 #END

実行します。
20090522d
スケッチアップに送ります。
20090522e
とりあえず、ソフトニングしてマテリアルを半透明の青にしてスタイルでエッジを非表示にした状態。

水滴は球で描かせてますが、分割数12で送ると、72000個の面に。うちのノートパソコンだと非常に遅いのでパス。分割数4で送る=8面体を1000個=8000個の面、でかろうじて描いている感じ。パソコンのスペックが高い方は、分割数を多くした方が綺麗に見えると思います。数値は適当に変えて下さい。座標はランダムです。他の水滴との干渉チェックなどはありません。

[GSU+Script!3D] 円グラフ

次に円グラフです。
X-Y平面での90°位置から時計回りに描いていきます。
// 円グラフ
#VAR
 sr = 100   ;*円サイズ半径[mm]
 sz = 50   ;*円柱高さ[mm]
 sp = 5    ;*分割数
 dmy     ;*----------
 v01 = 10  ;*値01
 v02 = 20  ;*値02
 v03 = 30  ;*値03
 v04 = 40  ;*値04
 v05 = 50  ;*値05
 v06 = 60  ;*値06
 v07 = 70  ;*値07
 v08 = 80  ;*値08
 v09 = 90  ;*値09
 v10 =100  ;*値10
 vt
 vm = 0
 n
 w1
 w2
 w3
#DRAW
 CAL vt =   v01 + v02 + v03 + v04 + v05
 CAL vt = vt + v06 + v07 + v08 + v09 + v10
 CAL vm = vt/(2.0*PI)
 #IF (vm == 0)
  CAL vm = 1/(2.0*PI)
 #END
 CAL w2 = 0.5*PI  // 開始角度・時計回り

 // 値01
 PEN 1  // 色
 CAL w1 = w2 - v01 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値02
 PEN 2  // 色
 CAL w1 = w2 - v02 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値03
 PEN 3  // 色
 CAL w1 = w2 - v03 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値04
 PEN 4  // 色
 CAL w1 = w2 - v04 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値05
 PEN 5  // 色
 CAL w1 = w2 - v05 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値06
 PEN 6  // 色
 CAL w1 = w2 - v06 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値07
 PEN 7  // 色
 CAL w1 = w2 - v07 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値08
 PEN 8  // 色
 CAL w1 = w2 - v08 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値09
 PEN 9  // 色
 CAL w1 = w2 - v09 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1

 // 値10
 PEN 11  // 色
 CAL w1 = w2 - v10 /vm
 PCYLIND n,sp,sr,sr,0,sz, w1,w2,1,1,0
 CAL w2 = w1
実行します。
20090516n
スケッチアップに送ります。
20090516o
ソフトニングします。
20090516p
という感じです。

[GSU+Script!3D] 棒グラフ2

ついでなので、直方体ではなくて円柱で作図させるパターンです。
// 棒グラフ2
//  棒を円柱で表現する
//  X軸上に並べていきます
#VAR
 sx = 5   ;*棒サイズX半径[mm]
 sy = 5   ;*棒サイズY半径[mm]
 ss = 4   ;*棒間隔[mm]
 dmy     ;*----------
 v01 = 10  ;*値01
 v02 = 20  ;*値02
 v03 = 30  ;*値03
 v04 = 40  ;*値04
 v05 = 50  ;*値05
 v06 = 60  ;*値06
 v07 = 70  ;*値07
 v08 = 80  ;*値08
 v09 = 90  ;*値09
 v10 =100  ;*値10
 vmax
 ptc
 n
 w1
 w2
 w3
#DRAW
 CAL vmax = 0
 CAL ptc = sx*2 + ss
 MATRIXL ptc,0,0

 // 値01
 PEN 1  // 色
 CAL w1 = v01
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値02
 PEN 2  // 色
 CAL w1 = v02
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値03
 PEN 3  // 色
 CAL w1 = v03
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値04
 PEN 4  // 色
 CAL w1 = v04
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値05
 PEN 5  // 色
 CAL w1 = v05
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値06
 PEN 6  // 色
 CAL w1 = v06
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値07
 PEN 7  // 色
 CAL w1 = v07
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値08
 PEN 8  // 色
 CAL w1 = v08
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値09
 PEN 9  // 色
 CAL w1 = v09
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値10
 PEN 10  // 色
 CAL w1 = v10
 ECYLIND n,SetArcSep,sx,sy,0,w1,1,1,0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 最終処理(線を描く)
 GETL2W w1,w2,w3, 0,0,0
 CAL vmax = vmax + ss  // 上に隙間を追加
 INIMATR  // 変換マトリックス初期化
 PEN 7
 LINE3D n, 0,0,0, 0,0,vmax
 LINE3D n, 0,0,vmax, w1,0,vmax
 LINE3D n, w1,0,vmax, w1,0,0
実行します。
20090516k
スケッチアップに送ります。
20090516l
上面・底面に出来る不要な線を消しゴムツールで消して、全選択をしてソフトニングします。
20090516m
という感じ。

[GSU+Script!3D] 棒グラフ1

何の気なしに、ぼぉ〜っとしてて
こないだ思ってた、棒グラフでも お遊びで作ってみますか〜
って事で...
とりあえず、10項目。
項目数を変える場合には、必要な分だけ変数増やして、棒作図の部分は同じパターンですから、必要な分だけ、増減させて下さい。 あぁ、こういうとき配列変数とか欲しくなってしまいますね〜
// 棒グラフ1
//  棒を直方体で表現する
//  X軸上に並べていきます
#VAR
 sx = 10   ;*棒サイズX[mm]
 sy = 10   ;*棒サイズY[mm]
 ss = 4   ;*棒間隔[mm]
 dmy     ;*----------
 v01 = 10  ;*値01
 v02 = 20  ;*値02
 v03 = 30  ;*値03
 v04 = 40  ;*値04
 v05 = 50  ;*値05
 v06 = 60  ;*値06
 v07 = 70  ;*値07
 v08 = 80  ;*値08
 v09 = 90  ;*値09
 v10 =100  ;*値10
 vmax
 ptc
 n
 w1
 w2
 w3
#DRAW
 CAL vmax = 0
 CAL ptc = sx + ss
 MATRIXL ptc,0,0

 // 値01
 PEN 1  // 色
 CAL w1 = v01
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値02
 PEN 2  // 色
 CAL w1 = v02
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値03
 PEN 3  // 色
 CAL w1 = v03
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値04
 PEN 4  // 色
 CAL w1 = v04
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値05
 PEN 5  // 色
 CAL w1 = v05
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値06
 PEN 6  // 色
 CAL w1 = v06
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値07
 PEN 7  // 色
 CAL w1 = v07
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値08
 PEN 8  // 色
 CAL w1 = v08
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値09
 PEN 9  // 色
 CAL w1 = v09
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 値10
 PEN 10  // 色
 CAL w1 = v10
 CBOX1 n,sx,sy,w1, 0,0,0, 1,1,2,2,2,2, 0
 #IF ( vmax < w1 )
  CAL vmax = w1
 #END
 MATRIXL ptc,0,0

 // 最終処理(線を描く)
 GETL2W w1,w2,w3, 0,0,0
 CAL vmax = vmax + ss  // 上に隙間を追加
 INIMATR  // 変換マトリックス初期化
 PEN 7
 LINE3D n, 0,0,0, 0,0,vmax
 LINE3D n, 0,0,vmax, w1,0,vmax
 LINE3D n, w1,0,vmax, w1,0,0
あぁ〜なんてベタなんでしょう。実行します。
20090516i
スケッチアップに送ります。
20090516j
という感じ。

[GSU] 面取直方体

somemさんのブログの小題:直方体のC面取り
私の場合は、どーも即物的だからなのか、ついつい
20090516a
   ↓
20090516b
   ↓
20090516c
   ↓
20090516d
   ↓
20090516e
ってやってしまいます。

ちなみに
20090516f
ってやるとどうなるのだろう?と思ったら、うまく行きませんでした〜

Script!3D でいけば以前に作った「面取直方体作図テスト03」の数値を少し変えて
// 面取直方体作図テスト03
#VAR
 sx = 500   ;*X軸方向長さ[mm]
 sy = 500   ;*Y軸方向長さ[mm]
 sz = 250   ;*高さ[mm]
 cx = 50   ;*X軸方向面取量[mm]
 cy = 50   ;*Y軸方向面取量[mm]
 cz = 50   ;*Z軸方向面取量[mm]
 n
#DRAW
 PEN 8
 CBOX2 n,sx,sy,sz, cx,cy,cz, 1,1,2,2,2,2, 0
を実行すると
20090516g
となって、スケッチアップに送って
20090516h
という感じ。

SwirlX3D Viewer 2.5.2.0

ぼぉ〜っとネット閲覧していたら
「SwirlX3D Viewer」がバージョンアップしているとの事で
ダウンロードしてきました。
http://www.pinecoast.com/swvdownload.htm

「Script!3D」で X3Dファイル出力をつけた時に、幾つかビューワーやプラグインのソフトをダウンロードして利用させてもらいましたが、当時の「SwirlX3D Viewer」のバージョンは 2.0.4 で、一部、意図した表示が行われていなかったのですが、今回の 2.5.2.0 を動かしてみると、ちゃんと表示されているみたい。動きも良くなったような気がします。

[GSU+Script!3D] ドーナツ

建築資料館の掲示板で下記のような質問がありました。
初心者です 直線を使ってなら多少操作もできるようになりなしたが 蛍光灯のドーナツのような形状はどうやって操作するのでしょうか よろしくお願いします
http://www.ath-j.com/cbbs2/cbbs.cgi?mode=all&namber=869&type=0&space=0&no=19
大円を描いて小円を描いてフォローミー
ちなみに「Script!3D」でいけば
#VAR
 r1 = 50  ;*小円半径
 r2 = 200  ;*大円半径
 n
#DRAW
 TORUS n,12,24,r1,r2,0
みたいな感じかなぁ
20090511a
   ↓ スケッチアップ
20090511b

「jww2sc」続

もともとのこのツールのきっかけは、
Jw_cad で断面の絵を描いて・・・
20090509j
範囲選択・基点指定・コピーをして
jww2scで変換
Script!3Dに持っていって
#VAR
 n
#DRAW
 LINE2D n, 0,2.5, 7.5,2.5
 LINE2D n, 7.5,2.5, 7.5,0
 LINE2D n, 7.5,0, 10,0
 LINE2D n, 10,0, 10,2.5
 LINE2D n, 20,25, 17.5,25
 LINE2D n, 10,5, 0,5
 ARC2D n,SetArcSep, -0.039872836,20.4343879271, 20.5533772623, -1.06045167528744,0.22400301612898
 ARC2D n,SetArcSep, 0.1900604437,20.0849773336, 17.9942061579, -0.99420190889849,0.27666056835734
と表示されるものに追記
#VAR
 n
 i
 w1
 w2
 w3

#DRAW
 // X-Z平面を X-Y平面とする=X軸回りに90度回転
 CAL w1 = 0.5*PI
 ROXMATR w1
 // 断面を描く

 LINE2D n, 0,2.5, 7.5,2.5
 LINE2D n, 7.5,2.5, 7.5,0
 LINE2D n, 7.5,0, 10,0
 LINE2D n, 10,0, 10,2.5
 LINE2D n, 20,25, 17.5,25
 LINE2D n, 10,5, 0,5
 ARC2D n,SetArcSep, -0.039872836,20.4343879271, 20.5533772623, -1.06045167528744,0.22400301612898
 ARC2D n,SetArcSep, 0.1900604437,20.0849773336, 17.9942061579, -0.99420190889849,0.27666056835734
 // 回転体
 CAL w1 = 0
 CAL w2 = 0
 CAL w3 = 2.5
 RLSEL1 i,-1,-1,1, w1,w2,w3,0.000001, 1,1,999,999
 CAL w1 = 2.0*PI
 S_ROT1 0,-1,-1,SetArcSep, 0,0,0, 0,0,100, w1
 // 線を消します
 ALLSEL i,1,1,999,999
 S_DELE
[標準値に戻す]をクリックして実行
20090509k
という感じなイメージです。

まぁ、工程が面倒といえば面倒かもしれませんけれど。

Script!3D支援用ツール「jww2sc」

当方のサイトフリーウェアコーナーに、「jww2sc」というツールをアップしました。
Script!3D支援用ツール
Jw_cad(for Windows/JWW)を起動し、範囲選択→コピーを行った後に本ツールで[取込]を行い、Script!3D用すくりぷとコードに変換する事が出来ます。変換後はコピー&ペーストで利用して下さい。
※Jw_cadクリップボードデータは図寸となっている為、実寸にするためレイヤグループ[0]の縮尺をかけています。寸法図形要素・寸法属性の要素・文字要素・ブロック図形・画像の変換は行いません。点マーカーは単純な点データとなります。線種は実線のみとなります。色設定値は白背景時のJWW初期値と同じです。SXFユーザー色は全て[7]です。ソリッド任意色は256色範囲に丸められます。データ容量が多くなればなるほど遅くなります。
まず、Jw_cad を起動して、標準添付の「Aマンション平面例.jww」を開いて、範囲選択で[全選択]し、基準点を指定し、[コピー]をします。
20090509a
  ↓
20090509b
本ツールを動かして(先に起動していても構いません)[取り込み]のボタンをクリックします。
20090509c
下の小さい画面にJw_cadクリップボード内容が表示されます。変換対象のチェックを行って、[変換]のボタンをクリックします。
20090509d
[全選択してコピー]のボタンをクリックします。
20090509e

「Script!3D」を起動して、スクリプトコードを貼り付けます。
20090509f

[実行]します。
20090509g
スケッチアップに送ります。
20090509h
あとはスケッチアップにて・・・
20090509i

ソリッド図形を送る際、余計な線が入ることがあります。三角形ソリッド・四角形ソリッドは一応法線チェックをして、全部上が表になるようにしています。ハッチング線やソリッド図形が邪魔になる場合もあるでしょうからチェックボックスで選択出来るようにしています。

「txt2sc」続

前回の続き

「txt2sc」から Script!3D へ受け渡す際には、変換マトリックス座標系の命令「LINE2D」「LINE3D」で受け渡されますので、Script!3D 側で、変換マトリックス操作をしたあとにそれらの作図コマンドを実行することによって、Z座標値を加えた作図をしたい、とか、斜めにしたい、などのようなことが可能になります。

・Z座標値を変えたい場合
Script!3Dにコードを貼り付けた後、「#DRAW」の次の行に、例えば、

#VAR
 n
#DRAW
 MATRIXO 0,0,5
 LINE2D n, 0.692307692307692,3.20417364213384, 0.576923076923077,1.29539954535835
 LINE2D n, 0.576923076923077,1.29539954535835, 1.5,1.7901595442403
 LINE2D n, 1.5,1.7901595442403, 1.5,1.27092877500953
・・・

のように、「MATRIXO」や「MATRIXL」を行います。
実行すると、下記のようになります。
20090508a

   ↓ スケッチアップ
20090508b


#VAR
 n
 i
#DRAW
 CAL i = 0
 #WHILE (i < 5)
 MATRIXL 0,0,5
・・・・
 CAL i = i + 1
 #END

のようにループ(繰り返し)にすれば、下記のような図も描けます。
20090508c

   ↓ スケッチアップ
20090508d


・斜めにしたい場合

同様に、変換マトリックスの軸回転を行えば、斜めに作図することも出来ます。例えば、X軸回りに30°回転したい場合は、例えば、以下のようになります。

#VAR
 n
 a
#DRAW
 CAL a = 30/180*PI
 ROXMATR a
 ・・・

これを実行すると以下のようになります。
20090508e

   ↓ スケッチアップ
20090508f

Recent Comments