[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33220] trunk/blender/source/blender/ editors: Applying patch #24822: Select linked for curves as for meshes, CTRL + L version

Sergey Sharybin g.ulairi at gmail.com
Sun Nov 21 19:50:56 CET 2010


Revision: 33220
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33220
Author:   nazgul
Date:     2010-11-21 19:50:53 +0100 (Sun, 21 Nov 2010)

Log Message:
-----------
Applying patch #24822: Select linked for curves as for meshes, CTRL + L version

With some own changes:
- Select pick moved to invoke()
- Used editsurfcurve_region_view3d as poll function for this operator
  due to ogl dependency

Thanks to Elia Sarti (vekoon)!

Modified Paths:
--------------
    trunk/blender/source/blender/editors/curve/curve_intern.h
    trunk/blender/source/blender/editors/curve/curve_ops.c
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/curve/curve_intern.h
===================================================================
--- trunk/blender/source/blender/editors/curve/curve_intern.h	2010-11-21 18:46:50 UTC (rev 33219)
+++ trunk/blender/source/blender/editors/curve/curve_intern.h	2010-11-21 18:50:53 UTC (rev 33220)
@@ -106,6 +106,7 @@
 void CURVE_OT_select_all(struct wmOperatorType *ot);
 void CURVE_OT_select_inverse(struct wmOperatorType *ot);
 void CURVE_OT_select_linked(struct wmOperatorType *ot);
+void CURVE_OT_select_linked_pick(struct wmOperatorType *ot);
 void CURVE_OT_select_row(struct wmOperatorType *ot);
 void CURVE_OT_select_next(struct wmOperatorType *ot);
 void CURVE_OT_select_previous(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/curve/curve_ops.c
===================================================================
--- trunk/blender/source/blender/editors/curve/curve_ops.c	2010-11-21 18:46:50 UTC (rev 33219)
+++ trunk/blender/source/blender/editors/curve/curve_ops.c	2010-11-21 18:50:53 UTC (rev 33220)
@@ -117,6 +117,7 @@
 	WM_operatortype_append(CURVE_OT_select_all);
 	WM_operatortype_append(CURVE_OT_select_inverse);
 	WM_operatortype_append(CURVE_OT_select_linked);
+	WM_operatortype_append(CURVE_OT_select_linked_pick);
 	WM_operatortype_append(CURVE_OT_select_row);
 	WM_operatortype_append(CURVE_OT_select_next);
 	WM_operatortype_append(CURVE_OT_select_previous);
@@ -201,8 +202,9 @@
 	WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "CURVE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
-	WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
-	RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
+	WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
 
 	WM_keymap_add_item(keymap, "CURVE_OT_separate", PKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "CURVE_OT_extrude", EKEY, KM_PRESS, 0, 0);

Modified: trunk/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c	2010-11-21 18:46:50 UTC (rev 33219)
+++ trunk/blender/source/blender/editors/curve/editcurve.c	2010-11-21 18:50:53 UTC (rev 33220)
@@ -4457,24 +4457,99 @@
 
 /***************** select linked operator ******************/
 
-static int select_linked_exec(bContext *C, wmOperator *op)
+static int select_linked_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	Object *obedit= CTX_data_edit_object(C);
-	RegionView3D *rv3d= ED_view3d_context_rv3d(C);
+	Curve *cu= (Curve*)obedit->data;
+	EditNurb *editnurb= cu->editnurb;
+	ListBase *nurbs= &editnurb->nurbs;
+	Nurb *nu;
+	BezTriple *bezt;
+	BPoint *bp;
+	int a;
+
+	for(nu= nurbs->first; nu; nu= nu->next) {
+		if(nu->type == CU_BEZIER) {
+			bezt= nu->bezt;
+			a= nu->pntsu;
+			while(a--) {
+				if( (bezt->f1 & SELECT) || (bezt->f2 & SELECT) || (bezt->f3 & SELECT) ) {
+					a= nu->pntsu;
+					bezt= nu->bezt;
+					while(a--) {
+						select_beztriple(bezt, SELECT, 1, VISIBLE);
+						bezt++;
+					}
+					break;
+				}
+				bezt++;
+			}
+		}
+		else {
+			bp= nu->bp;
+			a= nu->pntsu*nu->pntsv;
+			while(a--) {
+				if( bp->f1 & 1 ) {
+					a= nu->pntsu*nu->pntsv;
+					bp= nu->bp;
+					while(a--) {
+						select_bpoint(bp, SELECT, 1, VISIBLE);
+						bp++;
+					}
+					break;
+				}
+				bp++;
+			}
+		}
+	}
+
+	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
+
+	return OPERATOR_FINISHED;
+}
+
+static int select_linked_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
+{
+	return select_linked_exec(C, op);
+}
+
+void CURVE_OT_select_linked(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Select Linked All";
+	ot->idname= "CURVE_OT_select_linked";
+
+	/* api callbacks */
+	ot->exec= select_linked_exec;
+	ot->invoke= select_linked_invoke;
+	ot->poll= ED_operator_editsurfcurve;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	/* properties */
+}
+
+
+/***************** select linked pick operator ******************/
+
+static int select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	Object *obedit= CTX_data_edit_object(C);
+	ARegion *ar= CTX_wm_region(C);
 	ViewContext vc;
 	Nurb *nu;
 	BezTriple *bezt;
 	BPoint *bp;
 	int a, location[2], deselect;
 
