diff options
author | Clemens Barth <barth@root-1.de> | 2012-11-10 20:36:31 +0400 |
---|---|---|
committer | Clemens Barth <barth@root-1.de> | 2012-11-10 20:36:31 +0400 |
commit | 0b4e923d8baeb7a6bab326e3dfe8fcb7a45ae7b0 (patch) | |
tree | 01225c0a88da7f34eb30e9bdf6c842889cfcf288 | |
parent | cdab4a56cb35f2bf5bd41942e82edcc3dc9bb744 (diff) |
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
-rw-r--r-- | io_mesh_pdb/__init__.py | 23 | ||||
-rw-r--r-- | io_mesh_pdb/export_pdb.py | 2 | ||||
-rw-r--r-- | 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 62c7ca67..15d66426 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 515f9482..81b60cb9 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 fec026b4..95a83ae3 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 |