Blender  V3.3
editmesh_add.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2004 Blender Foundation. All rights reserved. */
3 
8 #include "BLI_math.h"
9 #include "BLI_sys_types.h"
10 
11 #include "DNA_object_types.h"
12 #include "DNA_scene_types.h"
13 
14 #include "BLT_translation.h"
15 
16 #include "BKE_context.h"
17 #include "BKE_editmesh.h"
18 
19 #include "RNA_access.h"
20 #include "RNA_define.h"
21 
22 #include "WM_api.h"
23 #include "WM_types.h"
24 
25 #include "ED_mesh.h"
26 #include "ED_object.h"
27 #include "ED_screen.h"
28 
29 #include "mesh_intern.h" /* own include */
30 
31 #define MESH_ADD_VERTS_MAXI 10000000
32 
33 /* ********* add primitive operators ************* */
34 
35 typedef struct MakePrimitiveData {
36  float mat[4][4];
39 
41  const char *idname,
42  const float loc[3],
43  const float rot[3],
44  const float scale[3],
45  ushort local_view_bits,
46  MakePrimitiveData *r_creation_data)
47 {
48  struct Main *bmain = CTX_data_main(C);
50  Object *obedit = CTX_data_edit_object(C);
51 
52  r_creation_data->was_editmode = false;
53  if (obedit == NULL || obedit->type != OB_MESH) {
54  obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
55  ED_object_editmode_enter_ex(bmain, scene, obedit, 0);
56 
57  r_creation_data->was_editmode = true;
58  }
59 
60  ED_object_new_primitive_matrix(C, obedit, loc, rot, scale, r_creation_data->mat);
61 
62  return obedit;
63 }
64 
66  Object *obedit,
67  const MakePrimitiveData *creation_data,
68  int enter_editmode)
69 {
71  const bool exit_editmode = ((creation_data->was_editmode == true) && (enter_editmode == false));
72 
73  /* Primitive has all verts selected, use vert select flush
74  * to push this up to edges & faces. */
76 
77  /* only recalc editmode tessface if we are staying in editmode */
78  EDBM_update(obedit->data,
79  &(const struct EDBMUpdate_Params){
80  .calc_looptri = !exit_editmode,
81  .calc_normals = false,
82  .is_destructive = true,
83  });
84 
85  /* userdef */
86  if (exit_editmode) {
88  }
90 }
91 
93 {
94  MakePrimitiveData creation_data;
95  Object *obedit;
96  BMEditMesh *em;
97  float loc[3], rot[3];
98  bool enter_editmode;
99  ushort local_view_bits;
100  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
101 
104  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
105  obedit = make_prim_init(C,
107  loc,
108  rot,
109  NULL,
110  local_view_bits,
111  &creation_data);
112 
113  em = BKE_editmesh_from_object(obedit);
114 
115  if (calc_uvs) {
116  ED_mesh_uv_ensure(obedit->data, NULL);
117  }
118 
120  em,
121  op,
122  "verts.out",
123  false,
124  "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
125  0,
126  0,
127  RNA_float_get(op->ptr, "size") / 2.0f,
128  creation_data.mat,
129  calc_uvs)) {
130  return OPERATOR_CANCELLED;
131  }
132 
133  make_prim_finish(C, obedit, &creation_data, enter_editmode);
134 
135  return OPERATOR_FINISHED;
136 }
137 
139 {
140  /* identifiers */
141  ot->name = "Add Plane";
142  ot->description = "Construct a filled planar mesh with 4 vertices";
143  ot->idname = "MESH_OT_primitive_plane_add";
144 
145  /* api callbacks */
148 
149  /* flags */
151 
155 }
156 
158 {
159  MakePrimitiveData creation_data;
160  Object *obedit;
161  BMEditMesh *em;
162  float loc[3], rot[3], scale[3];
163  bool enter_editmode;
164  ushort local_view_bits;
165  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
166 
169  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
170  obedit = make_prim_init(C,
172  loc,
173  rot,
174  scale,
175  local_view_bits,
176  &creation_data);
177 
178  em = BKE_editmesh_from_object(obedit);
179 
180  if (calc_uvs) {
181  ED_mesh_uv_ensure(obedit->data, NULL);
182  }
183 
184  if (!EDBM_op_call_and_selectf(em,
185  op,
186  "verts.out",
187  false,
188  "create_cube matrix=%m4 size=%f calc_uvs=%b",
189  creation_data.mat,
190  RNA_float_get(op->ptr, "size"),
191  calc_uvs)) {
192  return OPERATOR_CANCELLED;
193  }
194 
195  /* BMESH_TODO make plane side this: M_SQRT2 - plane (diameter of 1.41 makes it unit size) */
196  make_prim_finish(C, obedit, &creation_data, enter_editmode);
197 
198  return OPERATOR_FINISHED;
199 }
200 
202 {
203  /* identifiers */
204  ot->name = "Add Cube";
205  ot->description = "Construct a cube mesh";
206  ot->idname = "MESH_OT_primitive_cube_add";
207 
208  /* api callbacks */
211 
212  /* flags */
214 
218 }
219 
221  {0, "NOTHING", 0, "Nothing", "Don't fill at all"},
222  {1, "NGON", 0, "N-Gon", "Use n-gons"},
223  {2, "TRIFAN", 0, "Triangle Fan", "Use triangle fans"},
224  {0, NULL, 0, NULL, NULL},
225 };
226 
228 {
229  MakePrimitiveData creation_data;
230  Object *obedit;
231  BMEditMesh *em;
232  float loc[3], rot[3];
233  bool enter_editmode;
234  ushort local_view_bits;
235  int cap_end, cap_tri;
236  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
237 
238  cap_end = RNA_enum_get(op->ptr, "fill_type");
239  cap_tri = (cap_end == 2);
240 
243  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
244  obedit = make_prim_init(C,
246  loc,
247  rot,
248  NULL,
249  local_view_bits,
250  &creation_data);
251 
252  em = BKE_editmesh_from_object(obedit);
253 
254  if (calc_uvs) {
255  ED_mesh_uv_ensure(obedit->data, NULL);
256  }
257 
259  em,
260  op,
261  "verts.out",
262  false,
263  "create_circle segments=%i radius=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b",
264  RNA_int_get(op->ptr, "vertices"),
265  RNA_float_get(op->ptr, "radius"),
266  cap_end,
267  cap_tri,
268  creation_data.mat,
269  calc_uvs)) {
270  return OPERATOR_CANCELLED;
271  }
272 
273  make_prim_finish(C, obedit, &creation_data, enter_editmode);
274 
275  return OPERATOR_FINISHED;
276 }
277 
279 {
280  /* identifiers */
281  ot->name = "Add Circle";
282  ot->description = "Construct a circle mesh";
283  ot->idname = "MESH_OT_primitive_circle_add";
284 
285  /* api callbacks */
288 
289  /* flags */
291 
292  /* props */
293  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
295  RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", "");
296 
299 }
300 
302 {
303  MakePrimitiveData creation_data;
304  Object *obedit;
305  BMEditMesh *em;
306  float loc[3], rot[3], scale[3];
307  bool enter_editmode;
308  ushort local_view_bits;
309  const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
310  const bool cap_end = (end_fill_type != 0);
311  const bool cap_tri = (end_fill_type == 2);
312  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
313 
316  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
317  obedit = make_prim_init(C,
318  CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
319  loc,
320  rot,
321  scale,
322  local_view_bits,
323  &creation_data);
324  em = BKE_editmesh_from_object(obedit);
325 
326  if (calc_uvs) {
327  ED_mesh_uv_ensure(obedit->data, NULL);
328  }
329 
330  if (!EDBM_op_call_and_selectf(em,
331  op,
332  "verts.out",
333  false,
334  "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
335  "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
336  RNA_int_get(op->ptr, "vertices"),
337  RNA_float_get(op->ptr, "radius"),
338  RNA_float_get(op->ptr, "radius"),
339  cap_end,
340  cap_tri,
341  RNA_float_get(op->ptr, "depth"),
342  creation_data.mat,
343  calc_uvs)) {
344  return OPERATOR_CANCELLED;
345  }
346 
347  make_prim_finish(C, obedit, &creation_data, enter_editmode);
348 
349  return OPERATOR_FINISHED;
350 }
351 
353 {
354  /* identifiers */
355  ot->name = "Add Cylinder";
356  ot->description = "Construct a cylinder mesh";
357  ot->idname = "MESH_OT_primitive_cylinder_add";
358 
359  /* api callbacks */
362 
363  /* flags */
365 
366  /* props */
367  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
370  ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
371  RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", "");
372 
375 }
376 
378 {
379  MakePrimitiveData creation_data;
380  Object *obedit;
381  BMEditMesh *em;
382  float loc[3], rot[3], scale[3];
383  bool enter_editmode;
384  ushort local_view_bits;
385  const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
386  const bool cap_end = (end_fill_type != 0);
387  const bool cap_tri = (end_fill_type == 2);
388  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
389 
392  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
393  obedit = make_prim_init(C,
395  loc,
396  rot,
397  scale,
398  local_view_bits,
399  &creation_data);
400  em = BKE_editmesh_from_object(obedit);
401 
402  if (calc_uvs) {
403  ED_mesh_uv_ensure(obedit->data, NULL);
404  }
405 
406  if (!EDBM_op_call_and_selectf(em,
407  op,
408  "verts.out",
409  false,
410  "create_cone segments=%i radius1=%f radius2=%f cap_ends=%b "
411  "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
412  RNA_int_get(op->ptr, "vertices"),
413  RNA_float_get(op->ptr, "radius1"),
414  RNA_float_get(op->ptr, "radius2"),
415  cap_end,
416  cap_tri,
417  RNA_float_get(op->ptr, "depth"),
418  creation_data.mat,
419  calc_uvs)) {
420  return OPERATOR_CANCELLED;
421  }
422 
423  make_prim_finish(C, obedit, &creation_data, enter_editmode);
424 
425  return OPERATOR_FINISHED;
426 }
427 
429 {
430  /* identifiers */
431  ot->name = "Add Cone";
432  ot->description = "Construct a conic mesh";
433  ot->idname = "MESH_OT_primitive_cone_add";
434 
435  /* api callbacks */
438 
439  /* flags */
441 
442  /* props */
443  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
445  ot->srna, "radius1", 1.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 1", "", 0.001, 100.00);
447  ot->srna, "radius2", 0.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 2", "", 0.0, 100.00);
449  ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
450  RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", "");
451 
454 }
455 
457 {
458  MakePrimitiveData creation_data;
459  Object *obedit;
460  BMEditMesh *em;
461  float loc[3], rot[3];
462  bool enter_editmode;
463  ushort local_view_bits;
464  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
465 
468  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
469  obedit = make_prim_init(C,
471  loc,
472  rot,
473  NULL,
474  local_view_bits,
475  &creation_data);
476  em = BKE_editmesh_from_object(obedit);
477 
478  if (calc_uvs) {
479  ED_mesh_uv_ensure(obedit->data, NULL);
480  }
481 
483  em,
484  op,
485  "verts.out",
486  false,
487  "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
488  RNA_int_get(op->ptr, "x_subdivisions"),
489  RNA_int_get(op->ptr, "y_subdivisions"),
490  RNA_float_get(op->ptr, "size") / 2.0f,
491  creation_data.mat,
492  calc_uvs)) {
493  return OPERATOR_CANCELLED;
494  }
495 
496  make_prim_finish(C, obedit, &creation_data, enter_editmode);
497 
498  return OPERATOR_FINISHED;
499 }
500 
502 {
503  /* identifiers */
504  ot->name = "Add Grid";
505  ot->description = "Construct a grid mesh";
506  ot->idname = "MESH_OT_primitive_grid_add";
507 
508  /* api callbacks */
511 
512  /* flags */
514 
515  /* props */
516  /* Note that if you use MESH_ADD_VERTS_MAXI for both x and y at the same time
517  * you will still reach impossible values (10^12 vertices or so...). */
518  RNA_def_int(
519  ot->srna, "x_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "X Subdivisions", "", 1, 1000);
520  RNA_def_int(
521  ot->srna, "y_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 1, 1000);
522 
526 }
527 
529 {
530  MakePrimitiveData creation_data;
531  Object *obedit;
532  BMEditMesh *em;
533  float loc[3], rot[3];
534  float dia;
535  bool enter_editmode;
536  ushort local_view_bits;
537  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
538 
541  C, op, 'Y', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
542 
543  obedit = make_prim_init(C,
545  loc,
546  rot,
547  NULL,
548  local_view_bits,
549  &creation_data);
550  dia = RNA_float_get(op->ptr, "size") / 2.0f;
551  mul_mat3_m4_fl(creation_data.mat, dia);
552 
553  em = BKE_editmesh_from_object(obedit);
554 
555  if (calc_uvs) {
556  ED_mesh_uv_ensure(obedit->data, NULL);
557  }
558 
559  if (!EDBM_op_call_and_selectf(em,
560  op,
561  "verts.out",
562  false,
563  "create_monkey matrix=%m4 calc_uvs=%b",
564  creation_data.mat,
565  calc_uvs)) {
566  return OPERATOR_CANCELLED;
567  }
568 
569  make_prim_finish(C, obedit, &creation_data, enter_editmode);
570 
571  return OPERATOR_FINISHED;
572 }
573 
575 {
576  /* identifiers */
577  ot->name = "Add Monkey";
578  ot->description = "Construct a Suzanne mesh";
579  ot->idname = "MESH_OT_primitive_monkey_add";
580 
581  /* api callbacks */
584 
585  /* flags */
587 
588  /* props */
592 }
593 
595 {
596  MakePrimitiveData creation_data;
597  Object *obedit;
598  BMEditMesh *em;
599  float loc[3], rot[3], scale[3];
600  bool enter_editmode;
601  ushort local_view_bits;
602  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
603 
606  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
607  obedit = make_prim_init(C,
609  loc,
610  rot,
611  scale,
612  local_view_bits,
613  &creation_data);
614  em = BKE_editmesh_from_object(obedit);
615 
616  if (calc_uvs) {
617  ED_mesh_uv_ensure(obedit->data, NULL);
618  }
619 
621  em,
622  op,
623  "verts.out",
624  false,
625  "create_uvsphere u_segments=%i v_segments=%i radius=%f matrix=%m4 calc_uvs=%b",
626  RNA_int_get(op->ptr, "segments"),
627  RNA_int_get(op->ptr, "ring_count"),
628  RNA_float_get(op->ptr, "radius"),
629  creation_data.mat,
630  calc_uvs)) {
631  return OPERATOR_CANCELLED;
632  }
633 
634  make_prim_finish(C, obedit, &creation_data, enter_editmode);
635 
636  return OPERATOR_FINISHED;
637 }
638 
640 {
641  /* identifiers */
642  ot->name = "Add UV Sphere";
643  ot->description = "Construct a UV sphere mesh";
644  ot->idname = "MESH_OT_primitive_uv_sphere_add";
645 
646  /* api callbacks */
649 
650  /* flags */
652 
653  /* props */
654  RNA_def_int(ot->srna, "segments", 32, 3, MESH_ADD_VERTS_MAXI / 100, "Segments", "", 3, 500);
655  RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500);
656 
660 }
661 
663 {
664  MakePrimitiveData creation_data;
665  Object *obedit;
666  BMEditMesh *em;
667  float loc[3], rot[3], scale[3];
668  bool enter_editmode;
669  ushort local_view_bits;
670  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
671 
674  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
675  obedit = make_prim_init(C,
676  CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"),
677  loc,
678  rot,
679  scale,
680  local_view_bits,
681  &creation_data);
682  em = BKE_editmesh_from_object(obedit);
683 
684  if (calc_uvs) {
685  ED_mesh_uv_ensure(obedit->data, NULL);
686  }
687 
689  em,
690  op,
691  "verts.out",
692  false,
693  "create_icosphere subdivisions=%i radius=%f matrix=%m4 calc_uvs=%b",
694  RNA_int_get(op->ptr, "subdivisions"),
695  RNA_float_get(op->ptr, "radius"),
696  creation_data.mat,
697  calc_uvs)) {
698  return OPERATOR_CANCELLED;
699  }
700 
701  make_prim_finish(C, obedit, &creation_data, enter_editmode);
702 
703  return OPERATOR_FINISHED;
704 }
705 
707 {
708  /* identifiers */
709  ot->name = "Add Ico Sphere";
710  ot->description = "Construct an Icosphere mesh";
711  ot->idname = "MESH_OT_primitive_ico_sphere_add";
712 
713  /* api callbacks */
716 
717  /* flags */
719 
720  /* props */
721  RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8);
722 
726 }
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1090
struct Object * CTX_data_edit_object(const bContext *C)
Definition: context.c:1370
struct Main * CTX_data_main(const bContext *C)
Definition: context.c:1074
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
Definition: editmesh.c:58
void mul_mat3_m4_fl(float R[4][4], float f)
Definition: math_matrix.c:978
unsigned short ushort
Definition: BLI_sys_types.h:68
#define CTX_DATA_(context, msgid)
#define BLT_I18NCONTEXT_ID_MESH
Object is a sort of wrapper for general info.
@ OB_MESH
#define SCE_SELECT_VERTEX
@ OPERATOR_CANCELLED
@ OPERATOR_FINISHED
void ED_mesh_uv_ensure(struct Mesh *me, const char *name)
Definition: mesh_data.cc:310
void EDBM_update(struct Mesh *me, const struct EDBMUpdate_Params *params)
void EDBM_selectmode_flush_ex(struct BMEditMesh *em, short selectmode)
void ED_object_add_unit_props_size(struct wmOperatorType *ot)
Definition: object_add.cc:382
@ EM_FREEDATA
Definition: ED_object.h:242
struct Object * ED_object_add_type(struct 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
Definition: object_add.cc:668
bool ED_object_editmode_exit_ex(struct Main *bmain, struct Scene *scene, struct Object *obedit, int flag)
Definition: object_edit.c:653
#define OBJECT_ADD_SIZE_MAXF
Definition: ED_object.h:341
bool ED_object_editmode_enter_ex(struct Main *bmain, struct Scene *scene, struct Object *ob, int flag)
Definition: object_edit.c:734
float ED_object_new_primitive_matrix(struct bContext *C, struct Object *obedit, const float loc[3], const float rot[3], const float scale[3], float primmat[4][4])
Definition: object_add.cc:328
bool ED_object_add_generic_get_opts(struct bContext *C, struct 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)
Definition: object_add.cc:457
void ED_object_add_generic_props(struct wmOperatorType *ot, bool do_editmode)
Definition: object_add.cc:399
void ED_object_add_mesh_props(struct wmOperatorType *ot)
Definition: object_add.cc:452
void ED_object_add_unit_props_radius(struct wmOperatorType *ot)
Definition: object_add.cc:394
bool ED_operator_scene_editable(struct bContext *C)
Definition: screen_ops.c:177
#define C
Definition: RandGen.cpp:25
@ OPTYPE_UNDO
Definition: WM_types.h:148
@ OPTYPE_REGISTER
Definition: WM_types.h:146
#define ND_DRAW
Definition: WM_types.h:410
#define NC_OBJECT
Definition: WM_types.h:329
Scene scene
void MESH_OT_primitive_plane_add(wmOperatorType *ot)
Definition: editmesh_add.c:138
static int add_primitive_circle_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:227
static int add_primitive_plane_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:92
void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
Definition: editmesh_add.c:352
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:456
static const EnumPropertyItem fill_type_items[]
Definition: editmesh_add.c:220
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:377
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)
Definition: editmesh_add.c:40
#define MESH_ADD_VERTS_MAXI
Definition: editmesh_add.c:31
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:157
static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:301
void MESH_OT_primitive_cone_add(wmOperatorType *ot)
Definition: editmesh_add.c:428
void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
Definition: editmesh_add.c:639
static void make_prim_finish(bContext *C, Object *obedit, const MakePrimitiveData *creation_data, int enter_editmode)
Definition: editmesh_add.c:65
void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
Definition: editmesh_add.c:574
void MESH_OT_primitive_cube_add(wmOperatorType *ot)
Definition: editmesh_add.c:201
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:662
struct MakePrimitiveData MakePrimitiveData
void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
Definition: editmesh_add.c:706
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:594
void MESH_OT_primitive_grid_add(wmOperatorType *ot)
Definition: editmesh_add.c:501
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:528
void MESH_OT_primitive_circle_add(wmOperatorType *ot)
Definition: editmesh_add.c:278
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)
int RNA_int_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:4910
float RNA_float_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:4957
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:4863
int RNA_enum_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:5004
PropertyRNA * RNA_def_float_distance(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:4052
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
Definition: rna_define.c:3597
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3783
Definition: BKE_main.h:121
float mat[4][4]
Definition: editmesh_add.c:36
void * data
const char * name
Definition: WM_types.h:888
const char * idname
Definition: WM_types.h:890
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:943
struct StructRNA * srna
Definition: WM_types.h:969
const char * description
Definition: WM_types.h:893
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:903
struct PointerRNA * ptr
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition: wm_files.c:3479
void WM_operator_view3d_unit_defaults(struct bContext *C, struct wmOperator *op)
Definition: wm_operators.c:977