[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3157] trunk/py/scripts/addons/ io_mesh_pdb:

Clemens Barth barth at root-1.de
Thu Mar 22 15:13:41 CET 2012


Revision: 3157
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3157
Author:   blendphys
Date:     2012-03-22 14:13:37 +0000 (Thu, 22 Mar 2012)
Log Message:
-----------

1. New: The user can now decide whether the panel is always, once or never shown 
after a PDB file is loaded. Note that the panel is quite essential since it 
helps quickly modifying PDB structures.
2. Some code cleaning
3. Wiki has been updated

Blendphys 

Modified Paths:
--------------
    trunk/py/scripts/addons/io_mesh_pdb/__init__.py
    trunk/py/scripts/addons/io_mesh_pdb/export_pdb.py
    trunk/py/scripts/addons/io_mesh_pdb/import_pdb.py

Modified: trunk/py/scripts/addons/io_mesh_pdb/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_mesh_pdb/__init__.py	2012-03-22 14:13:35 UTC (rev 3156)
+++ trunk/py/scripts/addons/io_mesh_pdb/__init__.py	2012-03-22 14:13:37 UTC (rev 3157)
@@ -20,16 +20,19 @@
     "name": "PDB Atomic Blender",
     "description": "Loading and manipulating atoms from PDB files",
     "author": "Clemens Barth",
-    "version": (1,2),
+    "version": (1,3),
     "blender": (2,6),
     "location": "File -> Import -> PDB (.pdb), Panel: View 3D - Tools",
     "warning": "",
-    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Import-Export/PDB",
+    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/"
+                "Py/Scripts/Import-Export/PDB",
     "tracker_url": "http://projects.blender.org/tracker/"
                    "index.php?func=detail&aid=29226",
     "category": "Import-Export"
 }
 
+import os
+import io
 import bpy
 from bpy.types import Operator, Panel
 from bpy_extras.io_utils import ImportHelper, ExportHelper
@@ -46,6 +49,7 @@
 
 
 ATOM_PDB_ERROR = ""
+ATOM_PDB_PANEL = ""
 
 # -----------------------------------------------------------------------------
 #                                                                           GUI
@@ -54,20 +58,25 @@
 # chosen via the menu 'File -> Import'
 class CLASS_atom_pdb_panel(Panel):
     bl_label       = "PDB - Atomic Blender"
-    #bl_space_type  = "PROPERTIES"
-    #bl_region_type = "WINDOW"
-    #bl_context     = "physics"
-    # This could be also an option ... :
     bl_space_type  = "VIEW_3D"
-    #bl_region_type = "TOOLS"
     bl_region_type = "TOOL_PROPS"
 
     @classmethod
     def poll(self, context):
-        if import_pdb.ATOM_PDB_FILEPATH == "":
+        global ATOM_PDB_PANEL
+        
+        if ATOM_PDB_PANEL == "0" and import_pdb.ATOM_PDB_FILEPATH == "":
             return False
-        else:
+        if ATOM_PDB_PANEL == "0" and import_pdb.ATOM_PDB_FILEPATH != "":
             return True
+        
+        if ATOM_PDB_PANEL == "1":
+            return True
+        
+        if ATOM_PDB_PANEL == "2":
+            return False
+        
+        return True
 
     def draw(self, context):
         layout = self.layout
@@ -498,8 +507,60 @@
         return {'FINISHED'}
 
 
