LoginSignup
0
0

More than 3 years have passed since last update.

タンパク質の立体構造をSketchUpでモデル化 その5【玉の描画】

Last updated at Posted at 2020-05-06

はじめに

シリーズ5回目です。
PDBのタンパク質データをもとに、タンパク質をSketchUp内で立体モデル化することを目指しています。
前回までに、タンパク質の主鎖、側鎖をedgeとして描画し、また主鎖を円柱化して色を塗りました。

今回は、SketchUpで球(原子)を作ります。

タンパク質の立体構造をSketchUpでモデル化 その1
タンパク質の立体構造をSketchUpでモデル化 その2【アミノ酸の側鎖を描画】
タンパク質の立体構造をSketchUpでモデル化 その3【アミノ酸の側鎖も含めて描画】
タンパク質の立体構造をSketchUpでモデル化 その4【主鎖を立体に】
タンパク質の立体構造をSketchUpでモデル化 その5【玉の描画】
タンパク質の立体構造をSketchUpでモデル化 その6【ついでにDNAをモデル化】
タンパク質の立体構造をSketchUpでモデル化 その7【最終回】

SketchUpでの球の作り方

円を2つ用意します。円1の中心を通る線上に中心を持つ円2を書きます。円2が乗る平面は先の線と直行するようにします。円1のFaceを円2のedgeにそってfollowmeします。

image.png

わかりやすくするために線を引いてありますが、この線は本来不要です。
フォローミーツールを選んで、上の円のFaceをクリックしてから、下の円の円周でマウスを動かすと下のようになります。

image.png

2つの円の位置関係ですが、中心は同じでも大丈夫です。
つまり、球を作りたい位置にお互いに直行する平面上に乗る2つの円を作り、一方をFaceにして他方の円についてfollowmeしてやれば良いことになります。

球を作るメソッド

中心と半径があれば球が作れます。

def makeSphere(center,radius)
    #第1引数:中心座標 Geom::Point3d あるいは[1,1,5] 3つの値の配列でも良い
    #第2引数:半径 数値

    #描画対象を取得
    model = Sketchup.active_model
    entities = model.active_entities
    #ベクトルを2つ使用。2つが直行していれば何でも良い。
    vector1 = Geom::Vector3d.new(1,0,0)
    vector2 = Geom::Vector3d.new(0,0,1)
    #円1を描く
    circleEdges = entities.add_circle center, vector1, radius
    #円1に面をつける
    face = entities.add_face(circleEdges)
    #円2を描く
    circleEdges2 = entities.add_circle center, vector2, radius*2#半径は適当で良い
    #円1のフェイスに対して、円2をエッジとしてフォローミーツールを適用
    face.followme(circleEdges2)
    #余計なエッジを消す
    for edge in circleEdges2 do
        edge.erase!
    end
end
#動作確認
makeSphere([10,1,2],1)

描画結果

image.png

タンパク質の絵

主鎖から飛び出しているカルボニル結合(C=O)の酸素原子を球にしてみます。前回のコードに、先のメソッド(makeSphere)と
以下のコードを足します。

for line in lines
    dataInLine = line.split
    if dataInLine[0] == "ATOM" and dataInLine[2] == "O"
        center = Geom::Point3d.new(dataInLine[6].to_f, dataInLine[7].to_f, dataInLine[8].to_f)
        makeSphere(center,0.48)
    end
end

こうなりました。
image.png
球がたくさんのFaceでてきているためでしょうか、目立って遅くなってきました。Oだけでかなり遅くなりましたので、原子を描画するのはこれが限界のように思います。それと裏地が表に出てしまっている球が半分くらいあります。

球は基本的に座標が異なるだけなので、どうして裏地が表に出たやつができてしまうのかわかりません。球を10個作って、動かして、また同じ座標に10個作ってみました。

image.png

座標にもよっておらず、ランダムみたいです。面のどちらが表に出ているかをどう判定したら良いでしょうか?原子を球で表現すると、かなり遅くなるようなので、とりあえず保留としたいと思います。

終わりに

次はDNAをモデル化します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0