[Bf-extensions-cvs] [def57c37] master: Object CreaPrim: adress the Scene Update error, fixes

lijenstina noreply at git.blender.org
Sun Jun 11 02:53:19 CEST 2017


Commit: def57c37e67bb54537bad3b80ff5fcfd4b5de431
Author: lijenstina
Date:   Sun Jun 11 02:52:35 2017 +0200
Branches: master
https://developer.blender.org/rBACdef57c37e67bb54537bad3b80ff5fcfd4b5de431

Object CreaPrim: adress the Scene Update error, fixes

Bumped version to 0.3.11
Part of the T51547:
Solve the crash with the scene update check if there is
no active context object
Pep8 cleanup
Replace tabs with spaces
Rename the scene properties to Creaprim_Apply and Creaprim_Name
Cleanup the generated code
Add a check for existence of Polygons in the mesh data -
if they don't exist the generated code will fail

===================================================================

M	object_creaprim.py

===================================================================

diff --git a/object_creaprim.py b/object_creaprim.py
index 9f8456d5..376c725f 100644
--- a/object_creaprim.py
+++ b/object_creaprim.py
@@ -1,5 +1,4 @@
-
-# ***** BEGIN GPL LICENSE BLOCK *****
+# ###### 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
@@ -8,7 +7,7 @@
 #
 # 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
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # If you have Internet access, you can find the license text at
@@ -16,12 +15,12 @@
 # if not, write to the Free Software Foundation,
 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