+def DEF_panel_yes_no():
+    global ATOM_PDB_PANEL
+
+    datafile_path = bpy.utils.user_resource('SCRIPTS', path='', create=False)
+    if os.path.isdir(datafile_path) == False:
+        bpy.utils.user_resource('SCRIPTS', path='', create=True)
+        
+    datafile_path = os.path.join(datafile_path, "presets")
+    if os.path.isdir(datafile_path) == False:
+        os.mkdir(datafile_path)   
+        
+    datafile = os.path.join(datafile_path, "io_mesh_pdb.pref")
+    if os.path.isfile(datafile):
+        datafile_fp = io.open(datafile, "r")
+        for line in datafile_fp:
+            if "Panel" in line:
+                ATOM_PDB_PANEL = line[-2:]
+                ATOM_PDB_PANEL = ATOM_PDB_PANEL[0:1]
+                bpy.context.scene.use_panel = ATOM_PDB_PANEL
+                break       
+        datafile_fp.close()
+    else:
+        DEF_panel_write_pref("0") 
+
+
+def DEF_panel_write_pref(value): 
+    datafile_path = bpy.utils.user_resource('SCRIPTS', path='', create=False)
+    datafile_path = os.path.join(datafile_path, "presets")
+    datafile = os.path.join(datafile_path, "io_mesh_pdb.pref")
+    datafile_fp = io.open(datafile, "w")
+    datafile_fp.write("Atomic Blender PDB - Import/Export - Preferences\n")
+    datafile_fp.write("================================================\n")
+    datafile_fp.write("\n")
+    datafile_fp.write("Panel: "+value+"\n\n\n")
+    datafile_fp.close()        
+
+
+class CLASS_atom_pdb_error_dialog(bpy.types.Operator):
+    bl_idname = "atom_pdb.error_dialog"
+    bl_label = "Attention !"
+    
+    def draw(self, context):
+        layout = self.layout
+        row = layout.row()
+        row.label(text="                          "+ATOM_PDB_ERROR) 
+    def execute(self, context):
+        print("Atomic Blender - Error: "+ATOM_PDB_ERROR+"\n")
+        return {'FINISHED'}
+    def invoke(self, context, event):
+        return context.window_manager.invoke_props_dialog(self)        
+
+
 # This is the class for the file dialog of the importer.
-class ImportPDB(Operator, ImportHelper):
+class CLASS_ImportPDB(Operator, ImportHelper):
     bl_idname = "import_mesh.pdb"
     bl_label  = "Import Protein Data Bank(*.pdb)"
     bl_options = {'PRESET', 'UNDO'}
@@ -507,6 +568,13 @@
     filename_ext = ".pdb"
     filter_glob  = StringProperty(default="*.pdb", options={'HIDDEN'},)
 
+    bpy.types.Scene.use_panel = EnumProperty(
+        name="Panel",
+        description="Choose whether the panel shall appear or not in the View 3D.",
+        items=(('0', "Once", "The panel appears only in this session"),
+               ('1', "Always", "The panel always appears when Blender is started"),
+               ('2', "Never", "The panel never appears")),
+               default='0')  
     use_camera = BoolProperty(
         name="Camera", default=False,
         description="Do you need a camera?")
@@ -528,9 +596,13 @@
     scale_distances = FloatProperty (
         name = "Distances", default=1.0, min=0.0001,
         description = "Scale factor for all distances")
-    use_center = BoolProperty(
-        name = "Object to origin", default=True,
-        description = "Put the object into the global origin")
+    atomradius = EnumProperty(
+        name="Type of radius",
+        description="Choose type of atom radius",
+        items=(('0', "Pre-defined", "Use pre-defined radius"),
+               ('1', "Atomic", "Use atomic radius"),
+               ('2', "van der Waals", "Use van der Waals radius")),
+               default='0',)        
     use_sticks = BoolProperty(
         name="Use sticks", default=True,
         description="Do you want to display the sticks?")
@@ -555,13 +627,9 @@
     sticks_dist = FloatProperty(
         name="Distance", default = 1.1, min=1.0, max=3.0,
         description="Distance between sticks measured in stick diameter")        
-    atomradius = EnumProperty(
-        name="Type of radius",
-        description="Choose type of atom radius",
-        items=(('0', "Pre-defined", "Use pre-defined radius"),
-               ('1', "Atomic", "Use atomic radius"),
-               ('2', "van der Waals", "Use van der Waals radius")),
-               default='0',)
+    use_center = BoolProperty(
+        name = "Object to origin", default=True,
+        description = "Put the object into the global origin")           
     datafile = StringProperty(
         name = "", description="Path to your custom data file",
         maxlen = 256, default = "", subtype='FILE_PATH')
