[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23764] trunk/blender: - add torus back from 2.4x as an operator

Campbell Barton ideasman42 at gmail.com
Sat Oct 10 23:23:22 CEST 2009


Revision: 23764
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23764
Author:   campbellbarton
Date:     2009-10-10 23:23:20 +0200 (Sat, 10 Oct 2009)

Log Message:
-----------
- add torus back from 2.4x as an operator
  bpy.ops.mesh.primitive_torus_add(major_radius=1, minor_radius=0.25, major_segments=48, minor_segments=16)

- experemental dynamic menus, used for INFO_MT_file, INFO_MT_file_import, INFO_MT_file_export and INFO_MT_mesh_add. these can have items added from python.
eg.

- removed OBJECT_OT_mesh_add, use the python add menu instead.

- made mesh primitive ops -  MESH_OT_primitive_plane_add, ...cube_add, etc. work in object mode.

- RNA scene.active_object wrapped

- bugfix [#19466] 2.5: Tweak menu only available for mesh objects added within Edit Mode
  ED_object_exit_editmode was always doing an undo push, made this optional using the existing flag - EM_DO_UNDO, called everywhere except when adding primitives.

Modified Paths:
--------------
    trunk/blender/release/scripts/io/export_3ds.py
    trunk/blender/release/scripts/io/export_fbx.py
    trunk/blender/release/scripts/io/export_mdd.py
    trunk/blender/release/scripts/io/export_obj.py
    trunk/blender/release/scripts/io/export_ply.py
    trunk/blender/release/scripts/io/export_x3d.py
    trunk/blender/release/scripts/io/import_3ds.py
    trunk/blender/release/scripts/io/import_obj.py
    trunk/blender/release/scripts/ui/space_info.py
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_outliner/outliner.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_texture.c
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
    trunk/blender/source/blender/windowmanager/intern/wm_files.c

Added Paths:
-----------
    trunk/blender/release/scripts/io/add_mesh_torus.py
    trunk/blender/release/scripts/modules/dynamic_menu.py

Added: trunk/blender/release/scripts/io/add_mesh_torus.py
===================================================================
--- trunk/blender/release/scripts/io/add_mesh_torus.py	                        (rev 0)
+++ trunk/blender/release/scripts/io/add_mesh_torus.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -0,0 +1,98 @@
+
+import bpy, Mathutils
+from math import cos, sin, pi, radians
+
+
+def add_torus(PREF_MAJOR_RAD, PREF_MINOR_RAD, PREF_MAJOR_SEG, PREF_MINOR_SEG):
+	Vector = Mathutils.Vector
+	Quaternion = Mathutils.Quaternion
+	
+	PI_2= pi*2
+	Z_AXIS = 0,0,1
+	
+	verts = []
+	faces = []
+	i1 = 0
+	tot_verts = PREF_MAJOR_SEG * PREF_MINOR_SEG
+	for major_index in range(PREF_MAJOR_SEG):
+		verts_tmp = []
+		quat = Quaternion( Z_AXIS, (major_index/PREF_MAJOR_SEG)*PI_2)
+
+		for minor_index in range(PREF_MINOR_SEG):
+			angle = 2*pi*minor_index/PREF_MINOR_SEG
+			
+			vec = Vector(PREF_MAJOR_RAD+(cos(angle)*PREF_MINOR_RAD), 0, (sin(angle)*PREF_MINOR_RAD)) * quat
+			verts.extend([vec.x, vec.y, vec.z])
+			
+			if minor_index+1==PREF_MINOR_SEG:
+				i2 = (major_index)*PREF_MINOR_SEG
+				i3 = i1 + PREF_MINOR_SEG
+				i4 = i2 + PREF_MINOR_SEG
+				
+			else:
+				i2 = i1 + 1
+				i3 = i1 + PREF_MINOR_SEG
+				i4 = i3 + 1
+			
+			if i2>=tot_verts:	i2 = i2-tot_verts
+			if i3>=tot_verts:	i3 = i3-tot_verts
+			if i4>=tot_verts:	i4 = i4-tot_verts
+			
+			# stupid eekadoodle
+			if i2:	faces.extend( [i1,i3,i4,i2] )
+			else:	faces.extend( [i2,i1,i3,i4] )
+				
+			i1+=1
+	
+	return verts, faces
+
+
+class MESH_OT_primitive_torus_add(bpy.types.Operator):
+	'''Add a torus mesh.'''
+	__idname__ = "mesh.primitive_torus_add"
+	__label__ = "Add Torus"
+	__register__ = True
+	__undo__ = True
+	__props__ = [
+		bpy.props.FloatProperty(attr="major_radius", name="Major Radius", description="Number of segments for the main ring of the torus", default= 1.0, min= 0.01, max= 100.0),
+		bpy.props.FloatProperty(attr="minor_radius", name="Minor Radius", description="Number of segments for the minor ring of the torus", default= 0.25, min= 0.01, max= 100.0),
+		bpy.props.IntProperty(attr="major_segments", name="Major Segments", description="Number of segments for the main ring of the torus", default= 48, min= 3, max= 256),
+		bpy.props.IntProperty(attr="minor_segments", name="Minor Segments", description="Number of segments for the minor ring of the torus", default= 16, min= 3, max= 256),
+	]
+	
+	def execute(self, context):
+		verts_loc, faces = add_torus(self.major_radius, self.minor_radius, self.major_segments, self.minor_segments)
+		
+		me= bpy.data.add_mesh("Torus")
+		
+		me.add_geometry(int(len(verts_loc)/3), 0, int(len(faces)/4))
+		me.verts.foreach_set("co", verts_loc)
+		me.faces.foreach_set("verts_raw", faces)
+		
+		sce = context.scene
+		
+		# ugh
+		for ob in sce.objects:
+			ob.selected = False
+		
+		me.update()
+		ob= bpy.data.add_object('MESH', "Torus")
+		ob.data= me
+		context.scene.add_object(ob)
+		context.scene.active_object = ob
+		ob.selected = True
+		
+		ob.location = tuple(context.scene.cursor_location)
+		
+		return ('FINISHED',)
+
+# Register the operator
+bpy.ops.add(MESH_OT_primitive_torus_add)
+
+# Add to a menu
+import dynamic_menu
+import space_info
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_mesh_add, (lambda self, context: self.layout.itemO("mesh.primitive_torus_add", text="Add Torus")) )
+
+if __name__ == "__main__":
+	bpy.ops.mesh.primitive_torus_add()
\ No newline at end of file