-# ***** END GPL LICENCE BLOCK *****
-# --------------------------------------------------------------------------
+# ###### END GPL LICENCE BLOCK ######
+
 
 """
 CreaPrim does what it says. I takes the active object and turns it into an
-Add Mesh addon.	When you enable this, your custom object will be added to the
+Add Mesh addon. When you enable this, your custom object will be added to the
 Add->Mesh menu.
 
 
@@ -49,7 +48,7 @@ show up correctly
 bl_info = {
     "name": "CreaPrim",
     "author": "Gert De Roost",
-    "version": (0, 3, 10),
+    "version": (0, 3, 11),
     "blender": (2, 64, 0),
     "location": "View3D > Object Tools",
     "description": "Create primitive addon",
@@ -59,10 +58,6 @@ bl_info = {
     "category": "Object"}
 
 
-if "bpy" in locals():
-	import imp
-
-
 import bpy
 import bmesh
 import os
@@ -71,383 +66,396 @@ import os
 started = 0
 oldname = ""
 
-bpy.types.Scene.Name = bpy.props.StringProperty(
-			name="Name",
-			description="name for primitive",
-			maxlen= 1024)
 
-bpy.types.Scene.Apply = bpy.props.BoolProperty(
-		name = "Apply transform",
-		description = "apply transform to selected objects",
-		default = False)
+def test_data(obj):
+    me = obj.data
+    is_faces = bool(len(me.polygons) > 0)
+    return is_faces
 
 
 class CreaPrim(bpy.types.Operator):
-	bl_idname = "object.creaprim"
-	bl_label = "CreaPrim"
-	bl_description = "Create primitive addon"
-	bl_options = {"REGISTER"}
-
-
-	@classmethod
-	def poll(cls, context):
-		obj = context.active_object
-		return (obj and obj.type == 'MESH' and context.mode == 'OBJECT')
-
-	def invoke(self, context, event):
-
-		global oldname, groupname, message
-
-		scn = bpy.context.scene
-
-		objlist = []
-		for selobj in bpy.context.scene.objects:
-			if selobj.select:
-				objlist.append(selobj)
-
-		try:
-			direc = bpy.utils.script_paths()[1]
-			scriptdir = 1
-		except:
-			direc = bpy.utils.script_paths()[0]
-			scriptdir = 0
-		if len(objlist) > 1:
-			groupname = scn.Name
-			groupname = groupname.replace(".", "")
-			addondir = direc + os.sep + "addons" + os.sep + "add_mesh_" + groupname + os.sep
-			if not os.path.exists(addondir):
-				os.makedirs(addondir)
-		else:
-			groupname = scn.Name
-			print (bpy.utils.script_paths())
-			addondir = direc + os.sep + "addons" + os.sep
-			print (addondir)
-			if not os.path.exists(addondir):
-				os.makedirs(addondir)
-
-		actobj = bpy.context.active_object
-		txtlist = []
-		namelist = []
-		for selobj in objlist:
-			if len(objlist) == 1:
-				objname = scn.Name
-				objname = objname.replace(" ", "_")
-			else:
-				objname = selobj.name
-				objname = objname.replace(".", "")
-				objname = objname.replace(" ", "_")
-				namelist.append(objname)
-			mesh = selobj.to_mesh(scn, True, "PREVIEW")
-			oldname = selobj.name
-			scn.objects.active = selobj
-			if scn.Apply:
-				bpy.ops.object.transform_apply(location=False, rotation=True, scale=True)
-			txt = do_creaprim(self, mesh, objname, addondir)
-			if txt == 0:
-				return {'CANCELLED'}
-			txtlist.append(txt)
-		oldname = actobj.name
-		scn.objects.active = actobj
-
-		if len(txtlist) > 1:
-			makeinit(txtlist, namelist, groupname, addondir)
-			bpy.ops.wm.addon_enable(module="add_mesh_" + groupname)
-		else:
-			bpy.ops.wm.addon_enable(module="add_mesh_" + str.lower(objname))
-
-		if scriptdir == 1:
-			message = "Add Mesh addon " + groupname + " saved to user scripts directory."
-		else:
-			message = "Add Mesh addon " + groupname + " saved to main scripts directory."
-		bpy.ops.creaprim.message('INVOKE_DEFAULT')
-
-		return {'FINISHED'}
+    bl_idname = "object.creaprim"
+    bl_label = "CreaPrim"
+    bl_description = "Create a primitive add-on"
+    bl_options = {"REGISTER"}
+
+    @classmethod
+    def poll(cls, context):
+        obj = context.active_object
+        return (obj and obj.type == 'MESH' and context.mode == 'OBJECT')
+
+    def invoke(self, context, event):
+
+        global oldname, groupname, message
+
+        scn = bpy.context.scene
+
+        objlist = []
+        for selobj in bpy.context.scene.objects:
+            if selobj.select and test_data(selobj) is True:
+                objlist.append(selobj)
+
+        if len(objlist) == 0:
+            self.report({'WARNING'},
+                        "Please select Mesh objects containing Polygons. Operation Cancelled")
+            return {"CANCELLED"}
+
+        try:
+            direc = bpy.utils.script_paths()[1]
+            scriptdir = 1
+        except:
+            direc = bpy.utils.script_paths()[0]
+            scriptdir = 0
+
+        if len(objlist) > 1:
+            groupname = scn.Creaprim_Name
+            groupname = groupname.replace(".", "")
+            addondir = direc + os.sep + "addons" + os.sep + "add_mesh_" + groupname + os.sep
+            if not os.path.exists(addondir):
+                os.makedirs(addondir)
+        else:
+            groupname = scn.Creaprim_Name
+            print(bpy.utils.script_paths())
+            addondir = direc + os.sep + "addons" + os.sep
+            print(addondir)
+            if not os.path.exists(addondir):
+                os.makedirs(addondir)
+
+        actobj = bpy.context.active_object
+        txtlist = []
+        namelist = []
+        for selobj in objlist:
+            if len(objlist) == 1:
+                objname = scn.Creaprim_Name
+                objname = objname.replace(" ", "_")
+            else:
+                objname = selobj.name
+                objname = objname.replace(".", "")
+                objname = objname.replace(" ", "_")
+                namelist.append(objname)
+            mesh = selobj.to_mesh(scn, True, "PREVIEW")
+            oldname = selobj.name
+            scn.objects.active = selobj
+
+            if scn.Creaprim_Apply:
+                bpy.ops.object.transform_apply(location=False, rotation=True, scale=True)
+            txt = do_creaprim(self, mesh, objname, addondir)
+
+            if txt == 0:
+                return {'CANCELLED'}
+
+            txtlist.append(txt)
+
+        oldname = actobj.name
+        scn.objects.active = actobj
+
+        if len(txtlist) > 1:
+            makeinit(txtlist, namelist, groupname, addondir)
+            bpy.ops.wm.addon_enable(module="add_mesh_" + groupname)
+        else:
+            bpy.ops.wm.addon_enable(module="add_mesh_" + str.lower(objname))
+
+        if scriptdir == 1:
+            message = "Add Mesh addon " + groupname + " saved to user scripts directory."
+        else:
+            message = "Add Mesh addon " + groupname + " saved to main scripts directory."
+        bpy.ops.creaprim.message('INVOKE_DEFAULT')
+
+        return {'FINISHED'}
 
 
 class MessageOperator(bpy.types.Operator):
-	bl_idname = "creaprim.message"
-	bl_label = "Saved"
+    bl_idname = "creaprim.message"
+    bl_label = "Saved"
+
+    def invoke(self, context, event):
+        wm = context.window_manager
+        return wm.invoke_popup(self, width=500, height=20)
 
-	def invoke(self, context, event):
-		wm = context.window_manager
-		return wm.invoke_popup(self, width=500, height=20)
-		return {'FINISHED'}
+    def draw(self, context):
 
-	def draw(self, context):
+        global groupname
 
-		global groupname
+        layout = self.layout
+        row = layout.row()
+        row.label(text='', icon="PLUGIN")
+        row.label(message)
 
-		layout = self.layout
-		row = layout.row()
-		row.label(text = '', icon = "PLUGIN")
-		row.label(message)
 
 def panel_func(self, context):
 
-	global started
+    global started
+
+    scn = bpy.context.scene
 
-	scn = bpy.context.scene
+    self.layout.label(text="CreaPrim:")
+    self.layout.operator("object.creaprim", text="Create primitive", icon='PLUGIN')
+    self.layout.prop(scn, "Creaprim_Name")
+    self.layout.prop(scn, "Creaprim_Apply")
 
-	self.layout.label(text="CreaPrim:")
-	self.layout.operator("object.creaprim", text="Create primitive", icon = 'PLUGIN')
-	self.layout.prop(scn, "Name")
-	self.layout.prop(scn, "Apply")
 
 def register():
-	bpy.utils.register_module(__name__)
-	bpy.types.VIEW3D_PT_tools_object.append(panel_func)
-	bpy.app.handlers.scene_update_post.append(setname)
+    bpy.utils.register_module(__name__)
+    bpy.types.Scene.Creaprim_Name = bpy.props.StringProperty(
+            name="Name",
+            description="Name for the primitive",
+            maxlen=1024
+            )
+    bpy.types.Scene.Creaprim_Apply = bpy.props.BoolProperty(
+            name="Apply transform",
+            description="Apply transform to selected objects",
+            default=False
+            )
+    bpy.types.VIEW3D_PT_tools_object.append(panel_func)
+    bpy.app.handlers.scene_update_post.append(setname)
 
-def unregister():
-	bpy.utils.unregister_module(__name__)
-	bpy.types.VIEW3D_PT_tools_object.remove(panel_func)
-	bpy.app.handlers.scene_update_post.remove(setname)
 
-if __name__ == "__main__":
-	register()
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    bpy.types.VIEW3D_PT_tools_object.remove(panel_func)
+    bpy.app.handlers.scene_update_post.remove(setname)
+    del bpy.types.Scene.Creaprim_Name
+    del bpy.types.Scene.Creaprim_Apply
 
 
+if __name__ == "__main__":
+    register()
 
 
 def do_creaprim(self, mesh, objname, addondir):
 
-	global message
-
-	objname = objname.replace(".", "

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list