-	if(!rv3d)
-		return OPERATOR_CANCELLED;
-	
 	deselect= RNA_boolean_get(op->ptr, "deselect");
-	RNA_int_get_array(op->ptr, "location", location);
-	
+ 	location[0]= event->x - ar->winrct.xmin;
+ 	location[1]= event->y - ar->winrct.ymin;
+
 	view3d_operator_needs_opengl(C);
 	view3d_set_viewcontext(C, &vc);
+
 	findnearestNurbvert(&vc, 1, location, &nu, &bezt, &bp);
 
 	if(bezt) {
@@ -4497,39 +4572,25 @@
 	}
 
 	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
-	
+
 	return OPERATOR_FINISHED;
 }
 
-static int select_linked_invoke(bContext *C, wmOperator *op, wmEvent *event)
+void CURVE_OT_select_linked_pick(wmOperatorType *ot)
 {
-	ARegion *ar= CTX_wm_region(C);
-	int location[2];
-
-	location[0]= event->x - ar->winrct.xmin;
-	location[1]= event->y - ar->winrct.ymin;
-	RNA_int_set_array(op->ptr, "location", location);
-
-	return select_linked_exec(C, op);
-}
-
-void CURVE_OT_select_linked(wmOperatorType *ot)
-{
 	/* identifiers */
 	ot->name= "Select Linked";
-	ot->idname= "CURVE_OT_select_linked";
-	
+	ot->idname= "CURVE_OT_select_linked_pick";
+
 	/* api callbacks */
-	ot->exec= select_linked_exec;
-	ot->invoke= select_linked_invoke;
-	ot->poll= ED_operator_editsurfcurve;
+	ot->invoke= select_linked_pick_invoke;
+	ot->poll= ED_operator_editsurfcurve_region_view3d;
 
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	/* properties */
 	RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect linked control points rather than selecting them.");
-	RNA_def_int_vector(ot->srna, "location", 2, NULL, 0, INT_MAX, "Location", "", 0, 16384);
 }
 
 /***************** select row operator **********************/

Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h	2010-11-21 18:46:50 UTC (rev 33219)
+++ trunk/blender/source/blender/editors/include/ED_screen.h	2010-11-21 18:50:53 UTC (rev 33220)
@@ -156,6 +156,7 @@
 int		ED_operator_editcurve(struct bContext *C);
 int		ED_operator_editsurf(struct bContext *C);
 int		ED_operator_editsurfcurve(struct bContext *C);
+int		ED_operator_editsurfcurve_region_view3d(struct bContext *C);
 int		ED_operator_editfont(struct bContext *C);
 int		ED_operator_editlattice(struct bContext *C);
 int		ED_operator_editmball(struct bContext *C);

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-11-21 18:46:50 UTC (rev 33219)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-11-21 18:50:53 UTC (rev 33220)
@@ -364,7 +364,15 @@
 	return 0;
 }
 
+int ED_operator_editsurfcurve_region_view3d(bContext *C)
+{
+	if(ED_operator_editsurfcurve(C) && CTX_wm_region_view3d(C))
+		return 1;
 
+	CTX_wm_operator_poll_msg_set(C, "expected a view3d region & editcurve");
+	return 0;
+}
+
 int ED_operator_editcurve(bContext *C)
 {
 	Object *obedit= CTX_data_edit_object(C);





More information about the Bf-blender-cvs mailing list