Modified: trunk/blender/release/scripts/io/export_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/export_3ds.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_3ds.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -1,12 +1,4 @@
-#!BPY
 # coding: utf-8
-""" 
-Name: '3D Studio (.3ds)...'
-Blender: 243
-Group: 'Export'
-Tooltip: 'Export to 3DS file format (.3ds).'
-"""
-
 __author__ = ["Campbell Barton", "Bob Holcomb", "Richard Lärkäng", "Damien McGinnes", "Mark Stijnman"]
 __url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/")
 __version__ = "0.90a"
@@ -1100,9 +1092,7 @@
 # # save_3ds('/test_b.3ds')
 
 class EXPORT_OT_3ds(bpy.types.Operator):
-	'''
-	3DS Exporter
-	'''
+	'''Export to 3DS file format (.3ds).'''
 	__idname__ = "export.3ds"
 	__label__ = 'Export 3DS'
 	
@@ -1128,3 +1118,8 @@
 		return context.active_object != None
 
 bpy.ops.add(EXPORT_OT_3ds)
+
+# Add to a menu
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.3ds", text="Autodesk 3DS...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)

Modified: trunk/blender/release/scripts/io/export_fbx.py
===================================================================
--- trunk/blender/release/scripts/io/export_fbx.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_fbx.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -1,10 +1,3 @@
-#!BPY
-"""
-Name: 'Autodesk FBX (.fbx)...'
-Blender: 249
-Group: 'Export'
-Tooltip: 'Selection to an ASCII Autodesk FBX '
-"""
 __author__ = "Campbell Barton"
 __url__ = ['www.blender.org', 'blenderartists.org']
 __version__ = "1.2"
@@ -3341,9 +3334,7 @@
 	# GLOBALS.clear()
 
 class EXPORT_OT_fbx(bpy.types.Operator):
-	'''
-	Operator documentation text, will be used for the operator tooltip and python docs.
-	'''
+	'''Selection to an ASCII Autodesk FBX'''
 	__idname__ = "export.fbx"
 	__label__ = "Export FBX"
 	
@@ -3451,3 +3442,10 @@
 
 # SMALL or COSMETICAL
 # - find a way to get blender version, and put it in bpy.util?, old was Blender.Get('version')
+
+
+# Add to a menu
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.fbx", text="Autodesk FBX...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
+

Modified: trunk/blender/release/scripts/io/export_mdd.py
===================================================================
--- trunk/blender/release/scripts/io/export_mdd.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_mdd.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -1,12 +1,4 @@
-#!BPY
 
