[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58396] trunk/blender/source/blender/ editors/object: patch [#35789] Quick hack more/less tool for lattices

Campbell Barton ideasman42 at gmail.com
Fri Jul 19 12:49:23 CEST 2013


Revision: 58396
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58396
Author:   campbellbarton
Date:     2013-07-19 10:49:23 +0000 (Fri, 19 Jul 2013)
Log Message:
-----------
patch [#35789] Quick hack more/less tool for lattices
by Pedro Riera (priera), Andrey Dubravin, I also made some changes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_lattice.c
    trunk/blender/source/blender/editors/object/object_ops.c

Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h	2013-07-19 10:44:39 UTC (rev 58395)
+++ trunk/blender/source/blender/editors/object/object_intern.h	2013-07-19 10:49:23 UTC (rev 58396)
@@ -138,6 +138,8 @@
 
 /* object_lattice.c */
 void LATTICE_OT_select_all(struct wmOperatorType *ot);
+void LATTICE_OT_select_more(struct wmOperatorType *ot);
+void LATTICE_OT_select_less(struct wmOperatorType *ot);
 void LATTICE_OT_select_ungrouped(struct wmOperatorType *ot);
 void LATTICE_OT_select_random(struct wmOperatorType *ot);
 void LATTICE_OT_make_regular(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/object/object_lattice.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_lattice.c	2013-07-19 10:44:39 UTC (rev 58395)
+++ trunk/blender/source/blender/editors/object/object_lattice.c	2013-07-19 10:49:23 UTC (rev 58396)
@@ -38,6 +38,7 @@
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
 #include "BLI_rand.h"
+#include "BLI_bitmap.h"
 
 #include "DNA_curve_types.h"
 #include "DNA_key_types.h"
@@ -55,6 +56,7 @@
 #include "BKE_lattice.h"
 #include "BKE_deform.h"
 #include "BKE_report.h"
+#include "BKE_utildefines.h"
 
 #include "ED_lattice.h"
 #include "ED_object.h"
@@ -224,6 +226,110 @@
 	RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection");
 }
 
+/************************** Select More/Less Operator *************************/
+
+static bool lattice_test_bitmap_uvw(Lattice *lt, BLI_bitmap selpoints, int u, int v, int w, const bool selected)
+{
+	if ((u < 0 || u >= lt->pntsu) ||
+	    (v < 0 || v >= lt->pntsv) ||
+	    (w < 0 || w >= lt->pntsw))
+	{
+		return false;
+	}
+	else {
+		int i = BKE_lattice_index_from_uvw(lt, u, v, w);
+		if (lt->def[i].hide == 0) {
+			return (BLI_BITMAP_GET(selpoints, i) != 0) == selected;
+		}
+		return false;
+	}
+}
+
+static int lattice_select_more_less(bContext *C, const bool select)
+{
+	Object *obedit = CTX_data_edit_object(C);
+	Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt;
+	BPoint *bp;
+	const int tot = lt->pntsu * lt->pntsv * lt->pntsw;
+	int i, w, u, v;
+	BLI_bitmap selpoints;
+
+	lt->actbp = LT_ACTBP_NONE;
+
+	bp = lt->def;
+	selpoints = BLI_BITMAP_NEW(tot, __func__);
+	for (i = 0; i < tot; i++, bp++) {
+		if (bp->f1 & SELECT) {
+			BLI_BITMAP_SET(selpoints, i);
+		}
+	}
+
+	bp = lt->def;
+	for (w = 0; w < lt->pntsw; w++) {
+		for (v = 0; v < lt->pntsv; v++) {
+			for (u = 0; u < lt->pntsu; u++) {
+				if ((bp->hide == 0) && (((bp->f1 & SELECT) == 0) == select)) {
+					if (lattice_test_bitmap_uvw(lt, selpoints, u + 1, v, w, select) ||
+					    lattice_test_bitmap_uvw(lt, selpoints, u - 1, v, w, select) ||
+					    lattice_test_bitmap_uvw(lt, selpoints, u, v + 1, w, select) ||
+					    lattice_test_bitmap_uvw(lt, selpoints, u, v - 1, w, select) ||
+					    lattice_test_bitmap_uvw(lt, selpoints, u, v, w + 1, select) ||
+					    lattice_test_bitmap_uvw(lt, selpoints, u, v, w - 1, select))
+					{
+						BKE_BIT_TEST_SET(bp->f1, select, SELECT);
+					}
+				}
+				bp++;
+			}
+		}
+	}
+
+	MEM_freeN(selpoints);
+
+	WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
+	return OPERATOR_FINISHED;
+}
+
+static int lattice_select_more_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	return lattice_select_more_less(C, true);
+}
+
+static int lattice_select_less_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	return lattice_select_more_less(C, false);
+}
+
+void LATTICE_OT_select_more(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Select More";
+	ot->description = "Select vertex directly linked to already selected ones";
+	ot->idname = "LATTICE_OT_select_more";
+
+	/* api callbacks */
+	ot->exec = lattice_select_more_exec;
+	ot->poll = ED_operator_editlattice;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+void LATTICE_OT_select_less(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Select Less";
+	ot->description = "Deselect vertices at the boundary of each selection region";
+	ot->idname = "LATTICE_OT_select_less";
+
+	/* api callbacks */
+	ot->exec = lattice_select_less_exec;
+	ot->poll = ED_operator_editlattice;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
 /************************** Select All Operator *************************/
 
 void ED_setflagsLatt(Object *obedit, int flag)

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2013-07-19 10:44:39 UTC (rev 58395)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2013-07-19 10:49:23 UTC (rev 58396)
@@ -217,6 +217,8 @@
 	WM_operatortype_append(OBJECT_OT_shape_key_move);
 
 	WM_operatortype_append(LATTICE_OT_select_all);
+	WM_operatortype_append(LATTICE_OT_select_more);
+	WM_operatortype_append(LATTICE_OT_select_less);
 	WM_operatortype_append(LATTICE_OT_select_ungrouped);
 	WM_operatortype_append(LATTICE_OT_select_random);
 	WM_operatortype_append(LATTICE_OT_make_regular);
@@ -428,6 +430,8 @@
 	RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE);
 	kmi = WM_keymap_add_item(keymap, "LATTICE_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0);
 	RNA_enum_set(kmi->ptr, "action", SEL_INVERT);
+	WM_keymap_add_item(keymap, "LATTICE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_add_item(keymap, "LATTICE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
 
 	WM_keymap_add_item(keymap, "OBJECT_OT_vertex_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);
 	




More information about the Bf-blender-cvs mailing list