[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3821] contrib/py/scripts/addons/ object_creaprim.py: add object create primitive by paleajed
Brendon Murphy
meta.androcto1 at gmail.com
Sun Oct 7 02:18:23 CEST 2012
Revision: 3821
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3821
Author: meta-androcto
Date: 2012-10-07 00:18:21 +0000 (Sun, 07 Oct 2012)
Log Message:
-----------
add object create primitive by paleajed
Added Paths:
-----------
contrib/py/scripts/addons/object_creaprim.py
Added: contrib/py/scripts/addons/object_creaprim.py
===================================================================
--- contrib/py/scripts/addons/object_creaprim.py (rev 0)
+++ contrib/py/scripts/addons/object_creaprim.py 2012-10-07 00:18:21 UTC (rev 3821)
@@ -0,0 +1,442 @@
+
+# ***** 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.
+#
+# If you have Internet access, you can find the license text at
+# http://www.gnu.org/licenses/gpl.txt,
+# if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+# --------------------------------------------------------------------------
+
+__bpydoc__ = """\
+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 menu.
+
+
+Documentation
+
+Go to User Preferences->Addons and enable the CreaPrim addon in the Object section.
+First select your object or objects. The addon will show up in the 3dview properties panel.
+The name (in panel) will be set to the active object name. Select "Apply transform" if you
+want transforms to be applied to the selected objects. Modifiers will taken into account.
+You can always change this. Just hit the button and the selected
+objects will be saved in your addons folder as an Add Mesh addon with the name
+"add_mesh_XXXX.py" with XXXX being your object name. The addon will show up in User
+Preferences->Addons in the Add Mesh section.
+Enable this addon et voila, your new custom primitive will now show up in the Add Mesh menu.
+
+REMARK - dont need to be admin anymore - saves to user scripts dir
+
+ALSO - dont forget to Apply rotation and scale to have your object show up correctly
+"""
+
+bl_info = {
+ "name": "CreaPrim",
+ "author": "Gert De Roost",
+ "version": (0, 3, 9),
+ "blender": (2, 6, 3),
+ "location": "View3D > Tools",
+ "description": "Create primitive addon.",
+ "warning": "",
+ "wiki_url": "http://wiki.blender.org/index.php/"\
+ "Extensions:2.6/Py/Scripts",
+ "tracker_url": "http://projects.blender.org/tracker/"\
+ "?func=detail&aid=32801"
+ "category": "Object"}
+
+if "bpy" in locals():
+ import imp
+
+
+import bpy
+import bmesh
+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)
+
+
+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
+ else:
+ objname = selobj.name
+ 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'}
+
+
+class MessageOperator(bpy.types.Operator):
+ 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)
+ return {'FINISHED'}
+
+ def draw(self, context):
+
+ global groupname
+
+ layout = self.layout
+ row = layout.row()
+ row.label(text = '', icon = "PLUGIN")
+ row.label(message)
+
+def panel_func(self, context):
+
+ global started
+
+ scn = bpy.context.scene
+
+ self.layout.label(text="CreaPrim:")
+ self.layout.operator("object.creaprim", text="Create primitive")
+ self.layout.prop(scn, "Name")
+ self.layout.prop(scn, "Apply")
+
+def register():
+ bpy.utils.register_module(__name__)
+ bpy.types.VIEW3D_PT_tools_objectmode.append(panel_func)
+ bpy.app.handlers.scene_update_post.append(setname)
+
+def unregister():
+ bpy.utils.unregister_module(__name__)
+ bpy.types.VIEW3D_PT_tools_objectmode.remove(panel_func)
+ bpy.app.handlers.scene_update_post.remove(setname)
+
+if __name__ == "__main__":
+ register()
+
+
+
+
+def do_creaprim(self, mesh, objname, addondir):
+
+ global message
+
+ 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, 6, 3),\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(" bm.edges.new((bm.verts[verts[0]], bm.verts[verts[1]]))\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(" 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(" bm.faces.new(vlist)\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")
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list