From 0b4e923d8baeb7a6bab326e3dfe8fcb7a45ae7b0 Mon Sep 17 00:00:00 2001 From: Clemens Barth <barth@root-1.de> Date: Sat, 10 Nov 2012 16:36:31 +0000 Subject: [PATCH] 1. New: NURBS, mesh and meta balls can now be chosen as atoms. I also updated the Wiki page. 2. There was a small mistake introduced by the last commits. This has been fixed. 3. Code cleaning Blendphys --- io_mesh_pdb/__init__.py | 23 ++++++++++++++--------- io_mesh_pdb/export_pdb.py | 2 +- io_mesh_pdb/import_pdb.py | 29 ++++++++++++++++++----------- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/io_mesh_pdb/__init__.py b/io_mesh_pdb/__init__.py index 62c7ca67a..15d664261 100644 --- a/io_mesh_pdb/__init__.py +++ b/io_mesh_pdb/__init__.py @@ -50,7 +50,7 @@ bl_info = { } import bpy -from bpy.types import Operator, Panel +from bpy.types import Operator from bpy_extras.io_utils import ImportHelper, ExportHelper from bpy.props import (StringProperty, BoolProperty, @@ -79,9 +79,13 @@ class ImportPDB(Operator, ImportHelper): use_lamp = BoolProperty( name="Lamp", default=False, description = "Do you need a lamp?") - use_mesh = BoolProperty( - name = "Mesh balls", default=False, - description = "Use mesh balls instead of NURBS") + ball = EnumProperty( + name="Type of ball", + description="Choose ball", + items=(('0', "NURBS", "NURBS balls"), + ('1', "Mesh" , "Mesh balls"), + ('2', "Meta" , "Metaballs")), + default='0',) mesh_azimuth = IntProperty( name = "Azimuth", default=32, min=1, description = "Number of sectors (azimuth)") @@ -139,9 +143,10 @@ class ImportPDB(Operator, ImportHelper): row.prop(self, "use_lamp") row = layout.row() col = row.column() - col.prop(self, "use_mesh") - col = row.column(align=True) - col.active = self.use_mesh + col.prop(self, "ball") + row = layout.row() + row.active = (self.ball == "1") + col = row.column(align=True) col.prop(self, "mesh_azimuth") col.prop(self, "mesh_zenith") row = layout.row() @@ -179,8 +184,8 @@ class ImportPDB(Operator, ImportHelper): filepath_pdb = bpy.path.abspath(self.filepath) # Execute main routine - atom_number = import_pdb.import_pdb( - self.use_mesh, + import_pdb.import_pdb( + self.ball, self.mesh_azimuth, self.mesh_zenith, self.scale_ballradius, diff --git a/io_mesh_pdb/export_pdb.py b/io_mesh_pdb/export_pdb.py index 515f9482b..81b60cb90 100644 --- a/io_mesh_pdb/export_pdb.py +++ b/io_mesh_pdb/export_pdb.py @@ -35,7 +35,7 @@ def export_pdb(obj_type, filepath_pdb): if "Stick" in obj.name: continue - if obj.type != "SURFACE" and obj.type != "MESH": + if obj.type not in {'MESH', 'SURFACE', 'META'}: continue name = "" diff --git a/io_mesh_pdb/import_pdb.py b/io_mesh_pdb/import_pdb.py index fec026b44..95a83ae34 100644 --- a/io_mesh_pdb/import_pdb.py +++ b/io_mesh_pdb/import_pdb.py @@ -17,7 +17,6 @@ # ##### END GPL LICENSE BLOCK ##### import bpy -import os from math import pi, cos, sin, sqrt, ceil from mathutils import Vector, Matrix from copy import copy @@ -245,11 +244,12 @@ def read_pdb_file(filepath_pdb, radiustype): color = [0,0,0] location = Vector((0,0,0)) # Append the TER into the list. Material remains empty so far. - all_atoms.append(AtomProp(short_name, - name, - location, - radius, - color,[])) + all_atoms.append(AtomProp(short_name, + name, + location, + radius, + color,[])) + # If 'ATOM or 'HETATM' appears in the line then do ... elif "ATOM" in line or "HETATM" in line: @@ -345,7 +345,7 @@ def read_pdb_file(filepath_pdb, radiustype): return (Number_of_total_atoms, all_atoms) -def read_pdb_file_sticks(filepath_pdb, use_sticks_bonds): +def read_pdb_file_sticks(filepath_pdb, use_sticks_bonds, all_atoms): # The list of all sticks. all_sticks = [] @@ -529,7 +529,7 @@ def build_stick(radius, length, sectors): # ----------------------------------------------------------------------------- # The main routine -def import_pdb(use_mesh, +def import_pdb(Ball_type, Ball_azimuth, Ball_zenith, Ball_radius_factor, @@ -623,7 +623,9 @@ def import_pdb(use_mesh, # ------------------------------------------------------------------------ # READING DATA OF STICKS - all_sticks = read_pdb_file_sticks(filepath_pdb, use_sticks_bonds) + all_sticks = read_pdb_file_sticks(filepath_pdb, + use_sticks_bonds, + all_atoms) # So far, all atoms, sticks and materials have been registered. @@ -828,18 +830,23 @@ def import_pdb(use_mesh, layers=current_layers) else: # NURBS balls - if use_mesh == False: + if Ball_type == "0": bpy.ops.surface.primitive_nurbs_surface_sphere_add( view_align=False, enter_editmode=False, location=(0,0,0), rotation=(0.0, 0.0, 0.0), layers=current_layers) # UV balls - else: + elif Ball_type == "1": bpy.ops.mesh.primitive_uv_sphere_add( segments=Ball_azimuth, ring_count=Ball_zenith, size=1, view_align=False, enter_editmode=False, location=(0,0,0), rotation=(0, 0, 0), layers=current_layers) + # Meta balls + elif Ball_type == "2": + bpy.ops.object.metaball_add(type='BALL', view_align=False, + enter_editmode=False, location=(0, 0, 0), + rotation=(0, 0, 0), layers=current_layers) ball = bpy.context.scene.objects.active ball.scale = (atom[3]*Ball_radius_factor,) * 3 -- GitLab