Blender V5.0
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
8
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 /* TODO(@ideasman42): maintain UV sync for newly created data. */
79
80 /* Only recalculate edit-mode tessellation if we are staying in edit-mode. */
82 params.calc_looptris = !exit_editmode;
83 params.calc_normals = false;
84 params.is_destructive = true;
85 EDBM_update(static_cast<Mesh *>(obedit->data), &params);
86
87 /* userdef */
88 if (exit_editmode) {
91 }
93}
94
96{
97 MakePrimitiveData creation_data;
98 Object *obedit;
99 BMEditMesh *em;
100 float loc[3], rot[3];
101 bool enter_editmode;
102 ushort local_view_bits;
103 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
104
107 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
108 obedit = make_prim_init(C,
110 loc,
111 rot,
112 nullptr,
113 local_view_bits,
114 &creation_data);
115
116 em = BKE_editmesh_from_object(obedit);
117
118 if (calc_uvs) {
119 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
120 }
121
123 em,
124 op,
125 "verts.out",
126 false,
127 "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
128 0,
129 0,
130 RNA_float_get(op->ptr, "size") / 2.0f,
131 creation_data.mat,
132 calc_uvs))
133 {
134 return OPERATOR_CANCELLED;
135 }
136
137 make_prim_finish(C, obedit, &creation_data, enter_editmode);
138
139 return OPERATOR_FINISHED;
140}
141
143{
144 /* identifiers */
145 ot->name = "Add Plane";
146 ot->description = "Construct a filled planar mesh with 4 vertices";
147 ot->idname = "MESH_OT_primitive_plane_add";
148
149 /* API callbacks. */
152
153 /* flags */
155
159}
160
162{
163 MakePrimitiveData creation_data;
164 Object *obedit;
165 BMEditMesh *em;
166 float loc[3], rot[3], scale[3];
167 bool enter_editmode;
168 ushort local_view_bits;
169 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
170
173 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
174 obedit = make_prim_init(C,
176 loc,
177 rot,
178 scale,
179 local_view_bits,
180 &creation_data);
181
182 em = BKE_editmesh_from_object(obedit);
183
184 if (calc_uvs) {
185 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
186 }
187
189 op,
190 "verts.out",
191 false,
192 "create_cube matrix=%m4 size=%f calc_uvs=%b",
193 creation_data.mat,
194 RNA_float_get(op->ptr, "size"),
195 calc_uvs))
196 {
197 return OPERATOR_CANCELLED;
198 }
199
200 /* BMESH_TODO make plane side this: M_SQRT2 - plane (diameter of 1.41 makes it unit size) */
201 make_prim_finish(C, obedit, &creation_data, enter_editmode);
202
203 return OPERATOR_FINISHED;
204}
205
207{
208 /* identifiers */
209 ot->name = "Add Cube";
210 ot->description = "Construct a cube mesh that consists of six square faces";
211 ot->idname = "MESH_OT_primitive_cube_add";
212
213 /* API callbacks. */
216
217 /* flags */
219
223}
224
226 {0, "NOTHING", 0, "Nothing", "Don't fill at all"},
227 {1, "NGON", 0, "N-Gon", "Use n-gons"},
228 {2, "TRIFAN", 0, "Triangle Fan", "Use triangle fans"},
229 {0, nullptr, 0, nullptr, nullptr},
230};
231
233{
234 MakePrimitiveData creation_data;
235 Object *obedit;
236 BMEditMesh *em;
237 float loc[3], rot[3];
238 bool enter_editmode;
239 ushort local_view_bits;
240 int cap_end, cap_tri;
241 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
242
243 cap_end = RNA_enum_get(op->ptr, "fill_type");
244 cap_tri = (cap_end == 2);
245
248 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
249 obedit = make_prim_init(C,
251 loc,
252 rot,
253 nullptr,
254 local_view_bits,
255 &creation_data);
256
257 em = BKE_editmesh_from_object(obedit);
258
259 if (calc_uvs) {
260 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
261 }
262
264 em,
265 op,
266 "verts.out",
267 false,
268 "create_circle segments=%i radius=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b",
269 RNA_int_get(op->ptr, "vertices"),
270 RNA_float_get(op->ptr, "radius"),
271 cap_end,
272 cap_tri,
273 creation_data.mat,
274 calc_uvs))
275 {
276 return OPERATOR_CANCELLED;
277 }
278
279 make_prim_finish(C, obedit, &creation_data, enter_editmode);
280
281 return OPERATOR_FINISHED;
282}
283
285{
286 /* identifiers */
287 ot->name = "Add Circle";
288 ot->description = "Construct a circle mesh";
289 ot->idname = "MESH_OT_primitive_circle_add";
290
291 /* API callbacks. */
294
295 /* flags */
297
298 /* props */
299 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
301 RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", "");
302
305}
306
308{
309 MakePrimitiveData creation_data;
310 Object *obedit;
311 BMEditMesh *em;
312 float loc[3], rot[3], scale[3];
313 bool enter_editmode;
314 ushort local_view_bits;
315 const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
316 const bool cap_end = (end_fill_type != 0);
317 const bool cap_tri = (end_fill_type == 2);
318 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
319
322 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
323 obedit = make_prim_init(C,
325 loc,
326 rot,
327 scale,
328 local_view_bits,
329 &creation_data);
330 em = BKE_editmesh_from_object(obedit);
331
332 if (calc_uvs) {
333 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
334 }
335
337 op,
338 "verts.out",
339 false,
340 "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
341 "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
342 RNA_int_get(op->ptr, "vertices"),
343 RNA_float_get(op->ptr, "radius"),
344 RNA_float_get(op->ptr, "radius"),
345 cap_end,
346 cap_tri,
347 RNA_float_get(op->ptr, "depth"),
348 creation_data.mat,
349 calc_uvs))
350 {
351 return OPERATOR_CANCELLED;
352 }
353
354 make_prim_finish(C, obedit, &creation_data, enter_editmode);
355
356 return OPERATOR_FINISHED;
357}
358
360{
361 /* identifiers */
362 ot->name = "Add Cylinder";
363 ot->description = "Construct a cylinder mesh";
364 ot->idname = "MESH_OT_primitive_cylinder_add";
365
366 /* API callbacks. */
369
370 /* flags */
372
373 /* props */
374 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
377 ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
378 RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", "");
379
382}
383
385{
386 MakePrimitiveData creation_data;
387 Object *obedit;
388 BMEditMesh *em;
389 float loc[3], rot[3], scale[3];
390 bool enter_editmode;
391 ushort local_view_bits;
392 const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
393 const bool cap_end = (end_fill_type != 0);
394 const bool cap_tri = (end_fill_type == 2);
395 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
396
399 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
400 obedit = make_prim_init(C,
402 loc,
403 rot,
404 scale,
405 local_view_bits,
406 &creation_data);
407 em = BKE_editmesh_from_object(obedit);
408
409 if (calc_uvs) {
410 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
411 }
412
414 op,
415 "verts.out",
416 false,
417 "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
418 "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
419 RNA_int_get(op->ptr, "vertices"),
420 RNA_float_get(op->ptr, "radius1"),
421 RNA_float_get(op->ptr, "radius2"),
422 cap_end,
423 cap_tri,
424 RNA_float_get(op->ptr, "depth"),
425 creation_data.mat,
426 calc_uvs))
427 {
428 return OPERATOR_CANCELLED;
429 }
430
431 make_prim_finish(C, obedit, &creation_data, enter_editmode);
432
433 return OPERATOR_FINISHED;
434}
435
437{
438 /* identifiers */
439 ot->name = "Add Cone";
440 ot->description = "Construct a conic mesh";
441 ot->idname = "MESH_OT_primitive_cone_add";
442
443 /* API callbacks. */
446
447 /* flags */
449
450 /* props */
451 RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
453 ot->srna, "radius1", 1.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 1", "", 0.001, 100.00);
455 ot->srna, "radius2", 0.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 2", "", 0.0, 100.00);
457 ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
458 RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", "");
459
462}
463
465{
466 MakePrimitiveData creation_data;
467 Object *obedit;
468 BMEditMesh *em;
469 float loc[3], rot[3];
470 bool enter_editmode;
471 ushort local_view_bits;
472 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
473
476 C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
477 obedit = make_prim_init(C,
479 loc,
480 rot,
481 nullptr,
482 local_view_bits,
483 &creation_data);
484 em = BKE_editmesh_from_object(obedit);
485
486 if (calc_uvs) {
487 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
488 }
489
491 em,
492 op,
493 "verts.out",
494 false,
495 "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
496 RNA_int_get(op->ptr, "x_subdivisions"),
497 RNA_int_get(op->ptr, "y_subdivisions"),
498 RNA_float_get(op->ptr, "size") / 2.0f,
499 creation_data.mat,
500 calc_uvs))
501 {
502 return OPERATOR_CANCELLED;
503 }
504
505 make_prim_finish(C, obedit, &creation_data, enter_editmode);
506
507 return OPERATOR_FINISHED;
508}
509
511{
512 /* identifiers */
513 ot->name = "Add Grid";
514 ot->description = "Construct a subdivided plane mesh";
515 ot->idname = "MESH_OT_primitive_grid_add";
516
517 /* API callbacks. */
520
521 /* flags */
523
524 /* props */
525 /* Note that if you use MESH_ADD_VERTS_MAXI for both x and y at the same time
526 * you will still reach impossible values (10^12 vertices or so...). */
528 ot->srna, "x_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "X Subdivisions", "", 1, 1000);
530 ot->srna, "y_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 1, 1000);
531
535}
536
538{
539 MakePrimitiveData creation_data;
540 Object *obedit;
541 BMEditMesh *em;
542 float loc[3], rot[3];
543 float dia;
544 bool enter_editmode;
545 ushort local_view_bits;
546 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
547
550 C, op, 'Y', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
551
552 obedit = make_prim_init(C,
554 loc,
555 rot,
556 nullptr,
557 local_view_bits,
558 &creation_data);
559 dia = RNA_float_get(op->ptr, "size") / 2.0f;
560 mul_mat3_m4_fl(creation_data.mat, dia);
561
562 em = BKE_editmesh_from_object(obedit);
563
564 if (calc_uvs) {
565 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
566 }
567
569 op,
570 "verts.out",
571 false,
572 "create_monkey matrix=%m4 calc_uvs=%b",
573 creation_data.mat,
574 calc_uvs))
575 {
576 return OPERATOR_CANCELLED;
577 }
578
579 make_prim_finish(C, obedit, &creation_data, enter_editmode);
580
581 return OPERATOR_FINISHED;
582}
583
585{
586 /* identifiers */
587 ot->name = "Add Monkey";
588 ot->description = "Construct a Suzanne mesh";
589 ot->idname = "MESH_OT_primitive_monkey_add";
590
591 /* API callbacks. */
594
595 /* flags */
597
598 /* props */
602}
603
605{
606 MakePrimitiveData creation_data;
607 Object *obedit;
608 BMEditMesh *em;
609 float loc[3], rot[3], scale[3];
610 bool enter_editmode;
611 ushort local_view_bits;
612 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
613
616 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
617 obedit = make_prim_init(C,
619 loc,
620 rot,
621 scale,
622 local_view_bits,
623 &creation_data);
624 em = BKE_editmesh_from_object(obedit);
625
626 if (calc_uvs) {
627 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
628 }
629
631 em,
632 op,
633 "verts.out",
634 false,
635 "create_uvsphere u_segments=%i v_segments=%i radius=%f matrix=%m4 calc_uvs=%b",
636 RNA_int_get(op->ptr, "segments"),
637 RNA_int_get(op->ptr, "ring_count"),
638 RNA_float_get(op->ptr, "radius"),
639 creation_data.mat,
640 calc_uvs))
641 {
642 return OPERATOR_CANCELLED;
643 }
644
645 make_prim_finish(C, obedit, &creation_data, enter_editmode);
646
647 return OPERATOR_FINISHED;
648}
649
651{
652 /* identifiers */
653 ot->name = "Add UV Sphere";
654 ot->description =
655 "Construct a spherical mesh with quad faces, except for triangle faces at the top and "
656 "bottom";
657 ot->idname = "MESH_OT_primitive_uv_sphere_add";
658
659 /* API callbacks. */
662
663 /* flags */
665
666 /* props */
667 RNA_def_int(ot->srna, "segments", 32, 3, MESH_ADD_VERTS_MAXI / 100, "Segments", "", 3, 500);
668 RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500);
669
673}
674
676{
677 MakePrimitiveData creation_data;
678 Object *obedit;
679 BMEditMesh *em;
680 float loc[3], rot[3], scale[3];
681 bool enter_editmode;
682 ushort local_view_bits;
683 const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
684
687 C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
688 obedit = make_prim_init(C,
690 loc,
691 rot,
692 scale,
693 local_view_bits,
694 &creation_data);
695 em = BKE_editmesh_from_object(obedit);
696
697 if (calc_uvs) {
698 ED_mesh_uv_ensure(static_cast<Mesh *>(obedit->data), nullptr);
699 }
700
702 em,
703 op,
704 "verts.out",
705 false,
706 "create_icosphere subdivisions=%i radius=%f matrix=%m4 calc_uvs=%b",
707 RNA_int_get(op->ptr, "subdivisions"),
708 RNA_float_get(op->ptr, "radius"),
709 creation_data.mat,
710 calc_uvs))
711 {
712 return OPERATOR_CANCELLED;
713 }
714
715 make_prim_finish(C, obedit, &creation_data, enter_editmode);
716
717 return OPERATOR_FINISHED;
718}
719
721{
722 /* identifiers */
723 ot->name = "Add Ico Sphere";
724 ot->description = "Construct a spherical mesh that consists of equally sized triangles";
725 ot->idname = "MESH_OT_primitive_ico_sphere_add";
726
727 /* API callbacks. */
730
731 /* flags */
733
734 /* props */
735 RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8);
736
740}
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:61
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
@ OPERATOR_CANCELLED
@ OPERATOR_FINISHED
void ED_mesh_uv_ensure(Mesh *mesh, const char *name)
Definition mesh_data.cc:322
void EDBM_update(Mesh *mesh, const EDBMUpdate_Params *params)
bool EDBM_uvselect_clear(BMEditMesh *em)
void EDBM_selectmode_flush_ex(BMEditMesh *em, short selectmode)
#define OBJECT_ADD_SIZE_MAXF
Definition ED_object.hh:318
bool ED_operator_scene_editable(bContext *C)
#define C
Definition RandGen.cpp:29
#define ND_DRAW
Definition WM_types.hh:461
@ OPTYPE_UNDO
Definition WM_types.hh:182
@ OPTYPE_REGISTER
Definition WM_types.hh:180
#define NC_OBJECT
Definition WM_types.hh:379
void MESH_OT_primitive_plane_add(wmOperatorType *ot)
void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
static const EnumPropertyItem fill_type_items[]
#define MESH_ADD_VERTS_MAXI
static wmOperatorStatus add_primitive_circle_exec(bContext *C, wmOperator *op)
static wmOperatorStatus add_primitive_cube_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_cone_add(wmOperatorType *ot)
static wmOperatorStatus add_primitive_monkey_exec(bContext *C, wmOperator *op)
static wmOperatorStatus add_primitive_icosphere_exec(bContext *C, wmOperator *op)
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)
static wmOperatorStatus add_primitive_plane_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
static wmOperatorStatus add_primitive_cylinder_exec(bContext *C, wmOperator *op)
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 wmOperatorStatus add_primitive_grid_exec(bContext *C, wmOperator *op)
static wmOperatorStatus add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
void MESH_OT_primitive_grid_add(wmOperatorType *ot)
void MESH_OT_primitive_circle_add(wmOperatorType *ot)
static wmOperatorStatus add_primitive_cone_exec(bContext *C, wmOperator *op)
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)
struct PointerRNA * ptr
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4237
void WM_operator_view3d_unit_defaults(bContext *C, wmOperator *op)