[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23058] branches/blender2.5/blender: Curve /Surface Editing

Campbell Barton ideasman42 at gmail.com
Tue Sep 8 09:35:07 CEST 2009


Revision: 23058
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23058
Author:   campbellbarton
Date:     2009-09-08 09:35:07 +0200 (Tue, 08 Sep 2009)

Log Message:
-----------
Curve/Surface Editing 

- rename "Nurb" to "Spline" in RNA, eg. bpy.data.curves[0].splines[2].type == 'NURBS'
  from a user perspective spline is a more generic term while Nurb is misleading when used for beziers and poly lines.

- added curve.active_spline property so the python UI can display the last selected curve.
  
- set the active spline when entering editmode (uses first selected spline)
  
- added back Hide Handles as a curve property (removed the global flag), access from the view panel in editmode.
  
- added hide normal option for curve, normal size access for curve and mesh display.

- changing orderU/V, endpoints, cyclic, bezierU/V now work in editmode and calls update functions.

- entering editmode was crashing with text objects

- curve.switch_direction() crashed (own fault from last commit)

- Tkey for tilt was overridden by Toolbar, made Tilt Ctrl+T.

- OBJECT_OT_mode_set check for compatible modes before running - so curves dont try go into paint mode with V key for eg.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_curve.py
    branches/blender2.5/blender/release/ui/space_view3d.py
    branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
    branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
    branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c
    branches/blender2.5/blender/source/blender/editors/curve/editcurve.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_stats.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_manipulator.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_curve_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_curve.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_curve.py	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/release/ui/buttons_data_curve.py	2009-09-08 07:35:07 UTC (rev 23058)