@@ -585,6 +653,8 @@
         col.prop(self, "scale_ballradius")
         col.prop(self, "scale_distances")
         row = layout.row()
+        row.prop(self, "atomradius")
+        row = layout.row()
         col = row.column()
         col.prop(self, "use_sticks")
         row = layout.row()        
@@ -606,7 +676,7 @@
         row = layout.row()
         row.prop(self, "use_center")
         row = layout.row()
-        row.prop(self, "atomradius")
+        row.prop(bpy.context.scene, "use_panel")
 
     def execute(self, context):
         # This is in order to solve this strange 'relative path' thing.
@@ -656,13 +726,17 @@
         
         scn.number_atoms = str(atom_number) + " atoms"
         scn.PDB_file = import_pdb.ATOM_PDB_FILEPATH
+      
+        global ATOM_PDB_PANEL
+        ATOM_PDB_PANEL = bpy.context.scene.use_panel
+        DEF_panel_write_pref(bpy.context.scene.use_panel)
 
         return {'FINISHED'}
 
 
 
 # This is the class for the file dialog of the exporter.
-class ExportPDB(Operator, ExportHelper):
+class CLASS_ExportPDB(Operator, ExportHelper):
     bl_idname = "export_mesh.pdb"
     bl_label  = "Export Protein Data Bank(*.pdb)"
     filename_ext = ".pdb"
@@ -674,7 +748,8 @@
         name="Type of Objects",
         description="Choose type of objects",
         items=(('0', "All", "Export all active objects"),
-               ('1', "Elements", "Export only those active objects which have a proper element name")),
+               ('1', "Elements", "Export only those active objects which have"
+                                 " a proper element name")),
                default='1',) 
 
     def draw(self, context):
@@ -690,42 +765,27 @@
         return {'FINISHED'}
 
 
-
-class CLASS_atom_pdb_error_dialog(bpy.types.Operator):
-    bl_idname = "atom_pdb.error_dialog"
-    bl_label = "Attention !"
-    
-    def draw(self, context):
-        layout = self.layout
-        row = layout.row()
-        row.label(text="                          "+ATOM_PDB_ERROR) 
-    def execute(self, context):
-        print("Atomic Blender - Error: "+ATOM_PDB_ERROR+"\n")
-        return {'FINISHED'}
-    def invoke(self, context, event):
-        return context.window_manager.invoke_props_dialog(self)
-
-
 # The entry into the menu 'file -> import'
-def menu_func_import(self, context):
-    self.layout.operator(ImportPDB.bl_idname, text="Protein Data Bank (.pdb)")
+def DEF_menu_func_import(self, context):
+    self.layout.operator(CLASS_ImportPDB.bl_idname, text="Protein Data Bank (.pdb)")
 
 # The entry into the menu 'file -> export'
-def menu_func_export(self, context):
-    self.layout.operator(ExportPDB.bl_idname, text="Protein Data Bank (.pdb)")
+def DEF_menu_func_export(self, context):
+    self.layout.operator(CLASS_ExportPDB.bl_idname, text="Protein Data Bank (.pdb)")
 
 
 def register():
+    DEF_panel_yes_no()
     bpy.utils.register_module(__name__)
-    bpy.types.INFO_MT_file_import.append(menu_func_import)
-    bpy.types.INFO_MT_file_export.append(menu_func_export)
+    bpy.types.INFO_MT_file_import.append(DEF_menu_func_import)
+    bpy.types.INFO_MT_file_export.append(DEF_menu_func_export)
     bpy.types.Scene.atom_pdb = bpy.props.CollectionProperty(type=CLASS_atom_pdb_Properties)    
     bpy.context.scene.atom_pdb.add()
     
 def unregister():
     bpy.utils.unregister_module(__name__)
-    bpy.types.INFO_MT_file_import.remove(menu_func_import)
-    bpy.types.INFO_MT_file_export.remove(menu_func_export)
+    bpy.types.INFO_MT_file_import.remove(DEF_menu_func_import)
+    bpy.types.INFO_MT_file_export.remove(DEF_menu_func_export)
 

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list