投稿

5月, 2022の投稿を表示しています

Blenderで芳香環に面を張るやつ

イメージ
 こんなやつです。 手作業でやると思いのほかめんどくさかったので、少し楽にしようとしました。 方針としては、 ・手作業で原子を選択する ・選択されている原子の中心座標を頂点として面を生成する ・ついでにマテリアルも設定しておく という感じです。 以下スクリプトです。 import bpy name = "plane" color = (0,0.7,0.95,1) emit = 15 ma = bpy.data.materials.new(name) ma.use_nodes = True bsdf = ma.node_tree.nodes["Principled BSDF"] bsdf.inputs[0].default_value = color bsdf.inputs[4].default_value = 0.2 bsdf.inputs[7].default_value = 0.3 bsdf.inputs[18].default_value = emit ma.diffuse_color = color if(len(bpy.context.selected_objects))>2: verts=[] face=[] idx=0 for o in bpy.context.selected_objects: verts.append(o.location) face.append(idx) idx+=1 o.select_set(False) faces=[face] mesh = bpy.data.meshes.new(name) obj = bpy.data.objects.new(name,mesh) bpy.context.collection.objects.link(obj) mesh.from_pydata(verts,[],faces) mesh.update bpy.context.view_layer.objects.active = obj bpy.ops.object.mode_set(mode

Blenderで読み込んだ分子モデルにマテリアルを自動設定したかった

イメージ
23.9.14追記 修正版作りました。 molファイルを編集することなく、そのまま読み込めるようにしてあります。 https://sanasnote.blogspot.com/2023/09/blendermol.html 以前こんな投稿をしました。 →  http://sanasnote.blogspot.com/2021/07/3d.html Avogadroでmolファイルを3Dモデルに変換してBlenderに読み込んで、なんやかんや着色したりパワポに貼ったりするという内容です。 マテリアルをひとつひとつ選択して設定しなきゃいけないので、分子量が大きかったり構造が混み入ってたりすると苦行になります。 というわけで、なんかいい感じに自動設定してくれるスクリプト作れないかな?と思ってやってみたのがこの記事です。 結論から言うと、最低限動くことは動く、という感じです。 具体的な方針としては、 1. molファイルを原子部分と結合部分の情報にそれぞれ分割して保存する 2. pythonでtxtファイルを読み込み、原子と結合それぞれの原子種リストを作る ※Blenderに読み込んだ時のオブジェクトの並びは、元のmolファイル中の原子の順番に対応しています 3. リストに従ってマテリアルをひとつずつ割り当てていく 以下スクリプトです。 (Stickモデル用です。CPKモデル用は ページ末尾 に貼っておきます。) #for stick-model import bpy import csv import re #-------------------------------------------- # molファイルから作成した原子の情報と結合の情報が入ったtxtファイルを指定する atom_file="C:/******************.txt" bond_file="C:/******************.txt" #---------------------------------------------------------- # delete all materials and material_slots # あらかじめマテリアルとマテリアル