#はじめに
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以降で使用可能だということで、試せませんでした。
これで、例えば、タンパク質立体構造上のアミノ酸残基に、注釈テキストをつけることができるようになりました。
#次の記事
調べたら、続けてここに書きます..............