[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3369] contrib/py/scripts/addons/ object_powerlib.py: Initial commit for PowerLib addon
Olivier Amrein
oenvoyage at gmail.com
Tue May 15 22:43:21 CEST 2012
Revision: 3369
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3369
Author: oenvoyage
Date: 2012-05-15 20:43:21 +0000 (Tue, 15 May 2012)
Log Message:
-----------
Initial commit for PowerLib addon
allows you to edit and manage subgroups of groups (mostly used in linked libraries)
Also my first svn commit so if I did something wrong, please tell me.
Added Paths:
-----------
contrib/py/scripts/addons/object_powerlib.py
Added: contrib/py/scripts/addons/object_powerlib.py
===================================================================
--- contrib/py/scripts/addons/object_powerlib.py (rev 0)
+++ contrib/py/scripts/addons/object_powerlib.py 2012-05-15 20:43:21 UTC (rev 3369)
@@ -0,0 +1,329 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_info = {
+ "name": "Powerlib",
+ "description": "Control panel for managing "
+ "groups contained in linked libraries",
+ "author": "Olivier Amrein, Francesco Siddi",
+ "version": (0, 5),
+ "blender": (2, 53, 0),
+ "location": "Properties Panel",
+ "warning": "", # used for warning icon and text in addons panel
+ "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Object/PowerLib",
+ "tracker_url": "http://projects.blender.org/tracker/index.php?func=detail&aid=31475&group_id=153&atid=467",
+ "category": "3D View"}
+
+import bpy
+from bpy.props import (FloatProperty, BoolProperty,
+FloatVectorProperty, StringProperty, EnumProperty)
+
+# Generic function to toggle across 3 different model resolutions
+def SetProxyResolution(elem,target_resolution):
+
+ obj = bpy.data.objects[elem.name]
+
+ try:
+ dupgroup_name = obj.dupli_group.name
+ except:
+ return
+
+ root = dupgroup_name[:-3]
+ ext = dupgroup_name[-3:]
+ new_group = root + target_resolution
+
+ if ext in {'_hi', '_lo', '_me'}:
+ try:
+ obj.dupli_group = bpy.data.groups[new_group]
+ #print("PowerLib: CHANGE " + str(elem) + " to " + new_group)
+ except:
+ print ("Group %s not found" % new_group.upper())
+
+
+class PowerlibPanel(bpy.types.Panel):
+ bl_label = "Powerlib"
+ bl_idname = "SCENE_PT_powerlib"
+ bl_context = "scene"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'UI'
+
+ def draw(self, context):
+ layout = self.layout
+ object = bpy.context.active_object
+ scene = context.scene
+ active_subgroup = scene.ActiveSubgroup
+
+ if len(active_subgroup) > 0:
+ ob = bpy.data.objects[active_subgroup]
+ else:
+ ob = bpy.context.active_object
+
+ if ob.dupli_type == 'GROUP':
+ group = ob.dupli_group
+ group_name = group.name # set variable for group toggle
+ group_objs = bpy.data.groups[group.name].objects
+ total_groups = 0
+
+ row = layout.row()
+ row.label(" GROUP: " + group.name, icon = 'GROUP')
+ active_subgroup = scene.ActiveSubgroup
+ if len(active_subgroup) > 0:
+ subgroup = row.operator("powerlib.display_subgroup_content",
+ text="Back to subgroup", icon='BACK')
+ subgroup.item_name = ''
+
+ box = layout.box()
+
+ for elem in group_objs:
+
+ if elem.dupli_group != None:
+ row = box.row()
+ col=row.row()
+
+ total_groups += 1
+
+ if (elem.dupli_type == 'GROUP'):
+ subgroup = col.operator("powerlib.toggle_subgroup",
+ text="", icon='RESTRICT_VIEW_OFF', emboss=False)
+ subgroup.display = "NONE"
+ subgroup.item_name = elem.name
+ subgroup.group_name = group.name
+ col.label(elem.name)
+ else:
+ subgroup = col.operator("powerlib.toggle_subgroup",
+ text="", icon='RESTRICT_VIEW_ON', emboss=False)
+ subgroup.display = "GROUP"
+ subgroup.item_name = elem.name
+ subgroup.group_name = group.name
+ col.label(elem.name)
+
+ if len(bpy.data.groups[elem.dupli_group.name].objects.items()) > 1:
+ subgroup = col.operator("powerlib.display_subgroup_content",
+ text="Explore", icon='GROUP')
+ subgroup.item_name = elem.name
+ else:
+ col.label(text="")
+
+ resolution = str(elem.dupli_group.name)[-3:]
+ if resolution in {'_hi', '_lo', '_me'}:
+ res = resolution[-2:].upper()
+
+ subgroup = col.operator("powerlib.toggle_subgroup_res",
+ text=res, icon='FILE_REFRESH')
+ subgroup.item_name = elem.name
+ subgroup.group_name = group.name
+ else:
+ col.label(text="")
+ else:
+ pass
+
+ if total_groups == 0 :
+ box.label(" No subgroups found in this group",icon="LAYER_USED")
+ resolution = str(object.dupli_group.name)[-3:]
+ if resolution in {'_hi', '_lo', '_me'}:
+
+ res = resolution[-2:].upper()
+
+ subgroup = box.operator("powerlib.toggle_subgroup_res",
+ text=res, icon='FILE_REFRESH')
+ subgroup.item_name = bpy.context.active_object.name
+ subgroup.group_name = group.name
+ else:
+ row = layout.row(align=True)
+ row.label("Total groups: " + str(total_groups))
+ box = layout.box()
+ row = box.row(align=True)
+ group = row.operator("powerlib.toggle_group",
+ text="Show All", icon='RESTRICT_VIEW_OFF')
+ group.display = "showall"
+ group.group_name = group_name
+
+ group = row.operator("powerlib.toggle_group",
+ text="Hide All", icon='RESTRICT_VIEW_ON')
+ group.display = "hideall"
+ group.group_name = group_name
+
+ row = box.row()
+
+ row.label(text="Set all subgroups to: ")
+
+ row = box.row(align=True)
+
+ group = row.operator("powerlib.toggle_group",
+ text="Low", icon='MESH_CIRCLE')
+ group.display = "low"
+ group.group_name = group_name
+
+ group = row.operator("powerlib.toggle_group",
+ text="Medium", icon='MESH_UVSPHERE')
+ group.display = "medium"
+ group.group_name = group_name
+
+ group = row.operator("powerlib.toggle_group",
+ text="High", icon='MESH_ICOSPHERE')
+ group.display = "high"
+ group.group_name = group_name
+
+ else:
+ layout.label(" Select a group")
+
+
+class ToggleSubgroupResolution(bpy.types.Operator):
+ bl_idname = "powerlib.toggle_subgroup_res"
+ bl_label = "Powerlib Toggle Soubgroup Res"
+ bl_description = "Change the resolution of a subgroup"
+ item_name = bpy.props.StringProperty()
+ group_name = bpy.props.StringProperty()
+
+ def execute(self, context):
+
+ group_name = self.group_name
+ item_name = self.item_name
+
+ obj = bpy.data.objects[item_name]
+
+ dupgroup = obj.dupli_group
+ dupgroup_name = obj.dupli_group.name
+
+ root = dupgroup_name[:-2]
+ ext = dupgroup_name[-2:]
+
+ if (root + 'me') in bpy.data.groups:
+ if ext == 'hi':
+ new_group = root + "me"
+ elif ext == 'me':
+ new_group = root + "lo"
+ elif ext == 'lo':
+ new_group = root + "hi"
+ else:
+ new_group = dupgroup # if error, do not change dupligroup
+ else:
+ if ext == 'hi':
+ new_group = root + "lo"
+ elif ext == 'lo':
+ new_group = root + "hi"
+ else:
+ new_group = dupgroup # if error, do not change dupligroup
+
+ if bpy.data.groups[dupgroup_name].library:
+ # link needed object
+ filepath = bpy.data.groups[dupgroup_name].library.filepath
+
+ print(filepath)
+ with bpy.data.libraries.load(filepath,
+ link=True) as (data_from, data_to):
+ data_to.groups.append(new_group)
+
+ try:
+ obj.dupli_group = bpy.data.groups[new_group]
+ print("PowerLib: CHANGE " + str(item_name) + " to " + new_group)
+ except:
+ self.report({'WARNING'}, "Group %s not found" % new_group.upper())
+
+ return {'FINISHED'}
+
+
+class ToggleAllSubgroups(bpy.types.Operator):
+ bl_idname = "powerlib.toggle_group"
+ bl_label = "Powerlib Toggle Group"
+ bl_description = "Toggle a property for all subgroups"
+ display = bpy.props.StringProperty()
+ group_name = bpy.props.StringProperty()
+
+ def execute(self, context):
+
+ display = self.display
+ grp_name = self.group_name
+ group_objs = bpy.data.groups[grp_name].objects
+
+ for elem in group_objs:
+ if display == 'showall':
+ elem.dupli_type = "GROUP"
+ #print("Powerlib: SHOW " + elem.name)
+ elif display == 'hideall':
+ elem.dupli_type = "NONE"
+ #print("Powerlib: HIDE " + elem.name)
+ if display == 'low':
+ #print("Powerlib: ALL LOW " + elem.name)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list