RubyでSketchUpメモ


はじめに

SketchUpは立体的な絵を描くことができる(言い換えれば立体モデルを作ることができる)ソフトウエアです。SketchUpは、手作業で立体モデルを作っていくことができますが、さらに、プログラミング言語であるRubyを使って、立体モデルを作ることもできます。

本記事は、rubyを使ってSketchUpで立体モデルを作成することに関しての筆者の覚書記事です。随時更新します。筆者はRubyはほぼ初めて、SketchUpは以前、手作業でこんなの ↓ を作ったり、していたことがあります(これは、実験で使うプラスチック製のチューブで、俗にエッペンというやつです)。

先の投稿では、タンパク質の立体構造データをもとに、SketchUpで立体モデルを作ることができました。

この記事は、さらに色々調べたことを随時更新する記事です。

注釈を立体モデル上に配置する (Textクラスの使い方)

手作業では、このような注釈を、立体モデル上につけることができます。

Ruby APIではどのようにすれば良いでしょうか?

調べてみると、これはSketchupのTextクラスのオブジェクトです。Textクラスは、SketchupのDrawingelementクラスのサブクラスです。

選択した状態で以下を実行してみます。

selectedObjects = Sketchup.active_model.selection
t = selectedObjects[0]
t.arrow_type
# 3

typeを変更してみます。

t.arrow_type = 0  #矢印なし 
t.arrow_type = 1  #横棒
t.arrow_type = 2  #丸
t.arrow_type = 3  #上の例の通り
t.arrow_type = 4  #ちょっと大きめの矢印

デフォルトのやつが一番良い感じな気がします。
Textから対象までを結んだ線はleaderと呼ぶようです。

Textをrubyで描画する

ここまで調べたらあとはrubyでTextを描くのは簡単だろうと思ったら、leaderを表示できずに手こずりました。以下のコードを見てください。

model = Sketchup.active_model
entities = model.entities
point = Geom::Point3d.new([10,100,0])  #テキストを関連づける点
text = entities.add_text( "Text", point)  #テキストを追加する

p text.has_leader?
# true
p text.display_leader?
# false
p text.vector
# Vector3d(0, 0, 0)

要は、新規に作ったTextオブジェクトは、(1) leaderは持っているけれども非表示、(2) Textをセットした点と、表示文字をつなぐvectorがゼロベクトル、であるのが問題でした。ここを変更してやれば、表示されるようになります。

text.display_leader = true #leaderを表示する設定
text.vector = Geom::Vector3d.new(10,10,10) #テキストをセットしたポイントと、テキストまでのベクターをセット

こうなりました。

他に関連しそうなのは、線の太さと、表示テキストの変更でしょうか。

t.line_weight = 10
t.text = "変更後のテキスト"


線を太くすると、先端の矢印が埋まってしまうようですね。

Textは、ほかのDrawingElementに、アタッチできるようですが、SketchUp 2019以降で使用可能だということで、試せませんでした。

これで、例えば、タンパク質立体構造上のアミノ酸残基に、注釈テキストをつけることができるようになりました。

次の記事

調べたら、続けてここに書きます..............