Blender V4.3
editmesh_add.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2004 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "BLI_math_matrix.h"
10#include "BLI_sys_types.h"
11
12#include "DNA_object_types.h"
13#include "DNA_scene_types.h"
14
15#include "BLT_translation.hh"
16
17#include "BKE_context.hh"
18#include "BKE_editmesh.hh"
19
20#include "RNA_access.hh"
21#include "RNA_define.hh"
22
23#include "WM_api.hh"
24#include "WM_types.hh"
25
26#include "ED_mesh.hh"
27#include "ED_object.hh"
28#include "ED_screen.hh"
29
30#include "mesh_intern.hh" /* own include */
31
32#define MESH_ADD_VERTS_MAXI 10000000
33
34/* ********* add primitive operators ************* */
35
37 float mat[4][4];
39};
40
42 const char *idname,
43 const float loc[3],
44 const float rot[3],
45 const float scale[3],
46 ushort local_view_bits,
47 MakePrimitiveData *r_creation_data)
48{
49 Main *bmain = CTX_data_main(C);
50 Scene *scene = CTX_data_scene(C);
51 Object *obedit = CTX_data_edit_object(C);
52
53 r_creation_data->was_editmode = false;
54 if (obedit == nullptr || obedit->type != OB_MESH) {
55 obedit = blender::ed::object::add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
56 blender::ed::object::editmode_enter_ex(bmain, scene, obedit, 0);
57
58 r_creation_data->was_editmode = true;
59 }
60
61 blender::ed::object::new_primitive_matrix(C, obedit, loc, rot, scale, r_creation_data->mat);
62
63 return obedit;
64}
65
67 Object *obedit,
68 const MakePrimitiveData *creation_data,
69 int enter_editmode)
70{
72 const bool exit_editmode = ((creation_data->was_editmode == true) && (enter_editmode == false));
73
74 /* Primitive has all verts selected, use vert select flush
75 * to push this up to edges & faces. */
77
78 /* Only recalculate edit-mode tessellation if we are staying in edit-mode. */
80 params.calc_looptris = !exit_editmode;
81 params.calc_normals = false;
82 params.is_destructive = true;
83 EDBM_update(static_cast<Mesh *>(obedit->data), &params);
84
85 /* userdef */
86 if (exit_editmode) {
89 }
91}
92
94{
95 MakePrimitiveData creation_data;
96 Object *obedit;
97 BMEditMesh *em;
98 float loc[3], rot[3];
99 bool enter_editmode;
100 ushort local_view_bits;
101 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
102
105 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
106 obedit = make_prim_init(C,
108 loc,
109 rot,
110 nullptr,
111 local_view_bits,
112 &creation_data);
113
114 em = BKE_editmesh_from_object(obedit);
115
116 if (calc_uvs) {
117 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
118 }
119
121 em,
122 op,
123 "verts.out",
124 false,
125 "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
126 0,
127 0,
128 RNA_float_get(op->ptr, "size") / 2.0f,
129 creation_data.mat,
130 calc_uvs))
131 {
132 return OPERATOR_CANCELLED;
133 }
134
135 make_prim_finish(C, obedit, &creation_data, enter_editmode);
136
137 return OPERATOR_FINISHED;
138}
139
141{
142 /* identifiers */
143 ot->name = "Add Plane";
144 ot->description = "Construct a filled planar mesh with 4 vertices";
145 ot->idname = "MESH_OT_primitive_plane_add";
146
147 /* api callbacks */
150
151 /* flags */
153
157}
158
160{
161 MakePrimitiveData creation_data;
162 Object *obedit;
163 BMEditMesh *em;
164 float loc[3], rot[3], scale[3];
165 bool enter_editmode;
166 ushort local_view_bits;
167 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
168
171 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
172 obedit = make_prim_init(C,
174 loc,
175 rot,
176 scale,
177 local_view_bits,
178 &creation_data);
179
180 em = BKE_editmesh_from_object(obedit);
181
182 if (calc_uvs) {
183 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
184 }
185
187 op,
188 "verts.out",
189 false,
190 "create_cube matrix=%m4 size=%f calc_uvs=%b",
191 creation_data.mat,
192 RNA_float_get(op->ptr, "size"),
193 calc_uvs))
194 {
195 return OPERATOR_CANCELLED;
196 }
197
198 /* BMESH_TODO make plane side this: M_SQRT2 - plane (diameter of 1.41 makes it unit size) */
199 make_prim_finish(C, obedit, &creation_data, enter_editmode);
200
201 return OPERATOR_FINISHED;
202}
203
205{
206 /* identifiers */
207 ot->name = "Add Cube";
208 ot->description = "Construct a cube mesh that consists of six square faces";
209 ot->idname = "MESH_OT_primitive_cube_add";
210
211 /* api callbacks */
214
215 /* flags */
217
221}
222
224 {0, "NOTHING", 0, "Nothing", "Don't fill at all"},
225 {1, "NGON", 0, "N-Gon", "Use n-gons"},
226 {2, "TRIFAN", 0, "Triangle Fan", "Use triangle fans"},
227 {0, nullptr, 0, nullptr, nullptr},
228};
229
231{
232 MakePrimitiveData creation_data;
233 Object *obedit;
234 BMEditMesh *em;
235 float loc[3], rot[3];
236 bool enter_editmode;
237 ushort local_view_bits;
238 int cap_end, cap_tri;
239 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
240
241 cap_end = RNA_enum_get(op->ptr, "fill_type");
242 cap_tri = (cap_end == 2);
243
246 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
247 obedit = make_prim_init(C,
249 loc,
250 rot,
251 nullptr,
252 local_view_bits,
253 &creation_data);
254
255 em = BKE_editmesh_from_object(obedit);
256
257 if (calc_uvs) {
258 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
259 }
260
262 em,
263 op,
264 "verts.out",
265 false,
266 "create_circle segments=%i radius=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b",
267 RNA_int_get(op->ptr, "vertices"),
268 RNA_float_get(op->ptr, "radius"),
269 cap_end,
270 cap_tri,
271 creation_data.mat,
272 calc_uvs))
273 {
274 return OPERATOR_CANCELLED;
275 }
276
277 make_prim_finish(C, obedit, &creation_data, enter_editmode);
278
279 return OPERATOR_FINISHED;
280}
281
283{
284 /* identifiers */
285 ot->name = "Add Circle";
286 ot->description = "Construct a circle mesh";
287 ot->idname = "MESH_OT_primitive_circle_add";
288
289 /* api callbacks */
292
293 /* flags */
295
296 /* props */
297 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
299 RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", "");
300
303}
304
306{
307 MakePrimitiveData creation_data;
308 Object *obedit;
309 BMEditMesh *em;
310 float loc[3], rot[3], scale[3];
311 bool enter_editmode;
312 ushort local_view_bits;
313 const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
314 const bool cap_end = (end_fill_type != 0);
315 const bool cap_tri = (end_fill_type == 2);
316 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
317
320 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
321 obedit = make_prim_init(C,
323 loc,
324 rot,
325 scale,
326 local_view_bits,
327 &creation_data);
328 em = BKE_editmesh_from_object(obedit);
329
330 if (calc_uvs) {
331 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
332 }
333
335 op,
336 "verts.out",
337 false,
338 "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
339 "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
340 RNA_int_get(op->ptr, "vertices"),
341 RNA_float_get(op->ptr, "radius"),
342 RNA_float_get(op->ptr, "radius"),
343 cap_end,
344 cap_tri,
345 RNA_float_get(op->ptr, "depth"),
346 creation_data.mat,
347 calc_uvs))
348 {
349 return OPERATOR_CANCELLED;
350 }
351
352 make_prim_finish(C, obedit, &creation_data, enter_editmode);
353
354 return OPERATOR_FINISHED;
355}
356
358{
359 /* identifiers */
360 ot->name = "Add Cylinder";
361 ot->description = "Construct a cylinder mesh";
362 ot->idname = "MESH_OT_primitive_cylinder_add";
363
364 /* api callbacks */
367
368 /* flags */
370
371 /* props */
372 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
375 ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
376 RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", "");
377
380}
381
383{
384 MakePrimitiveData creation_data;
385 Object *obedit;
386 BMEditMesh *em;
387 float loc[3], rot[3], scale[3];
388 bool enter_editmode;
389 ushort local_view_bits;
390 const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
391 const bool cap_end = (end_fill_type != 0);
392 const bool cap_tri = (end_fill_type == 2);
393 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
394
397 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
398 obedit = make_prim_init(C,
400 loc,
401 rot,
402 scale,
403 local_view_bits,
404 &creation_data);
405 em = BKE_editmesh_from_object(obedit);
406
407 if (calc_uvs) {
408 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
409 }
410
412 op,
413 "verts.out",
414 false,
415 "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
416 "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
417 RNA_int_get(op->ptr, "vertices"),
418 RNA_float_get(op->ptr, "radius1"),
419 RNA_float_get(op->ptr, "radius2"),
420 cap_end,
421 cap_tri,
422 RNA_float_get(op->ptr, "depth"),
423 creation_data.mat,
424 calc_uvs))
425 {
426 return OPERATOR_CANCELLED;
427 }
428
429 make_prim_finish(C, obedit, &creation_data, enter_editmode);
430
431 return OPERATOR_FINISHED;
432}
433
435{
436 /* identifiers */
437 ot->name = "Add Cone";
438 ot->description = "Construct a conic mesh";
439 ot->idname = "MESH_OT_primitive_cone_add";
440
441 /* api callbacks */
444
445 /* flags */
447
448 /* props */
449 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
451 ot->srna, "radius1", 1.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 1", "", 0.001, 100.00);
453 ot->srna, "radius2", 0.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 2", "", 0.0, 100.00);
455 ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
456 RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", "");
457
460}
461
463{
464 MakePrimitiveData creation_data;
465 Object *obedit;
466 BMEditMesh *em;
467 float loc[3], rot[3];
468 bool enter_editmode;
469 ushort local_view_bits;
470 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
471
474 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
475 obedit = make_prim_init(C,
477 loc,
478 rot,
479 nullptr,
480 local_view_bits,
481 &creation_data);
482 em = BKE_editmesh_from_object(obedit);
483
484 if (calc_uvs) {
485 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
486 }
487
489 em,
490 op,
491 "verts.out",
492 false,
493 "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
494 RNA_int_get(op->ptr, "x_subdivisions"),
495 RNA_int_get(op->ptr, "y_subdivisions"),
496 RNA_float_get(op->ptr, "size") / 2.0f,
497 creation_data.mat,
498 calc_uvs))
499 {
500 return OPERATOR_CANCELLED;
501 }
502
503 make_prim_finish(C, obedit, &creation_data, enter_editmode);
504
505 return OPERATOR_FINISHED;
506}
507
509{
510 /* identifiers */
511 ot->name = "Add Grid";
512 ot->description = "Construct a subdivided plane mesh";
513 ot->idname = "MESH_OT_primitive_grid_add";
514
515 /* api callbacks */
518
519 /* flags */
521
522 /* props */
523 /* Note that if you use MESH_ADD_VERTS_MAXI for both x and y at the same time
524 * you will still reach impossible values (10^12 vertices or so...). */
526 ot->srna, "x_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "X Subdivisions", "", 1, 1000);
528 ot->srna, "y_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 1, 1000);
529
533}
534
536{
537 MakePrimitiveData creation_data;
538 Object *obedit;
539 BMEditMesh *em;
540 float loc[3], rot[3];
541 float dia;
542 bool enter_editmode;
543 ushort local_view_bits;
544 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
545
548 C, op, 'Y', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
549
550 obedit = make_prim_init(C,
552 loc,
553 rot,
554 nullptr,
555 local_view_bits,
556 &creation_data);
557 dia = RNA_float_get(op->ptr, "size") / 2.0f;
558 mul_mat3_m4_fl(creation_data.mat, dia);
559
560 em = BKE_editmesh_from_object(obedit);
561
562 if (calc_uvs) {
563 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
564 }
565
567 op,
568 "verts.out",
569 false,
570 "create_monkey matrix=%m4 calc_uvs=%b",
571 creation_data.mat,
572 calc_uvs))
573 {
574 return OPERATOR_CANCELLED;
575 }
576
577 make_prim_finish(C, obedit, &creation_data, enter_editmode);
578
579 return OPERATOR_FINISHED;
580}
581
583{
584 /* identifiers */
585 ot->name = "Add Monkey";
586 ot->description = "Construct a Suzanne mesh";
587 ot->idname = "MESH_OT_primitive_monkey_add";
588
589 /* api callbacks */
592
593 /* flags */
595
596 /* props */
600}
601
603{
604 MakePrimitiveData creation_data;
605 Object *obedit;
606 BMEditMesh *em;
607 float loc[3], rot[3], scale[3];
608 bool enter_editmode;
609 ushort local_view_bits;
610 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
611
614 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
615 obedit = make_prim_init(C,
617 loc,
618 rot,
619 scale,
620 local_view_bits,
621 &creation_data);
622 em = BKE_editmesh_from_object(obedit);
623
624 if (calc_uvs) {
625 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
626 }
627
629 em,
630 op,
631 "verts.out",
632 false,
633 "create_uvsphere u_segments=%i v_segments=%i radius=%f matrix=%m4 calc_uvs=%b",
634 RNA_int_get(op->ptr, "segments"),
635 RNA_int_get(op->ptr, "ring_count"),
636 RNA_float_get(op->ptr, "radius"),
637 creation_data.mat,
638 calc_uvs))
639 {
640 return OPERATOR_CANCELLED;
641 }
642
643 make_prim_finish(C, obedit, &creation_data, enter_editmode);
644
645 return OPERATOR_FINISHED;
646}
647
649{
650 /* identifiers */
651 ot->name = "Add UV Sphere";
652 ot->description =
653 "Construct a spherical mesh with quad faces, except for triangle faces at the top and "
654 "bottom";
655 ot->idname = "MESH_OT_primitive_uv_sphere_add";
656
657 /* api callbacks */
660
661 /* flags */
663
664 /* props */
665 RNA_def_int(ot->srna, "segments", 32, 3, MESH_ADD_VERTS_MAXI / 100, "Segments", "", 3, 500);
666 RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500);
667
671}
672
674{
675 MakePrimitiveData creation_data;
676 Object *obedit;
677 BMEditMesh *em;
678 float loc[3], rot[3], scale[3];
679 bool enter_editmode;
680 ushort local_view_bits;
681 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
682
685 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
686 obedit = make_prim_init(C,
688 loc,
689 rot,
690 scale,
691 local_view_bits,
692 &creation_data);
693 em = BKE_editmesh_from_object(obedit);
694
695 if (calc_uvs) {
696 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
697 }
698
700 em,
701 op,
702 "verts.out",
703 false,
704 "create_icosphere subdivisions=%i radius=%f matrix=%m4 calc_uvs=%b",
705 RNA_int_get(op->ptr, "subdivisions"),
706 RNA_float_get(op->ptr, "radius"),
707 creation_data.mat,
708 calc_uvs))
709 {
710 return OPERATOR_CANCELLED;
711 }
712
713 make_prim_finish(C, obedit, &creation_data, enter_editmode);
714
715 return OPERATOR_FINISHED;
716}
717
719{
720 /* identifiers */
721 ot->name = "Add Ico Sphere";
722 ot->description = "Construct a spherical mesh that consists of equally sized triangles";
723 ot->idname = "MESH_OT_primitive_ico_sphere_add";
724
725 /* api callbacks */
728
729 /* flags */
731
732 /* props */
733 RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8);
734
738}
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
Main * CTX_data_main(const bContext *C)
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
Definition editmesh.cc:63
void mul_mat3_m4_fl(float R[4][4], float f)
unsigned short ushort
#define CTX_DATA_(context, msgid)
#define BLT_I18NCONTEXT_ID_MESH
Object is a sort of wrapper for general info.
@ OB_MESH
@ SCE_SELECT_VERTEX
void ED_mesh_uv_ensure(Mesh *mesh, const char *name)
Definition mesh_data.cc:363
void EDBM_update(Mesh *mesh, const EDBMUpdate_Params *params)
void EDBM_selectmode_flush_ex(BMEditMesh *em, short selectmode)
#define OBJECT_ADD_SIZE_MAXF
Definition ED_object.hh:295
bool ED_operator_scene_editable(bContext *C)
@ OPTYPE_UNDO
Definition WM_types.hh:162
@ OPTYPE_REGISTER
Definition WM_types.hh:160
#define ND_DRAW
Definition WM_types.hh:428
#define NC_OBJECT
Definition WM_types.hh:346
void MESH_OT_primitive_plane_add(wmOperatorType *ot)
static int add_primitive_circle_exec(bContext *C, wmOperator *op)
static int add_primitive_plane_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem fill_type_items[]
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
#define MESH_ADD_VERTS_MAXI
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_cone_add(wmOperatorType *ot)
static Object * make_prim_init(bContext *C, const char *idname, const float loc[3], const float rot[3], const float scale[3], ushort local_view_bits, MakePrimitiveData *r_creation_data)
void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
static void make_prim_finish(bContext *C, Object *obedit, const MakePrimitiveData *creation_data, int enter_editmode)
void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
void MESH_OT_primitive_cube_add(wmOperatorType *ot)
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_grid_add(wmOperatorType *ot)
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_circle_add(wmOperatorType *ot)
bool EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op, const char *select_slot_out, const bool select_extend, const char *fmt,...)
#define rot(x, k)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void add_unit_props_radius(wmOperatorType *ot)
Object * add_type(bContext *C, int type, const char *name, const float loc[3], const float rot[3], bool enter_editmode, unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL
void add_unit_props_size(wmOperatorType *ot)
float new_primitive_matrix(bContext *C, Object *obedit, const float loc[3], const float rot[3], const float scale[3], float primmat[4][4])
bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag)
void add_generic_props(wmOperatorType *ot, bool do_editmode)
void add_mesh_props(wmOperatorType *ot)
void add_generic_get_opts(bContext *C, wmOperator *op, char view_align_axis, float r_loc[3], float r_rot[3], float r_scale[3], bool *r_enter_editmode, unsigned short *r_local_view_bits, bool *r_is_view_aligned)
bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag)
int RNA_int_get(PointerRNA *ptr, const char *name)
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_float_distance(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
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 PointerRNA * ptr
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4125
void WM_operator_view3d_unit_defaults(bContext *C, wmOperator *op)