-"""
- Name: 'Vertex Keyframe Animation (.mdd)...'
- Blender: 242
- Group: 'Export'
- Tooltip: 'Animated mesh to MDD vertex keyframe file.'
-"""
-
 __author__ = "Bill L.Nieuwendorp"
 __bpydoc__ = """\
 This script Exports Lightwaves MotionDesigner format.
@@ -180,9 +172,13 @@
 
 bpy.ops.add(EXPORT_OT_mdd)
 
+# Add to a menu
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.mdd", text="Vertex Keyframe Animation (.mdd)...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
+
 if __name__=='__main__':
 	#if not pack:
 #		Draw.PupMenu('Error%t|This script requires a full python install')
 	#Blender.Window.FileSelector(mdd_export_ui, 'EXPORT MDD', sys.makename(ext='.mdd'))
 	bpy.ops.EXPORT_OT_mdd(path="/tmp/test.mdd")
-

Modified: trunk/blender/release/scripts/io/export_obj.py
===================================================================
--- trunk/blender/release/scripts/io/export_obj.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_obj.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -906,14 +906,16 @@
 #	orig_scene.makeCurrent()
 #	Window.WaitCursor(0)
 
-
+	
+'''
+Currently the exporter lacks these features:
+* nurbs
+* multiple scene export (only active scene is written)
+* particles
+'''
 class EXPORT_OT_obj(bpy.types.Operator):
-	'''
-	Currently the exporter lacks these features:
-	* nurbs
-	* multiple scene export (only active scene is written)
-	* particles
-	'''
+	'''Save a Wavefront OBJ File'''
+	
 	__idname__ = "export.obj"
 	__label__ = 'Export OBJ'
 	
@@ -984,6 +986,10 @@
 
 bpy.ops.add(EXPORT_OT_obj)
 
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.obj", text="Wavefront (.obj)...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
+
 if __name__ == "__main__":
 	bpy.ops.EXPORT_OT_obj(filename="/tmp/test.obj")
 

Modified: trunk/blender/release/scripts/io/export_ply.py
===================================================================
--- trunk/blender/release/scripts/io/export_ply.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_ply.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -273,7 +273,9 @@
 
 bpy.ops.add(EXPORT_OT_ply)
 
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.ply", text="Stanford (.ply)...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
+
 if __name__ == "__main__":
 	bpy.ops.EXPORT_OT_ply(path="/tmp/test.ply")
-
-

Modified: trunk/blender/release/scripts/io/export_x3d.py
===================================================================
--- trunk/blender/release/scripts/io/export_x3d.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/export_x3d.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -1,10 +1,3 @@
-#!BPY
-""" Registration info for Blender menus:
-Name: 'X3D Extensible 3D (.x3d)...'
-Blender: 245
-Group: 'Export'
-Tooltip: 'Export selection to Extensible 3D file (.x3d)'
-"""
 
 __author__ = ("Bart", "Campbell Barton")
 __email__ = ["Bart, bart:neeneenee*de"]
@@ -1204,9 +1197,7 @@
 # 	Blender.Window.FileSelector(x3d_export_ui,"Export X3D", Blender.Get('filename').replace('.blend', '.x3d'))
 
 class EXPORT_OT_x3d(bpy.types.Operator):
-	'''
-	X3D Exporter
-	'''
+	'''Export selection to Extensible 3D file (.x3d)'''
 	__idname__ = "export.x3d"
 	__label__ = 'Export X3D'
 	
@@ -1229,12 +1220,12 @@
 		wm = context.manager
 		wm.add_fileselect(self.__operator__)
 		return ('RUNNING_MODAL',)
-	
-	def poll(self, context): # Poll isnt working yet
-		print("Poll")
-		return context.active_object != None
 
 bpy.ops.add(EXPORT_OT_x3d)
 
+import dynamic_menu
+menu_func = lambda self, context: self.layout.itemO("export.x3d", text="X3D Extensible 3D (.x3d)...")
+menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
+
 # NOTES
 # - blender version is hardcoded 

Modified: trunk/blender/release/scripts/io/import_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/import_3ds.py	2009-10-10 18:42:20 UTC (rev 23763)
+++ trunk/blender/release/scripts/io/import_3ds.py	2009-10-10 21:23:20 UTC (rev 23764)
@@ -1,10 +1,3 @@
-#!BPY
-""" 
-Name: '3D Studio (.3ds)...'
-Blender: 244
-Group: 'Import'
-Tooltip: 'Import from 3DS file format (.3ds)'
-"""
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list