ページ

2010年8月23日月曜日

カメラ(目?)の位置を取得するRubyスクリプト

Ruby コンソールで下記を入力することで、Point3dクラスが保持している値としてカメラの位置が表示されます。

Sketchup.active_model.active_view.camera.eye

単位はインチなのでミリにしたい場合は25.4倍します。

Sketchup.active_model.active_view.camera.eye.x*25.4
Sketchup.active_model.active_view.camera.eye.y*25.4
Sketchup.active_model.active_view.camera.eye.z*25.4

カメラの方向を取得したい場合は下記を使用します。

Sketchup.active_model.active_view.camera.target

ただしこれは方向(ベクトル)ではなくウィンドウ中心の三次元座標です。
ベクトルが必要な場合はtargetの点ベクトルからeyeの点ベクトルを引きます。

Sketchup.active_model.active_view.camera.target-Sketchup.active_model.active_view.camera.eye

ベクトルの長さを1にしたい場合はVector3dクラスのnormalizeメソッドを使用します。

(Sketchup.active_model.active_view.camera.target-Sketchup.active_model.active_view.camera.eye).normalize

2010年8月10日火曜日

「アウトライン表示」のツリーをエクスポートするプラグイン(日本語対応)

まだ未完成ながら骨格部分ができたので公開します。

以下からファイル名の拡張子が変わらないようにダウンロードし、「C:\Program Files\Google\Google SketchUp 7\Plugins」に保存して下さい。
pm_outline.rb

このプラグインは日本語に対応するために「nkf.so」を使用します。お持ちでない方は以下からダウンロードし、「C:\Program Files\Google\Google SketchUp 7\Tools」に保存して下さい。
nkf.so

使用法;
プラグイン→Export Outline.

留意点;
Windowsでしか使えない。
Cドライブのルートディレクトリを読み書きできないと使えない。
表示順序が「アウトライン表示」と異なる。(並べ替えしていない)

2010年7月27日火曜日

rubyの1行スクリプトの実行方法

これまでも何度か1行スクリプトを紹介しましたが、実行方法がブログ内検索でもヒットしない様子なので記述しておきます。

1.メニューより、「ウィンドウ」→「Ruby コンソール」
2.スクリプトを直接入力またはコピペしてEnter

曲線のみを全て選択するrubyスクリプト

例によって1行スクリプトです。

s=Sketchup.active_model.selection;Sketchup.active_model.active_entities.each{|i| s.add i if i.kind_of?(Sketchup::Edge) and i.curve}

使用例:
1.2D-DWGをインポートし、3Dモデルを作成する。
2.穴の情報はインポートした2Dデータをそのまま使いたい。
3.このスクリプトを使用し、コピーし、3Dモデル内で「所定の位置に貼り付け」を実施する。

その後、僕の場合は拙作の円、円弧、ポリゴンのセグメント数を減らすプラグインを実行し、データサイズを抑制します。

また、姉妹品として「面のみを全て選択するスクリプト」もあります。
s=Sketchup.active_model.selection;Sketchup.active_model.active_entities.each{|i| s.add i if i.kind_of?(Sketchup::Face)}

2010年7月26日月曜日

円の表示を拡大せずに中心を選択する方法

小さな円の中心を寸法ツールや線ツールで指定したいことってありますよね?通常は、ものすごく拡大し、円周上の端点でホバリングし、「端点」のヒントを出してから中心付近をホバリングし、「中心」のヒントを出してからクリックする方法で指定していると思います。

今日は拡大しなくても円の中心を指定できることを紹介します。この方法であれば、円が画面上点で表示されていても中心を指定できます。

「エンティティ情報」の画面を出しておきます。
1.円の上でホバリングし、「エンティティ情報」に「円」と表示させます。
2.カーソルを円から少し離します。(別のヒントが表示されることのない方向へ)
3.「中心」のヒントが表示されてからクリックします。

円を描いた直後だったり、円の中心を選択した直後だったりすると番号1の段階で「中心」のヒントが表示されることもあります。その場合はそのままクリックすれば指定できます。
寸法ツールで円の中心を指定する場合の画面例。
青い点の下に小さな円があります。
カーソルの先端が完全に円から外れるくらいに離します。

2010年7月25日日曜日

xy平面に平行な線以外を選択解除するスクリプト

sel=Sketchup.active_model.selection; sel.each {|i| sel.remove(i) if (not i.kind_of?(Sketchup::Edge) or not i.start.position.z==i.end.position.z)}


yz平面に平行な線以外を選択解除
sel=Sketchup.active_model.selection; sel.each {|i| sel.remove(i) if (not i.kind_of?(Sketchup::Edge) or not i.start.position.x==i.end.position.x)}


xz平面に平行な線以外を選択解除
sel=Sketchup.active_model.selection; sel.each {|i| sel.remove(i) if (not i.kind_of?(Sketchup::Edge) or not i.start.position.y==i.end.position.y)}

これらのスクリプトは、ワイヤーフレームの三次元データを3D-DXFで入手し、そこから軽いモデルを作る作業の序盤で使用するために作成しました。

2010年7月24日土曜日

rubyにて変数の名前と値をリストアップする方法

rubyにて、例えばglobal_variablesで変数の名前のリストを取得できることは知っていたのですが、その変数が持つ値も同時に取得する方法は知らないまま放置していました。

知ってしまえば基本だったのですが、ネットで逆引き的に検索してもすぐには答えが得られなかったので、一応書いておきます。

グローバル変数の名前と値をリストアップ
global_variables.sort.each{|i| print i,"\t",eval(i),"\n"}

インスタンス変数の名前と値をリストアップ
instance_variables.sort.each{|i| print i,"\t",eval(i),"\n"}

ローカル変数の名前と値をリストアップ
local_variables.sort.each{|i| print i,"\t",eval(i),"\n"}

これを調べ始めた理由は、円、ポリゴン、円弧ツールのデフォルトのセグメント数をSketchUp起動時に自動的に変更したかったからであり、どこかの変数を無理矢理上書きすることで実現できるのではないかと期待していたからです。しかし、それらの値を格納している変数を見つけることはできませんでしたので、結果的には無駄骨でした。でも勉強になったのでオーケイ!