@@ -15,6 +15,14 @@
 	'''
 	def poll(self, context):
 		return (context.object and context.object.type == 'CURVE' and context.curve)
+		
+class DataButtonsPanelActive(DataButtonsPanel):
+	'''
+	Same as above but for curves only
+	'''
+	def poll(self, context):
+		curve = context.curve
+		return (curve and curve.active_spline)
 
 class DATA_PT_context_curve(DataButtonsPanel):
 	__show_header__ = False
@@ -46,11 +54,11 @@
 		space = context.space_data
 		is_surf = (ob.type == 'SURFACE')
 
-		row = layout.row()
-		row.itemR(curve, "curve_2d")			
-		row.itemR(curve, "use_twist_correction")
+		if not is_surf:
+			row = layout.row()
+			row.itemR(curve, "curve_2d")			
+			row.itemR(curve, "use_twist_correction")
 		
-							
 		split = layout.split()
 		
 		col = split.column()
@@ -132,64 +140,71 @@
 		col.itemR(curve, "use_stretch")
 		col.itemR(curve, "use_time_offset", text="Offset Children")
 	
-class DATA_PT_current_curve(DataButtonsPanel):
-	__label__ = "Current Curve"
+class DATA_PT_active_spline(DataButtonsPanelActive):
+	__label__ = "Active Spline"
 
 	def draw(self, context):
 		layout = self.layout
 		
 		ob = context.object
-		currentcurve = context.curve.curves[0] # XXX
+		curve = context.curve
+		act_spline = curve.active_spline
 		is_surf = (ob.type == 'SURFACE')
 		
 		split = layout.split()
 		
 		col = split.column()
 		col.itemL(text="Cyclic:")
-		if currentcurve.type == 'NURBS':
+		if act_spline.type == 'NURBS':
 			col.itemL(text="Bezier:")
 			col.itemL(text="Endpoint:")
 			col.itemL(text="Order:")
 		col.itemL(text="Resolution:")
 		
-		
 		col = split.column()
-		col.itemR(currentcurve, "cyclic_u", text="U")
+		col.itemR(act_spline, "cyclic_u", text="U")
 		
-		if currentcurve.type == 'NURBS':
+		if act_spline.type == 'NURBS':
 			sub = col.column()
-			sub.active = (not currentcurve.cyclic_u)
-			sub.itemR(currentcurve, "bezier_u", text="U")
-			sub.itemR(currentcurve, "endpoint_u", text="U")
+			sub.active = (not act_spline.cyclic_u)
+			sub.itemR(act_spline, "bezier_u", text="U")
+			sub.itemR(act_spline, "endpoint_u", text="U")
 			
 			sub = col.column()
-			sub.itemR(currentcurve, "order_u", text="U")
-		col.itemR(currentcurve, "resolution_u", text="U")
+			sub.itemR(act_spline, "order_u", text="U")
+		col.itemR(act_spline, "resolution_u", text="U")
 		
 		if is_surf:
 			col = split.column()
-			col.itemR(currentcurve, "cyclic_v", text="V")
+			col.itemR(act_spline, "cyclic_v", text="V")
 			
 			# its a surface, assume its a nurb.
 			sub = col.column()
-			sub.active = (not currentcurve.cyclic_v)
-			sub.itemR(currentcurve, "bezier_v", text="V")
-			sub.itemR(currentcurve, "endpoint_v", text="V")
+			sub.active = (not act_spline.cyclic_v)
+			sub.itemR(act_spline, "bezier_v", text="V")
+			sub.itemR(act_spline, "endpoint_v", text="V")
 			sub = col.column()
-			sub.itemR(currentcurve, "resolution_v", text="V")
-			sub.itemR(currentcurve, "order_v", text="V")
+			sub.itemR(act_spline, "order_v", text="V")
+			sub.itemR(act_spline, "resolution_v", text="V")
+
 		
+		if not is_surf:
+			split = layout.split()
+			col = split.column()
+			col.active = (not curve.curve_2d)
+			
+			col.itemL(text="Interpolation:")
+			col.itemR(act_spline, "tilt_interpolation", text="Tilt")
+			col.itemR(act_spline, "radius_interpolation", text="Radius")
 		
+		
 		split = layout.split()
 		col = split.column()
-		col.itemL(text="Interpolation:")
-		col.itemR(currentcurve, "tilt_interpolation", text="Tilt")
-		col.itemR(currentcurve, "radius_interpolation", text="Radius")
-		col.itemR(currentcurve, "smooth")
+		col.itemR(act_spline, "smooth")
 		
 		
 bpy.types.register(DATA_PT_context_curve)
 bpy.types.register(DATA_PT_shape_curve)
 bpy.types.register(DATA_PT_geometry_curve)
 bpy.types.register(DATA_PT_pathanim)
-bpy.types.register(DATA_PT_current_curve)
+bpy.types.register(DATA_PT_active_spline)

Modified: branches/blender2.5/blender/release/ui/space_view3d.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_view3d.py	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/release/ui/space_view3d.py	2009-09-08 07:35:07 UTC (rev 23058)
@@ -1209,12 +1209,35 @@
 		col.itemL(text="Normals:")
 		col.itemR(mesh, "draw_normals", text="Face")
 		col.itemR(mesh, "draw_vertex_normals", text="Vertex")
+		col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
 		
 		col.itemS()
 		col.itemL(text="Numerics:")
 		col.itemR(mesh, "draw_edge_lenght")
 		col.itemR(mesh, "draw_edge_angle")
 		col.itemR(mesh, "draw_face_area")
+
+
+class VIEW3D_PT_3dview_curvedisplay(bpy.types.Panel):
+	__space_type__ = 'VIEW_3D'
+	__region_type__ = 'UI'
+	__label__ = "Curve Display"
+
+	def poll(self, context):
+		editmesh = context.mode == 'EDIT_CURVE'
+		return (editmesh)
+
+	def draw(self, context):
+		layout = self.layout
+
+		curve = context.active_object.data
+		
+		col = layout.column()
+		col.itemL(text="Overlays:")
+		col.itemR(curve, "draw_handles", text="Handles")
+		col.itemR(curve, "draw_normals", text="Normals")
+		col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
+		
 	
 class VIEW3D_PT_background_image(bpy.types.Panel):
 	__space_type__ = 'VIEW_3D'
@@ -1326,4 +1349,5 @@
 bpy.types.register(VIEW3D_PT_3dview_properties) # Panels
 bpy.types.register(VIEW3D_PT_3dview_display)
 bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
+bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
 bpy.types.register(VIEW3D_PT_background_image)

Modified: branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_view3d_toolbar.py	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/release/ui/space_view3d_toolbar.py	2009-09-08 07:35:07 UTC (rev 23058)
@@ -107,6 +107,7 @@
 		col.itemO("curve.delete")
 		col.itemO("curve.cyclic_toggle")
 		col.itemO("curve.switch_direction")
+		col.itemO("curve.spline_type_set")
 		
 		layout.itemL(text="Modeling:")
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h	2009-09-08 07:35:07 UTC (rev 23058)
@@ -119,7 +119,6 @@
 #define G_GREASEPENCIL 	(1 << 17)
 
 /* #define G_AUTOMATKEYS	(1 << 30)   also removed */
-#define G_HIDDENHANDLES (1 << 31) /* used for curves only */
 
 /* G.fileflags */
 

Modified: branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c	2009-09-08 07:35:07 UTC (rev 23058)
@@ -233,7 +233,7 @@
 	WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0);
 
 	WM_keymap_add_item(keymap, "CURVE_OT_tilt_clear", TKEY, KM_PRESS, KM_ALT, 0);
-	RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0)->ptr, "mode", TFM_TILT);
+	RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", TFM_TILT);
 	RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1);
 	RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", HKEY, KM_PRESS, 0, 0)->ptr, "type", 3);
 	RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", VKEY, KM_PRESS, 0, 0)->ptr, "type", 2);

Modified: branches/blender2.5/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/curve/editcurve.c	2009-09-08 03:29:28 UTC (rev 23057)
+++ branches/blender2.5/blender/source/blender/editors/curve/editcurve.c	2009-09-08 07:35:07 UTC (rev 23058)
@@ -86,9 +86,6 @@
 /* still need to eradicate a few :( */
 #define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name)
 
-/* for curve objects in editmode that can have hidden handles  */
-#define BEZSELECTED_HIDDENHANDLES(bezt)   ((G.f & G_HIDDENHANDLES) ? (bezt)->f2 & SELECT : BEZSELECTED(bezt))
-
 float nurbcircle[8][2]= {
 	{0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0,  1.0},
 	{0.0,  1.0}, { 1.0,  1.0}, { 1.0, 0.0}, { 1.0, -1.0}
@@ -213,7 +210,7 @@
 	return 0;
 }
 
-int isNurbsel_count(Nurb *nu)
+int isNurbsel_count(Curve *cu, Nurb *nu)
 {
 	BezTriple *bezt;
 	BPoint *bp;
@@ -223,7 +220,7 @@
 		bezt= nu->bezt;
 		a= nu->pntsu;
 		while(a--) {
-			if (BEZSELECTED_HIDDENHANDLES(bezt)) sel++;
+			if (BEZSELECTED_HIDDENHANDLES(cu, bezt)) sel++;
 			bezt++;
 		}
 	}
@@ -269,6 +266,8 @@
 
 	if(obedit==NULL) return;
 
+	set_actNurb(obedit, NULL);
+
 	if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
 		Curve *cu= obedit->data;
 		Nurb *nu, *newnu;
@@ -314,11 +313,13 @@
 void make_editNurb(Object *obedit)
 {
 	ListBase *editnurb= curve_get_editcurve(obedit);
-	Nurb *nu, *newnu;
+	Nurb *nu, *newnu, *nu_act= NULL;
 	KeyBlock *actkey;
 
 	if(obedit==NULL) return;
 
+	set_actNurb(obedit, NULL);
+
 	if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
 		Curve *cu= obedit->data;
 		
@@ -334,6 +335,12 @@
 			newnu= duplicateNurb(nu);
 			test2DNurb(newnu);	// after join, or any other creation of curve
 			BLI_addtail(editnurb, newnu);
+
+			if (nu_act == NULL && isNurbsel(nu)) {
+				nu_act= newnu;
+				set_actNurb(obedit, newnu);
+			}
+
 			nu= nu->next;
 		}
 		
@@ -343,8 +350,6 @@
 			key_to_curve(actkey, cu, editnurb);
 		}
 	}
-	
-	set_actNurb(obedit, NULL);
 }
 
 void free_editNurb(Object *obedit)
@@ -1609,6 +1614,7 @@
 static int hide_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit= CTX_data_edit_object(C);
+	Curve *cu= obedit->data;
 	ListBase *editnurb= curve_get_editcurve(obedit);
 	Nurb *nu;
 	BPoint *bp;
@@ -1621,11 +1627,11 @@
 			a= nu->pntsu;
 			sel= 0;
 			while(a--) {
-				if(invert == 0 && BEZSELECTED_HIDDENHANDLES(bezt)) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list