From def57c37e67bb54537bad3b80ff5fcfd4b5de431 Mon Sep 17 00:00:00 2001 From: lijenstina <lijenstina@gmail.com> Date: Sun, 11 Jun 2017 02:52:35 +0200 Subject: [PATCH] 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 --- object_creaprim.py | 718 +++++++++++++++++++++++---------------------- 1 file changed, 363 insertions(+), 355 deletions(-) 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(".", "") - objname = objname.replace(" ", "_") - bm = bmesh.new() - bm.from_mesh(mesh) - - - try: - txt = bpy.data.texts[str.lower("add_mesh_" + objname) + ".py"] - txt.clear() - except: - txt = bpy.data.texts.new("add_mesh_" + str.lower(objname) + ".py") - - strlist = [] - strlist.append("bl_info = {\n") - strlist.append("\"name\": \"" + objname + "\", \n") - strlist.append("\"author\": \"Gert De Roost\",\n") - strlist.append("\"version\": (1, 0, 0),\n") - strlist.append("\"blender\": (2, 65, 0),\n") - strlist.append("\"location\": \"Add > Mesh\",\n") - strlist.append("\"description\": \"Create " + objname + " primitive.\",\n") - strlist.append("\"warning\": \"\",\n") - strlist.append("\"wiki_url\": \"\",\n") - strlist.append("\"tracker_url\": \"\",\n") - strlist.append("\"category\": \"Add Mesh\"}\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("if \"bpy\" in locals():\n") - strlist.append(" import imp\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("import bpy\n") - strlist.append("import bmesh\n") - strlist.append("import math\n") - strlist.append("from mathutils import *\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("class " + objname + "(bpy.types.Operator):\n") - strlist.append(" bl_idname = \"mesh." + str.lower(objname) + "\"\n") - strlist.append(" bl_label = \"" + objname + "\"\n") - strlist.append(" bl_options = {\'REGISTER\', \'UNDO\'}\n") - strlist.append(" bl_description = \"add " + objname + " primitive\"\n") - strlist.append("\n") - strlist.append(" def invoke(self, context, event):\n") - strlist.append("\n") - strlist.append(" mesh = bpy.data.meshes.new(name=\"" + objname + "\")\n") - strlist.append(" obj = bpy.data.objects.new(name=\"" + objname + "\", object_data=mesh)\n") - strlist.append(" scene = bpy.context.scene\n") - strlist.append(" scene.objects.link(obj)\n") - strlist.append(" obj.location = scene.cursor_location\n") - strlist.append(" bm = bmesh.new()\n") - strlist.append(" bm.from_mesh(mesh)\n") - strlist.append("\n") - strlist.append(" idxlist = []\n") - posn = 0 - strlist.append(" vertlist = [") - for v in bm.verts: - if posn > 0: - strlist.append(", ") - posn += 1 - strlist.append(str(v.co[:])) - strlist.append("]\n") - strlist.append(" for co in vertlist:\n") - strlist.append(" v = bm.verts.new(co)\n") - strlist.append(" bm.verts.index_update()\n") - strlist.append(" idxlist.append(v.index)\n") - posn = 0 - strlist.append(" edgelist = [") - for e in bm.edges: - if posn > 0: - strlist.append(", ") - posn += 1 - strlist.append("[" + str(e.verts[0].index) + ", " + str(e.verts[1].index) + "]") - strlist.append("]\n") - strlist.append(" for verts in edgelist:\n") - strlist.append(" try:\n") - strlist.append(" bm.edges.new((bm.verts[verts[0]], bm.verts[verts[1]]))\n") - strlist.append(" except:\n") - strlist.append(" pass\n") - posn1 = 0 - strlist.append(" facelist = [(") - for f in bm.faces: - if posn1 > 0: - strlist.append(", (") - posn1 += 1 - posn2 = 0 - for v in f.verts: - if posn2 > 0: - strlist.append(", ") - strlist.append(str(v.index)) - posn2 += 1 - strlist.append(")") - strlist.append("]\n") - strlist.append(" bm.verts.ensure_lookup_table()\n") - strlist.append(" for verts in facelist:\n") - strlist.append(" vlist = []\n") - strlist.append(" for idx in verts:\n") - strlist.append(" vlist.append(bm.verts[idxlist[idx]])\n") - strlist.append(" try:\n") - strlist.append(" bm.faces.new(vlist)\n") - strlist.append(" except:\n") - strlist.append(" pass\n") - strlist.append("\n") - strlist.append(" bm.to_mesh(mesh)\n") - strlist.append(" mesh.update()\n") - strlist.append(" bm.free()\n") - strlist.append(" obj.rotation_quaternion = (Matrix.Rotation(math.radians(90), 3, \'X\').to_quaternion())\n") - strlist.append("\n") - strlist.append(" return {\'FINISHED\'}\n") - - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("def menu_item(self, context):\n") - strlist.append(" self.layout.operator(" + objname + ".bl_idname, text=\"" + objname + "\", icon=\"PLUGIN\")\n") - strlist.append("\n") - strlist.append("def register():\n") - strlist.append(" bpy.utils.register_module(__name__)\n") - strlist.append(" bpy.types.INFO_MT_mesh_add.append(menu_item)\n") - strlist.append("\n") - strlist.append("def unregister():\n") - strlist.append(" bpy.utils.unregister_module(__name__)\n") - strlist.append(" bpy.types.INFO_MT_mesh_add.remove(menu_item)\n") - strlist.append("\n") - strlist.append("if __name__ == \"__main__\":\n") - strlist.append(" register()\n") - endstring = ''.join(strlist) - txt.write(endstring) - - try: - fileobj = open(addondir + "add_mesh_" + str.lower(objname) + ".py", "w") - except: - message = "Permission problem - cant write file - run Blender as Administrator!" - bpy.ops.creaprim.message('INVOKE_DEFAULT') - return 0 - - fileobj.write(endstring) - fileobj.close() - - bm.free() - - return txt + global message + + objname = objname.replace(".", "") + objname = objname.replace(" ", "_") + bm = bmesh.new() + bm.from_mesh(mesh) + + try: + txt = bpy.data.texts[str.lower("add_mesh_" + objname) + ".py"] + txt.clear() + except: + txt = bpy.data.texts.new("add_mesh_" + str.lower(objname) + ".py") + + strlist = [] + strlist.append("# Script autogenerated by object_creaprim.py") + strlist.append("\n") + strlist.append("bl_info = {\n") + strlist.append(" \"name\": \"" + objname + "\",\n") + strlist.append(" \"author\": \"Gert De Roost\",\n") + strlist.append(" \"version\": (1, 0, 0),\n") + strlist.append(" \"blender\": (2, 65, 0),\n") + strlist.append(" \"location\": \"Add > Mesh\",\n") + strlist.append(" \"description\": \"Create " + objname + " primitive\",\n") + strlist.append(" \"warning\": \"\",\n") + strlist.append(" \"wiki_url\": \"\",\n") + strlist.append(" \"tracker_url\": \"\",\n") + strlist.append(" \"category\": \"Add Mesh\"}\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("import bpy\n") + strlist.append("import bmesh\n") + strlist.append("import math\n") + strlist.append("from mathutils import *\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("class " + objname + "(bpy.types.Operator):\n") + strlist.append(" bl_idname = \"mesh." + str.lower(objname) + "\"\n") + strlist.append(" bl_label = \"" + objname + "\"\n") + strlist.append(" bl_options = {\'REGISTER\', \'UNDO\'}\n") + strlist.append(" bl_description = \"add " + objname + " primitive\"\n") + strlist.append("\n") + strlist.append(" def invoke(self, context, event):\n") + strlist.append("\n") + strlist.append(" mesh = bpy.data.meshes.new(name=\"" + objname + "\")\n") + strlist.append(" obj = bpy.data.objects.new(name=\"" + objname + "\", object_data=mesh)\n") + strlist.append(" scene = bpy.context.scene\n") + strlist.append(" scene.objects.link(obj)\n") + strlist.append(" obj.location = scene.cursor_location\n") + strlist.append(" bm = bmesh.new()\n") + strlist.append(" bm.from_mesh(mesh)\n") + strlist.append("\n") + strlist.append(" idxlist = []\n") + posn = 0 + strlist.append(" vertlist = [") + for v in bm.verts: + if posn > 0: + strlist.append(", ") + posn += 1 + strlist.append(str(v.co[:])) + strlist.append("]\n") + strlist.append(" for co in vertlist:\n") + strlist.append(" v = bm.verts.new(co)\n") + strlist.append(" bm.verts.index_update()\n") + strlist.append(" idxlist.append(v.index)\n") + posn = 0 + strlist.append(" edgelist = [") + for e in bm.edges: + if posn > 0: + strlist.append(", ") + posn += 1 + strlist.append("[" + str(e.verts[0].index) + ", " + str(e.verts[1].index) + "]") + strlist.append("]\n") + strlist.append(" for verts in edgelist:\n") + strlist.append(" try:\n") + strlist.append(" bm.edges.new((bm.verts[verts[0]], bm.verts[verts[1]]))\n") + strlist.append(" except:\n") + strlist.append(" pass\n") + posn1 = 0 + strlist.append(" facelist = [(") + for f in bm.faces: + if posn1 > 0: + strlist.append(", (") + posn1 += 1 + posn2 = 0 + for v in f.verts: + if posn2 > 0: + strlist.append(", ") + strlist.append(str(v.index)) + posn2 += 1 + strlist.append(")") + strlist.append("]\n") + strlist.append(" bm.verts.ensure_lookup_table()\n") + strlist.append(" for verts in facelist:\n") + strlist.append(" vlist = []\n") + strlist.append(" for idx in verts:\n") + strlist.append(" vlist.append(bm.verts[idxlist[idx]])\n") + strlist.append(" try:\n") + strlist.append(" bm.faces.new(vlist)\n") + strlist.append(" except:\n") + strlist.append(" pass\n") + strlist.append("\n") + strlist.append(" bm.to_mesh(mesh)\n") + strlist.append(" mesh.update()\n") + strlist.append(" bm.free()\n") + strlist.append(" obj.rotation_quaternion = (Matrix.Rotation(math.radians(90), 3, \'X\').to_quaternion())\n") + strlist.append("\n") + strlist.append(" return {\'FINISHED\'}\n") + + strlist.append("\n") + strlist.append("\n") + strlist.append("def menu_item(self, context):\n") + strlist.append(" self.layout.operator(" + objname + ".bl_idname, text=\"" + objname + "\", icon=\"PLUGIN\")\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("def register():\n") + strlist.append(" bpy.utils.register_module(__name__)\n") + strlist.append(" bpy.types.INFO_MT_mesh_add.append(menu_item)\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("def unregister():\n") + strlist.append(" bpy.utils.unregister_module(__name__)\n") + strlist.append(" bpy.types.INFO_MT_mesh_add.remove(menu_item)\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("if __name__ == \"__main__\":\n") + strlist.append(" register()\n") + endstring = ''.join(strlist) + txt.write(endstring) + + try: + fileobj = open(addondir + "add_mesh_" + str.lower(objname) + ".py", "w") + except: + message = "Permission problem - cant write file - run Blender as Administrator!" + bpy.ops.creaprim.message('INVOKE_DEFAULT') + return 0 + + fileobj.write(endstring) + fileobj.close() + + bm.free() + + return txt def makeinit(txtlist, namelist, groupname, addondir): - global message - - try: - txt = bpy.data.texts["__init__.py"] - txt.clear() - except: - txt = bpy.data.texts.new("__init__.py") - - strlist = [] - strlist.append("bl_info = {\n") - strlist.append("\"name\": \"" + groupname + "\", \n") - strlist.append("\"author\": \"Gert De Roost\",\n") - strlist.append("\"version\": (1, 0, 0),\n") - strlist.append("\"blender\": (2, 65, 0),\n") - strlist.append("\"location\": \"Add > Mesh\",\n") - strlist.append("\"description\": \"Create " + groupname + " primitive group.\",\n") - strlist.append("\"warning\": \"\",\n") - strlist.append("\"wiki_url\": \"\",\n") - strlist.append("\"tracker_url\": \"\",\n") - strlist.append("\"category\": \"Add Mesh\"}\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("if \"bpy\" in locals():\n") - strlist.append(" import imp\n") - addonlist = [] - for txt in txtlist: - name = txt.name.replace(".py", "") - addonlist.append(name) - for name in addonlist: - strlist.append(" imp.reload(" + name + ")\n") - strlist.append("else:\n") - for name in addonlist: - strlist.append(" from . import " + name + "\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("import bpy\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("class INFO_MT_mesh_" + str.lower(groupname) + "_add(bpy.types.Menu):\n") - strlist.append(" bl_idname = \"INFO_MT_mesh_" + str.lower(groupname) + "_add\"\n") - strlist.append(" bl_label = \"" + groupname + "\"\n") - strlist.append("\n") - strlist.append(" def draw(self, context):\n") - strlist.append(" layout = self.layout\n") -# layout.operator_context = 'INVOKE_REGION_WIN' - for name in namelist: - strlist.append(" layout.operator(\"mesh." + str.lower(name) + "\", text=\"" + name + "\")\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("\n") - strlist.append("def menu_item(self, context):\n") - strlist.append(" self.layout.menu(\"INFO_MT_mesh_" + str.lower(groupname) + "_add\", icon=\"PLUGIN\")\n") - strlist.append("\n") - strlist.append("def register():\n") - strlist.append(" bpy.utils.register_module(__name__)\n") - strlist.append(" bpy.types.INFO_MT_mesh_add.append(menu_item)\n") - strlist.append("\n") - strlist.append("def unregister():\n") - strlist.append(" bpy.utils.unregister_module(__name__)\n") - strlist.append(" bpy.types.INFO_MT_mesh_add.remove(menu_item)\n") - strlist.append("\n") - strlist.append("if __name__ == \"__main__\":\n") - strlist.append(" register()\n") - endstring = ''.join(strlist) - txt.write(endstring) - - try: - fileobj = open(addondir + "__init__.py", "w") - except: - message = "Permission problem - cant write file - run Blender as Administrator!" - bpy.ops.creaprim.message('INVOKE_DEFAULT') - return 0 - fileobj.write(endstring) - fileobj.close() - + global message + + try: + txt = bpy.data.texts["__init__.py"] + txt.clear() + except: + txt = bpy.data.texts.new("__init__.py") + + strlist = [] + strlist.append("# Script autogenerated by object_creaprim.py") + strlist.append("\n") + strlist.append("bl_info = {\n") + strlist.append(" \"name\": \"" + groupname + "\",\n") + strlist.append(" \"author\": \"Gert De Roost\",\n") + strlist.append(" \"version\": (1, 0, 0),\n") + strlist.append(" \"blender\": (2, 65, 0),\n") + strlist.append(" \"location\": \"Add > Mesh\",\n") + strlist.append(" \"description\": \"Create " + groupname + " primitive group\",\n") + strlist.append(" \"warning\": \"\",\n") + strlist.append(" \"wiki_url\": \"\",\n") + strlist.append(" \"tracker_url\": \"\",\n") + strlist.append(" \"category\": \"Add Mesh\"}\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("if \"bpy\" in locals():\n") + strlist.append(" import importlib\n") + addonlist = [] + for txt in txtlist: + name = txt.name.replace(".py", "") + addonlist.append(name) + for name in addonlist: + strlist.append(" importlib.reload(" + name + ")\n") + strlist.append("else:\n") + for name in addonlist: + strlist.append(" from . import " + name + "\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("import bpy\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("class INFO_MT_mesh_" + str.lower(groupname) + "_add(bpy.types.Menu):\n") + strlist.append(" bl_idname = \"INFO_MT_mesh_" + str.lower(groupname) + "_add\"\n") + strlist.append(" bl_label = \"" + groupname + "\"\n") + strlist.append("\n") + strlist.append(" def draw(self, context):\n") + strlist.append(" layout = self.layout\n") + + for name in namelist: + strlist.append(" layout.operator(\"mesh." + str.lower(name) + "\", text=\"" + name + "\")\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("def menu_item(self, context):\n") + strlist.append(" self.layout.menu(\"INFO_MT_mesh_" + str.lower(groupname) + "_add\", icon=\"PLUGIN\")\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("def register():\n") + strlist.append(" bpy.utils.register_module(__name__)\n") + strlist.append(" bpy.types.INFO_MT_mesh_add.append(menu_item)\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("def unregister():\n") + strlist.append(" bpy.utils.unregister_module(__name__)\n") + strlist.append(" bpy.types.INFO_MT_mesh_add.remove(menu_item)\n") + strlist.append("\n") + strlist.append("\n") + strlist.append("if __name__ == \"__main__\":\n") + strlist.append(" register()\n") + endstring = ''.join(strlist) + txt.write(endstring) + + try: + fileobj = open(addondir + "__init__.py", "w") + except: + message = "Permission problem - cant write file - run Blender as Administrator!" + bpy.ops.creaprim.message('INVOKE_DEFAULT') + return 0 + + fileobj.write(endstring) + fileobj.close() def setname(dummy): -# global oldname - - scn = bpy.context.scene - oldname = scn.Name - if bpy.context.active_object.name != oldname: + scn = bpy.context.scene + oldname = scn.Creaprim_Name - scn.Name = bpy.context.active_object.name + if bpy.context.active_object and bpy.context.active_object.name != oldname: + scn.Creaprim_Name = bpy.context.active_object.name -- GitLab