[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