Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/object/object_lattice.c')
-rw-r--r--source/blender/editors/object/object_lattice.c70
1 files changed, 47 insertions, 23 deletions
diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c
index 3f27ea407a2..1cda843845a 100644
--- a/source/blender/editors/object/object_lattice.c
+++ b/source/blender/editors/object/object_lattice.c
@@ -38,6 +38,8 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "RNA_access.h"
+
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_key.h"
@@ -154,7 +156,7 @@ void load_editLatt(Object *obedit)
/************************** Operators *************************/
-static void setflagsLatt(Object *obedit, int flag)
+void ED_setflagsLatt(Object *obedit, int flag)
{
Lattice *lt= obedit->data;
BPoint *bp;
@@ -172,49 +174,71 @@ static void setflagsLatt(Object *obedit, int flag)
}
}
-int de_select_all_exec(bContext *C, wmOperator *op)
+int select_all_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Lattice *lt= obedit->data;
BPoint *bp;
- int a, deselect= 0;
-
- bp= lt->editlatt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
-
- while(a--) {
- if(bp->hide==0) {
- if(bp->f1) {
- deselect= 1;
- break;
+ int a;
+ int action = RNA_enum_get(op->ptr, "action");
+
+ if (action == SEL_TOGGLE) {
+ action = SEL_SELECT;
+
+ bp= lt->editlatt->def;
+ a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+
+ while(a--) {
+ if(bp->hide==0) {
+ if(bp->f1) {
+ action = SEL_DESELECT;
+ break;
+ }
}
+ bp++;
}
- bp++;
}
- if(deselect)
- setflagsLatt(obedit, 0);
- else
- setflagsLatt(obedit, 1);
-
+ switch (action) {
+ case SEL_SELECT:
+ ED_setflagsLatt(obedit, 1);
+ break;
+ case SEL_DESELECT:
+ ED_setflagsLatt(obedit, 0);
+ break;
+ case SEL_INVERT:
+ bp= lt->editlatt->def;
+ a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+
+ while(a--) {
+ if(bp->hide==0) {
+ bp->f1 ^= 1;
+ }
+ bp++;
+ }
+ break;
+ }
+
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
return OPERATOR_FINISHED;
}
-void LATTICE_OT_select_all_toggle(wmOperatorType *ot)
+void LATTICE_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select or Deselect All";
- ot->description= "Toggle (de)select all UVW control points.";
- ot->idname= "LATTICE_OT_select_all_toggle";
+ ot->description= "Change selection of all UVW control points.";
+ ot->idname= "LATTICE_OT_select_all";
/* api callbacks */
- ot->exec= de_select_all_exec;
+ ot->exec= select_all_exec;
ot->poll= ED_operator_editlattice;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ WM_operator_properties_select_all(ot);
}
int make_regular_poll(bContext *C)
@@ -308,7 +332,7 @@ int mouse_lattice(bContext *C, short mval[2], int extend)
if(bp) {
if(extend==0) {
- setflagsLatt(vc.obedit, 0);
+ ED_setflagsLatt(vc.obedit, 0);
bp->f1 |= SELECT;
}
else