Blender V4.3
editlattice_select.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_bitmap.h"
14#include "BLI_listbase.h"
15#include "BLI_math_vector.h"
16#include "BLI_rand.h"
17#include "BLI_utildefines.h"
18
19#include "DNA_curve_types.h"
20#include "DNA_lattice_types.h"
21#include "DNA_meshdata_types.h"
22#include "DNA_object_types.h"
23#include "DNA_scene_types.h"
24
25#include "RNA_access.hh"
26#include "RNA_define.hh"
27#include "RNA_enum_types.hh"
28
29#include "BKE_context.hh"
30#include "BKE_lattice.hh"
31#include "BKE_layer.hh"
32#include "BKE_report.hh"
33
34#include "ED_lattice.hh"
35#include "ED_object.hh"
36#include "ED_screen.hh"
37#include "ED_select_utils.hh"
38#include "ED_view3d.hh"
39
40#include "WM_api.hh"
41#include "WM_types.hh"
42
43#include "DEG_depsgraph.hh"
44
45#include "lattice_intern.hh"
46
47using blender::Span;
48using blender::Vector;
49
50/* -------------------------------------------------------------------- */
54static void bpoint_select_set(BPoint *bp, bool select)
55{
56 if (select) {
57 if (!bp->hide) {
58 bp->f1 |= SELECT;
59 }
60 }
61 else {
62 bp->f1 &= ~SELECT;
63 }
64}
65
67{
68 bool changed_multi = false;
69 for (Base *base : bases) {
70 Object *ob_iter = base->object;
71 changed_multi |= ED_lattice_flags_set(ob_iter, 0);
72 DEG_id_tag_update(static_cast<ID *>(ob_iter->data), ID_RECALC_SELECT);
73 }
74 return changed_multi;
75}
76
85
88/* -------------------------------------------------------------------- */
93{
94 const bool select = (RNA_enum_get(op->ptr, "action") == SEL_SELECT);
95 const float randfac = RNA_float_get(op->ptr, "ratio");
97
98 const Scene *scene = CTX_data_scene(C);
99 ViewLayer *view_layer = CTX_data_view_layer(C);
101 scene, view_layer, CTX_wm_view3d(C));
102 for (const int ob_index : objects.index_range()) {
103 Object *obedit = objects[ob_index];
104 Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt;
105 int seed_iter = seed;
106
107 /* This gives a consistent result regardless of object order. */
108 if (ob_index) {
109 seed_iter += BLI_ghashutil_strhash_p(obedit->id.name);
110 }
111
112 int a = lt->pntsu * lt->pntsv * lt->pntsw;
113 int elem_map_len = 0;
114 BPoint **elem_map = static_cast<BPoint **>(MEM_mallocN(sizeof(*elem_map) * a, __func__));
115 BPoint *bp = lt->def;
116
117 while (a--) {
118 if (!bp->hide) {
119 elem_map[elem_map_len++] = bp;
120 }
121 bp++;
122 }
123
124 BLI_array_randomize(elem_map, sizeof(*elem_map), elem_map_len, seed_iter);
125 const int count_select = elem_map_len * randfac;
126 for (int i = 0; i < count_select; i++) {
127 bpoint_select_set(elem_map[i], select);
128 }
129 MEM_freeN(elem_map);
130
131 if (select == false) {
132 lt->actbp = LT_ACTBP_NONE;
133 }
134
135 DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT);
137 }
138
139 return OPERATOR_FINISHED;
140}
141
143{
144 /* identifiers */
145 ot->name = "Select Random";
146 ot->description = "Randomly select UVW control points";
147 ot->idname = "LATTICE_OT_select_random";
148
149 /* api callbacks */
152
153 /* flags */
155
156 /* props */
158}
159
162/* -------------------------------------------------------------------- */
166static void ed_lattice_select_mirrored(Lattice *lt, const int axis, const bool extend)
167{
168 const int tot = lt->pntsu * lt->pntsv * lt->pntsw;
169
170 bool flip_uvw[3] = {false};
171 flip_uvw[axis] = true;
172
173 /* we could flip this too */
174 if (!extend) {
175 lt->actbp = LT_ACTBP_NONE;
176 }
177
178 /* store "original" selection */
179 BLI_bitmap *selpoints = BLI_BITMAP_NEW(tot, __func__);
180 BKE_lattice_bitmap_from_flag(lt, selpoints, SELECT, false, false);
181
182 /* actual (de)selection */
183 for (int i = 0; i < tot; i++) {
184 const int i_flip = BKE_lattice_index_flip(lt, i, flip_uvw[0], flip_uvw[1], flip_uvw[2]);
185 BPoint *bp = &lt->def[i];
186 if (!bp->hide) {
187 if (BLI_BITMAP_TEST(selpoints, i_flip)) {
188 bp->f1 |= SELECT;
189 }
190 else {
191 if (!extend) {
192 bp->f1 &= ~SELECT;
193 }
194 }
195 }
196 }
197
198 MEM_freeN(selpoints);
199}
200
202{
203 const int axis_flag = RNA_enum_get(op->ptr, "axis");
204 const bool extend = RNA_boolean_get(op->ptr, "extend");
205
206 const Scene *scene = CTX_data_scene(C);
207 ViewLayer *view_layer = CTX_data_view_layer(C);
209 scene, view_layer, CTX_wm_view3d(C));
210
211 for (Object *obedit : objects) {
212 Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt;
213
214 for (int axis = 0; axis < 3; axis++) {
215 if ((1 << axis) & axis_flag) {
216 ed_lattice_select_mirrored(lt, axis, extend);
217 }
218 }
219
220 /* TODO: only notify changes. */
221 DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT);
222 WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
223 }
224
225 return OPERATOR_FINISHED;
226}
227
229{
230 /* identifiers */
231 ot->name = "Select Mirror";
232 ot->description = "Select mirrored lattice points";
233 ot->idname = "LATTICE_OT_select_mirror";
234
235 /* api callbacks */
238
239 /* flags */
241
242 /* props */
243 RNA_def_enum_flag(ot->srna, "axis", rna_enum_axis_flag_xyz_items, (1 << 0), "Axis", "");
244
245 RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection");
246}
247
250/* -------------------------------------------------------------------- */
255 const Lattice *lt, const BLI_bitmap *selpoints, int u, int v, int w, const bool selected)
256{
257 if ((u < 0 || u >= lt->pntsu) || (v < 0 || v >= lt->pntsv) || (w < 0 || w >= lt->pntsw)) {
258 return false;
259 }
260
261 int i = BKE_lattice_index_from_uvw(lt, u, v, w);
262 if (lt->def[i].hide == 0) {
263 return (BLI_BITMAP_TEST(selpoints, i) != 0) == selected;
264 }
265 return false;
266}
267
268static int lattice_select_more_less(bContext *C, const bool select)
269{
270 const Scene *scene = CTX_data_scene(C);
271 ViewLayer *view_layer = CTX_data_view_layer(C);
272 bool changed = false;
273
275 scene, view_layer, CTX_wm_view3d(C));
276 for (Object *obedit : objects) {
277 Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt;
278 BPoint *bp;
279 const int tot = lt->pntsu * lt->pntsv * lt->pntsw;
280 int u, v, w;
281 BLI_bitmap *selpoints;
282
283 lt->actbp = LT_ACTBP_NONE;
284
285 selpoints = BLI_BITMAP_NEW(tot, __func__);
286 BKE_lattice_bitmap_from_flag(lt, selpoints, SELECT, false, false);
287
288 bp = lt->def;
289 for (w = 0; w < lt->pntsw; w++) {
290 for (v = 0; v < lt->pntsv; v++) {
291 for (u = 0; u < lt->pntsu; u++) {
292 if ((bp->hide == 0) && (((bp->f1 & SELECT) == 0) == select)) {
293 if (lattice_test_bitmap_uvw(lt, selpoints, u + 1, v, w, select) ||
294 lattice_test_bitmap_uvw(lt, selpoints, u - 1, v, w, select) ||
295 lattice_test_bitmap_uvw(lt, selpoints, u, v + 1, w, select) ||
296 lattice_test_bitmap_uvw(lt, selpoints, u, v - 1, w, select) ||
297 lattice_test_bitmap_uvw(lt, selpoints, u, v, w + 1, select) ||
298 lattice_test_bitmap_uvw(lt, selpoints, u, v, w - 1, select))
299 {
301 }
302 }
303 bp++;
304 }
305 }
306 }
307
308 MEM_freeN(selpoints);
309
310 changed = true;
311 DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT);
312 WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
313 }
314
315 return changed ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
316}
317
319{
320 return lattice_select_more_less(C, true);
321}
322
324{
325 return lattice_select_more_less(C, false);
326}
327
329{
330 /* identifiers */
331 ot->name = "Select More";
332 ot->description = "Select vertex directly linked to already selected ones";
333 ot->idname = "LATTICE_OT_select_more";
334
335 /* api callbacks */
338
339 /* flags */
341}
342
344{
345 /* identifiers */
346 ot->name = "Select Less";
347 ot->description = "Deselect vertices at the boundary of each selection region";
348 ot->idname = "LATTICE_OT_select_less";
349
350 /* api callbacks */
353
354 /* flags */
356}
357
360/* -------------------------------------------------------------------- */
365{
366 Lattice *lt = static_cast<Lattice *>(obedit->data);
367 BPoint *bp;
368 int a;
369 bool changed = false;
370
371 bp = lt->editlatt->latt->def;
372
373 a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw;
374
375 if (lt->editlatt->latt->actbp != LT_ACTBP_NONE) {
377 changed = true;
378 }
379
380 while (a--) {
381 if (bp->hide == 0) {
382 if (bp->f1 != flag) {
383 bp->f1 = flag;
384 changed = true;
385 }
386 }
387 bp++;
388 }
389 return changed;
390}
391
393{
394 const Scene *scene = CTX_data_scene(C);
395 ViewLayer *view_layer = CTX_data_view_layer(C);
396 int action = RNA_enum_get(op->ptr, "action");
397
399 scene, view_layer, CTX_wm_view3d(C));
400
401 if (action == SEL_TOGGLE) {
402 action = SEL_SELECT;
403 for (Object *obedit : objects) {
404 Lattice *lt = static_cast<Lattice *>(obedit->data);
406 action = SEL_DESELECT;
407 break;
408 }
409 }
410 }
411
412 bool changed_multi = false;
413 for (Object *obedit : objects) {
414 Lattice *lt;
415 BPoint *bp;
416 int a;
417 bool changed = false;
418
419 switch (action) {
420 case SEL_SELECT:
421 changed = ED_lattice_flags_set(obedit, 1);
422 break;
423 case SEL_DESELECT:
424 changed = ED_lattice_flags_set(obedit, 0);
425 break;
426 case SEL_INVERT:
427 lt = static_cast<Lattice *>(obedit->data);
428 bp = lt->editlatt->latt->def;
429 a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw;
431
432 while (a--) {
433 if (bp->hide == 0) {
434 bp->f1 ^= SELECT;
435 changed = true;
436 }
437 bp++;
438 }
439 break;
440 }
441 if (changed) {
442 changed_multi = true;
443 DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT);
444 WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
445 }
446 }
447
448 if (changed_multi) {
449 return OPERATOR_FINISHED;
450 }
451 return OPERATOR_CANCELLED;
452}
453
455{
456 /* identifiers */
457 ot->name = "(De)select All";
458 ot->description = "Change selection of all UVW control points";
459 ot->idname = "LATTICE_OT_select_all";
460
461 /* api callbacks */
464
465 /* flags */
467
469}
470
473/* -------------------------------------------------------------------- */
478{
479 const Scene *scene = CTX_data_scene(C);
480 ViewLayer *view_layer = CTX_data_view_layer(C);
481 const bool is_extend = RNA_boolean_get(op->ptr, "extend");
482 bool changed = false;
483
485 scene, view_layer, CTX_wm_view3d(C));
486 for (Object *obedit : objects) {
487 Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt;
488 MDeformVert *dv;
489 BPoint *bp;
490 int a, tot;
491
492 if (BLI_listbase_is_empty(&lt->vertex_group_names) || lt->dvert == nullptr) {
493 continue;
494 }
495
496 if (!is_extend) {
497 ED_lattice_flags_set(obedit, 0);
498 }
499
500 dv = lt->dvert;
501 tot = lt->pntsu * lt->pntsv * lt->pntsw;
502
503 for (a = 0, bp = lt->def; a < tot; a++, bp++, dv++) {
504 if (bp->hide == 0) {
505 if (dv->dw == nullptr) {
506 bp->f1 |= SELECT;
507 }
508 }
509 }
510
511 changed = true;
512 DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT);
513 WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
514 }
515
516 if (!changed) {
517 BKE_report(op->reports, RPT_ERROR, "No weights/vertex groups on object(s)");
518 return OPERATOR_CANCELLED;
519 }
520 return OPERATOR_FINISHED;
521}
522
524{
525 /* identifiers */
526 ot->name = "Select Ungrouped";
527 ot->idname = "LATTICE_OT_select_ungrouped";
528 ot->description = "Select vertices without a group";
529
530 /* api callbacks */
533
534 /* flags */
536
537 RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection");
538}
539
542/* -------------------------------------------------------------------- */
557
558static void findnearestLattvert__doClosest(void *user_data, BPoint *bp, const float screen_co[2])
559{
560 NearestLatticeVert_UserData *data = static_cast<NearestLatticeVert_UserData *>(user_data);
561 float dist_test = len_manhattan_v2v2(data->mval_fl, screen_co);
562
563 if ((bp->f1 & SELECT) && data->select) {
564 dist_test += 5.0f;
565 }
566
567 if (dist_test < data->dist) {
568 data->dist = dist_test;
569 data->bp = bp;
570 data->is_changed = true;
571 }
572}
573
575{
576 NearestLatticeVert_UserData data = {nullptr};
577
579 data.select = select;
580 data.mval_fl[0] = vc->mval[0];
581 data.mval_fl[1] = vc->mval[1];
582
584 vc->scene, vc->view_layer, vc->v3d);
585 for (Base *base : bases) {
586 data.is_changed = false;
587
588 ED_view3d_viewcontext_init_object(vc, base->object);
589 ED_view3d_init_mats_rv3d(base->object, vc->rv3d);
592
593 if (data.is_changed) {
594 *r_base = base;
595 }
596 }
597 return data.bp;
598}
599
600bool ED_lattice_select_pick(bContext *C, const int mval[2], const SelectPick_Params *params)
601{
603 BPoint *bp = nullptr;
604 Base *basact = nullptr;
605 bool changed = false;
606
608 vc.mval[0] = mval[0];
609 vc.mval[1] = mval[1];
610
611 bp = findnearestLattvert(&vc, true, &basact);
612 bool found = (bp != nullptr);
613
614 if (params->sel_op == SEL_OP_SET) {
615 if ((found && params->select_passthrough) && (bp->f1 & SELECT)) {
616 found = false;
617 }
618 else if (found || params->deselect_all) {
619 /* Deselect everything. */
621 vc.scene, vc.view_layer, vc.v3d);
622 for (Object *ob : objects) {
623 if (ED_lattice_flags_set(ob, 0)) {
624 DEG_id_tag_update(static_cast<ID *>(ob->data), ID_RECALC_SELECT);
626 }
627 }
628 changed = true;
629 }
630 }
631
632 if (found) {
634 Lattice *lt = ((Lattice *)vc.obedit->data)->editlatt->latt;
635
636 switch (params->sel_op) {
637 case SEL_OP_ADD: {
638 bp->f1 |= SELECT;
639 break;
640 }
641 case SEL_OP_SUB: {
642 bp->f1 &= ~SELECT;
643 break;
644 }
645 case SEL_OP_XOR: {
646 bp->f1 ^= SELECT; /* swap */
647 break;
648 }
649 case SEL_OP_SET: {
650 bp->f1 |= SELECT;
651 break;
652 }
653 case SEL_OP_AND: {
654 BLI_assert_unreachable(); /* Doesn't make sense for picking. */
655 break;
656 }
657 }
658
659 if (bp->f1 & SELECT) {
660 lt->actbp = bp - lt->def;
661 }
662 else {
663 lt->actbp = LT_ACTBP_NONE;
664 }
665
667 if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
669 }
670
671 DEG_id_tag_update(static_cast<ID *>(vc.obedit->data), ID_RECALC_SELECT);
673
674 changed = true;
675 }
676
677 return changed || found;
678}
679
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_lattice_bitmap_from_flag(const Lattice *lt, unsigned int *bitmap, uint8_t flag, bool clear, bool respecthide)
Definition lattice.cc:235
int BKE_lattice_index_flip(const Lattice *lt, int index, bool flip_u, bool flip_v, bool flip_w)
Definition lattice.cc:213
int BKE_lattice_index_from_uvw(const Lattice *lt, int u, int v, int w)
Definition lattice.cc:195
bool BKE_lattice_is_any_selected(const Lattice *lt)
Definition lattice.cc:685
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:125
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
#define BLI_BITMAP_NEW(_num, _alloc_string)
Definition BLI_bitmap.h:41
#define BLI_BITMAP_TEST(_bitmap, _index)
Definition BLI_bitmap.h:65
unsigned int BLI_bitmap
Definition BLI_bitmap.h:17
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
MINLINE float len_manhattan_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
Random number functions.
void BLI_array_randomize(void *data, unsigned int elem_size, unsigned int elem_num, unsigned int seed)
Definition rand.cc:188
#define SET_FLAG_FROM_TEST(value, test, flag)
void DEG_id_tag_update(ID *id, unsigned int flags)
@ ID_RECALC_SELECT
Definition DNA_ID.h:1068
#define LT_ACTBP_NONE
Object is a sort of wrapper for general info.
bool ED_operator_editlattice(bContext *C)
@ SEL_SELECT
@ SEL_INVERT
@ SEL_DESELECT
@ SEL_TOGGLE
@ SEL_OP_ADD
@ SEL_OP_SUB
@ SEL_OP_SET
@ SEL_OP_AND
@ SEL_OP_XOR
float ED_view3d_select_dist_px()
void ED_view3d_init_mats_rv3d(const Object *ob, RegionView3D *rv3d)
ViewContext ED_view3d_viewcontext_init(bContext *C, Depsgraph *depsgraph)
void lattice_foreachScreenVert(const ViewContext *vc, void(*func)(void *user_data, BPoint *bp, const float screen_co[2]), void *user_data, eV3DProjTest clip_flag)
#define V3D_PROJ_TEST_CLIP_DEFAULT
Definition ED_view3d.hh:296
void ED_view3d_viewcontext_init_object(ViewContext *vc, Object *obact)
Read Guarded memory(de)allocation.
@ OPTYPE_UNDO
Definition WM_types.hh:162
@ OPTYPE_REGISTER
Definition WM_types.hh:160
#define NC_GEOM
Definition WM_types.hh:360
#define ND_SELECT
Definition WM_types.hh:474
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
static unsigned long seed
Definition btSoftBody.h:39
#define SELECT
const Depsgraph * depsgraph
static int lattice_select_less_exec(bContext *C, wmOperator *)
static bool lattice_deselect_all_multi(const Span< Base * > bases)
static void findnearestLattvert__doClosest(void *user_data, BPoint *bp, const float screen_co[2])
bool ED_lattice_select_pick(bContext *C, const int mval[2], const SelectPick_Params *params)
void LATTICE_OT_select_all(wmOperatorType *ot)
static void bpoint_select_set(BPoint *bp, bool select)
void LATTICE_OT_select_random(wmOperatorType *ot)
bool ED_lattice_deselect_all_multi(bContext *C)
static int lattice_select_random_exec(bContext *C, wmOperator *op)
void LATTICE_OT_select_more(wmOperatorType *ot)
static int lattice_select_more_less(bContext *C, const bool select)
void LATTICE_OT_select_ungrouped(wmOperatorType *ot)
static int lattice_select_all_exec(bContext *C, wmOperator *op)
void LATTICE_OT_select_mirror(wmOperatorType *ot)
static int lattice_select_ungrouped_exec(bContext *C, wmOperator *op)
bool ED_lattice_flags_set(Object *obedit, int flag)
static BPoint * findnearestLattvert(ViewContext *vc, bool select, Base **r_base)
static bool lattice_test_bitmap_uvw(const Lattice *lt, const BLI_bitmap *selpoints, int u, int v, int w, const bool selected)
static int lattice_select_more_exec(bContext *C, wmOperator *)
static void ed_lattice_select_mirrored(Lattice *lt, const int axis, const bool extend)
void LATTICE_OT_select_less(wmOperatorType *ot)
static int lattice_select_mirror_exec(bContext *C, wmOperator *op)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
void base_activate(bContext *C, Base *base)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
const EnumPropertyItem rna_enum_axis_flag_xyz_items[]
uint8_t f1
struct Object * object
struct Lattice * latt
Definition DNA_ID.h:413
char name[66]
Definition DNA_ID.h:425
ListBase vertex_group_names
struct MDeformVert * dvert
struct EditLatt * editlatt
struct BPoint * def
struct MDeformWeight * dw
RegionView3D * rv3d
Definition ED_view3d.hh:76
int mval[2]
Definition ED_view3d.hh:78
Scene * scene
Definition ED_view3d.hh:69
ViewLayer * view_layer
Definition ED_view3d.hh:70
View3D * v3d
Definition ED_view3d.hh:74
Object * obedit
Definition ED_view3d.hh:72
const char * name
Definition WM_types.hh:990
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1042
const char * idname
Definition WM_types.hh:992
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1006
const char * description
Definition WM_types.hh:996
StructRNA * srna
Definition WM_types.hh:1080
struct ReportList * reports
struct PointerRNA * ptr
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4125
int WM_operator_properties_select_random_seed_increment_get(wmOperator *op)
void WM_operator_properties_select_random(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)
uint8_t flag
Definition wm_window.cc:138