Blender  V2.93
editmesh_add.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2004 by Blender Foundation.
17  * All rights reserved.
18  */
19 
24 #include "BLI_math.h"
25 #include "BLI_sys_types.h"
26 
27 #include "DNA_object_types.h"
28 #include "DNA_scene_types.h"
29 
30 #include "BLT_translation.h"
31 
32 #include "BKE_context.h"
33 #include "BKE_editmesh.h"
34 
35 #include "RNA_access.h"
36 #include "RNA_define.h"
37 
38 #include "WM_api.h"
39 #include "WM_types.h"
40 
41 #include "ED_mesh.h"
42 #include "ED_object.h"
43 #include "ED_screen.h"
44 
45 #include "mesh_intern.h" /* own include */
46 
47 #define MESH_ADD_VERTS_MAXI 10000000
48 
49 /* ********* add primitive operators ************* */
50 
51 typedef struct MakePrimitiveData {
52  float mat[4][4];
55 
57  const char *idname,
58  const float loc[3],
59  const float rot[3],
60  const float scale[3],
61  ushort local_view_bits,
62  MakePrimitiveData *r_creation_data)
63 {
64  struct Main *bmain = CTX_data_main(C);
66  Object *obedit = CTX_data_edit_object(C);
67 
68  r_creation_data->was_editmode = false;
69  if (obedit == NULL || obedit->type != OB_MESH) {
70  obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
71  ED_object_editmode_enter_ex(bmain, scene, obedit, 0);
72 
73  r_creation_data->was_editmode = true;
74  }
75 
76  ED_object_new_primitive_matrix(C, obedit, loc, rot, r_creation_data->mat);
77 
78  if (scale) {
79  rescale_m4(r_creation_data->mat, scale);
80  }
81 
82  return obedit;
83 }
84 
86  Object *obedit,
87  const MakePrimitiveData *creation_data,
88  int enter_editmode)
89 {
91  const bool exit_editmode = ((creation_data->was_editmode == true) && (enter_editmode == false));
92 
93  /* Primitive has all verts selected, use vert select flush
94  * to push this up to edges & faces. */
96 
97  /* only recalc editmode tessface if we are staying in editmode */
98  EDBM_update_generic(obedit->data, !exit_editmode, true);
99 
100  /* userdef */
101  if (exit_editmode) {
103  }
105 }
106 
108 {
109  MakePrimitiveData creation_data;
110  Object *obedit;
111  BMEditMesh *em;
112  float loc[3], rot[3];
113  bool enter_editmode;
114  ushort local_view_bits;
115  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
116 
119  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
120  obedit = make_prim_init(C,
122  loc,
123  rot,
124  NULL,
125  local_view_bits,
126  &creation_data);
127 
128  em = BKE_editmesh_from_object(obedit);
129 
130  if (calc_uvs) {
132  }
133 
135  em,
136  op,
137  "verts.out",
138  false,
139  "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
140  0,
141  0,
142  RNA_float_get(op->ptr, "size") / 2.0f,
143  creation_data.mat,
144  calc_uvs)) {
145  return OPERATOR_CANCELLED;
146  }
147 
148  make_prim_finish(C, obedit, &creation_data, enter_editmode);
149 
150  return OPERATOR_FINISHED;
151 }
152 
154 {
155  /* identifiers */
156  ot->name = "Add Plane";
157  ot->description = "Construct a filled planar mesh with 4 vertices";
158  ot->idname = "MESH_OT_primitive_plane_add";
159 
160  /* api callbacks */
163 
164  /* flags */
166 
170 }
171 
173 {
174  MakePrimitiveData creation_data;
175  Object *obedit;
176  BMEditMesh *em;
177  float loc[3], rot[3], scale[3];
178  bool enter_editmode;
179  ushort local_view_bits;
180  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
181 
184  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
185  obedit = make_prim_init(C,
187  loc,
188  rot,
189  scale,
190  local_view_bits,
191  &creation_data);
192 
193  em = BKE_editmesh_from_object(obedit);
194 
195  if (calc_uvs) {
197  }
198 
199  if (!EDBM_op_call_and_selectf(em,
200  op,
201  "verts.out",
202  false,
203  "create_cube matrix=%m4 size=%f calc_uvs=%b",
204  creation_data.mat,
205  RNA_float_get(op->ptr, "size"),
206  calc_uvs)) {
207  return OPERATOR_CANCELLED;
208  }
209 
210  /* BMESH_TODO make plane side this: M_SQRT2 - plane (diameter of 1.41 makes it unit size) */
211  make_prim_finish(C, obedit, &creation_data, enter_editmode);
212 
213  return OPERATOR_FINISHED;
214 }
215 
217 {
218  /* identifiers */
219  ot->name = "Add Cube";
220  ot->description = "Construct a cube mesh";
221  ot->idname = "MESH_OT_primitive_cube_add";
222 
223  /* api callbacks */
226 
227  /* flags */
229 
233 }
234 
236  {0, "NOTHING", 0, "Nothing", "Don't fill at all"},
237  {1, "NGON", 0, "N-Gon", "Use n-gons"},
238  {2, "TRIFAN", 0, "Triangle Fan", "Use triangle fans"},
239  {0, NULL, 0, NULL, NULL},
240 };
241 
243 {
244  MakePrimitiveData creation_data;
245  Object *obedit;
246  BMEditMesh *em;
247  float loc[3], rot[3];
248  bool enter_editmode;
249  ushort local_view_bits;
250  int cap_end, cap_tri;
251  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
252 
253  cap_end = RNA_enum_get(op->ptr, "fill_type");
254  cap_tri = (cap_end == 2);
255 
258  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
259  obedit = make_prim_init(C,
261  loc,
262  rot,
263  NULL,
264  local_view_bits,
265  &creation_data);
266 
267  em = BKE_editmesh_from_object(obedit);
268 
269  if (calc_uvs) {
271  }
272 
274  em,
275  op,
276  "verts.out",
277  false,
278  "create_circle segments=%i radius=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b",
279  RNA_int_get(op->ptr, "vertices"),
280  RNA_float_get(op->ptr, "radius"),
281  cap_end,
282  cap_tri,
283  creation_data.mat,
284  calc_uvs)) {
285  return OPERATOR_CANCELLED;
286  }
287 
288  make_prim_finish(C, obedit, &creation_data, enter_editmode);
289 
290  return OPERATOR_FINISHED;
291 }
292 
294 {
295  /* identifiers */
296  ot->name = "Add Circle";
297  ot->description = "Construct a circle mesh";
298  ot->idname = "MESH_OT_primitive_circle_add";
299 
300  /* api callbacks */
303 
304  /* flags */
306 
307  /* props */
308  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
310  RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", "");
311 
314 }
315 
317 {
318  MakePrimitiveData creation_data;
319  Object *obedit;
320  BMEditMesh *em;
321  float loc[3], rot[3], scale[3];
322  bool enter_editmode;
323  ushort local_view_bits;
324  const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
325  const bool cap_end = (end_fill_type != 0);
326  const bool cap_tri = (end_fill_type == 2);
327  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
328 
331  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
332  obedit = make_prim_init(C,
333  CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
334  loc,
335  rot,
336  scale,
337  local_view_bits,
338  &creation_data);
339  em = BKE_editmesh_from_object(obedit);
340 
341  if (calc_uvs) {
343  }
344 
345  if (!EDBM_op_call_and_selectf(em,
346  op,
347  "verts.out",
348  false,
349  "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b "
350  "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
351  RNA_int_get(op->ptr, "vertices"),
352  RNA_float_get(op->ptr, "radius"),
353  RNA_float_get(op->ptr, "radius"),
354  cap_end,
355  cap_tri,
356  RNA_float_get(op->ptr, "depth"),
357  creation_data.mat,
358  calc_uvs)) {
359  return OPERATOR_CANCELLED;
360  }
361 
362  make_prim_finish(C, obedit, &creation_data, enter_editmode);
363 
364  return OPERATOR_FINISHED;
365 }
366 
368 {
369  /* identifiers */
370  ot->name = "Add Cylinder";
371  ot->description = "Construct a cylinder mesh";
372  ot->idname = "MESH_OT_primitive_cylinder_add";
373 
374  /* api callbacks */
377 
378  /* flags */
380 
381  /* props */
382  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
385  ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
386  RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", "");
387 
390 }
391 
393 {
394  MakePrimitiveData creation_data;
395  Object *obedit;
396  BMEditMesh *em;
397  float loc[3], rot[3], scale[3];
398  bool enter_editmode;
399  ushort local_view_bits;
400  const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
401  const bool cap_end = (end_fill_type != 0);
402  const bool cap_tri = (end_fill_type == 2);
403  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
404 
407  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
408  obedit = make_prim_init(C,
410  loc,
411  rot,
412  scale,
413  local_view_bits,
414  &creation_data);
415  em = BKE_editmesh_from_object(obedit);
416 
417  if (calc_uvs) {
419  }
420 
421  if (!EDBM_op_call_and_selectf(em,
422  op,
423  "verts.out",
424  false,
425  "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b "
426  "cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
427  RNA_int_get(op->ptr, "vertices"),
428  RNA_float_get(op->ptr, "radius1"),
429  RNA_float_get(op->ptr, "radius2"),
430  cap_end,
431  cap_tri,
432  RNA_float_get(op->ptr, "depth"),
433  creation_data.mat,
434  calc_uvs)) {
435  return OPERATOR_CANCELLED;
436  }
437 
438  make_prim_finish(C, obedit, &creation_data, enter_editmode);
439 
440  return OPERATOR_FINISHED;
441 }
442 
444 {
445  /* identifiers */
446  ot->name = "Add Cone";
447  ot->description = "Construct a conic mesh";
448  ot->idname = "MESH_OT_primitive_cone_add";
449 
450  /* api callbacks */
453 
454  /* flags */
456 
457  /* props */
458  RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
460  ot->srna, "radius1", 1.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 1", "", 0.001, 100.00);
462  ot->srna, "radius2", 0.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Radius 2", "", 0.0, 100.00);
464  ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
465  RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", "");
466 
469 }
470 
472 {
473  MakePrimitiveData creation_data;
474  Object *obedit;
475  BMEditMesh *em;
476  float loc[3], rot[3];
477  bool enter_editmode;
478  ushort local_view_bits;
479  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
480 
483  C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
484  obedit = make_prim_init(C,
486  loc,
487  rot,
488  NULL,
489  local_view_bits,
490  &creation_data);
491  em = BKE_editmesh_from_object(obedit);
492 
493  if (calc_uvs) {
495  }
496 
498  em,
499  op,
500  "verts.out",
501  false,
502  "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
503  RNA_int_get(op->ptr, "x_subdivisions"),
504  RNA_int_get(op->ptr, "y_subdivisions"),
505  RNA_float_get(op->ptr, "size") / 2.0f,
506  creation_data.mat,
507  calc_uvs)) {
508  return OPERATOR_CANCELLED;
509  }
510 
511  make_prim_finish(C, obedit, &creation_data, enter_editmode);
512 
513  return OPERATOR_FINISHED;
514 }
515 
517 {
518  /* identifiers */
519  ot->name = "Add Grid";
520  ot->description = "Construct a grid mesh";
521  ot->idname = "MESH_OT_primitive_grid_add";
522 
523  /* api callbacks */
526 
527  /* flags */
529 
530  /* props */
531  /* Note that if you use MESH_ADD_VERTS_MAXI for both x and y at the same time
532  * you will still reach impossible values (10^12 vertices or so...). */
533  RNA_def_int(
534  ot->srna, "x_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "X Subdivisions", "", 1, 1000);
535  RNA_def_int(
536  ot->srna, "y_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 1, 1000);
537 
541 }
542 
544 {
545  MakePrimitiveData creation_data;
546  Object *obedit;
547  BMEditMesh *em;
548  float loc[3], rot[3];
549  float dia;
550  bool enter_editmode;
551  ushort local_view_bits;
552  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
553 
556  C, op, 'Y', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
557 
558  obedit = make_prim_init(C,
560  loc,
561  rot,
562  NULL,
563  local_view_bits,
564  &creation_data);
565  dia = RNA_float_get(op->ptr, "size") / 2.0f;
566  mul_mat3_m4_fl(creation_data.mat, dia);
567 
568  em = BKE_editmesh_from_object(obedit);
569 
570  if (calc_uvs) {
572  }
573 
574  if (!EDBM_op_call_and_selectf(em,
575  op,
576  "verts.out",
577  false,
578  "create_monkey matrix=%m4 calc_uvs=%b",
579  creation_data.mat,
580  calc_uvs)) {
581  return OPERATOR_CANCELLED;
582  }
583 
584  make_prim_finish(C, obedit, &creation_data, enter_editmode);
585 
586  return OPERATOR_FINISHED;
587 }
588 
590 {
591  /* identifiers */
592  ot->name = "Add Monkey";
593  ot->description = "Construct a Suzanne mesh";
594  ot->idname = "MESH_OT_primitive_monkey_add";
595 
596  /* api callbacks */
599 
600  /* flags */
602 
603  /* props */
607 }
608 
610 {
611  MakePrimitiveData creation_data;
612  Object *obedit;
613  BMEditMesh *em;
614  float loc[3], rot[3], scale[3];
615  bool enter_editmode;
616  ushort local_view_bits;
617  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
618 
621  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
622  obedit = make_prim_init(C,
624  loc,
625  rot,
626  scale,
627  local_view_bits,
628  &creation_data);
629  em = BKE_editmesh_from_object(obedit);
630 
631  if (calc_uvs) {
633  }
634 
636  em,
637  op,
638  "verts.out",
639  false,
640  "create_uvsphere u_segments=%i v_segments=%i diameter=%f matrix=%m4 calc_uvs=%b",
641  RNA_int_get(op->ptr, "segments"),
642  RNA_int_get(op->ptr, "ring_count"),
643  RNA_float_get(op->ptr, "radius"),
644  creation_data.mat,
645  calc_uvs)) {
646  return OPERATOR_CANCELLED;
647  }
648 
649  make_prim_finish(C, obedit, &creation_data, enter_editmode);
650 
651  return OPERATOR_FINISHED;
652 }
653 
655 {
656  /* identifiers */
657  ot->name = "Add UV Sphere";
658  ot->description = "Construct a UV sphere mesh";
659  ot->idname = "MESH_OT_primitive_uv_sphere_add";
660 
661  /* api callbacks */
664 
665  /* flags */
667 
668  /* props */
669  RNA_def_int(ot->srna, "segments", 32, 3, MESH_ADD_VERTS_MAXI / 100, "Segments", "", 3, 500);
670  RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500);
671 
675 }
676 
678 {
679  MakePrimitiveData creation_data;
680  Object *obedit;
681  BMEditMesh *em;
682  float loc[3], rot[3], scale[3];
683  bool enter_editmode;
684  ushort local_view_bits;
685  const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
686 
689  C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
690  obedit = make_prim_init(C,
691  CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"),
692  loc,
693  rot,
694  scale,
695  local_view_bits,
696  &creation_data);
697  em = BKE_editmesh_from_object(obedit);
698 
699  if (calc_uvs) {
701  }
702 
704  em,
705  op,
706  "verts.out",
707  false,
708  "create_icosphere subdivisions=%i diameter=%f matrix=%m4 calc_uvs=%b",
709  RNA_int_get(op->ptr, "subdivisions"),
710  RNA_float_get(op->ptr, "radius"),
711  creation_data.mat,
712  calc_uvs)) {
713  return OPERATOR_CANCELLED;
714  }
715 
716  make_prim_finish(C, obedit, &creation_data, enter_editmode);
717 
718  return OPERATOR_FINISHED;
719 }
720 
722 {
723  /* identifiers */
724  ot->name = "Add Ico Sphere";
725  ot->description = "Construct an Icosphere mesh";
726  ot->idname = "MESH_OT_primitive_ico_sphere_add";
727 
728  /* api callbacks */
731 
732  /* flags */
734 
735  /* props */
736  RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8);
737 
741 }
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1034
struct Object * CTX_data_edit_object(const bContext *C)
Definition: context.c:1296
struct Main * CTX_data_main(const bContext *C)
Definition: context.c:1018
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
Definition: editmesh.c:85
void mul_mat3_m4_fl(float R[4][4], float f)
Definition: math_matrix.c:982
void rescale_m4(float mat[4][4], const float scale[3])
Definition: math_matrix.c:2396
unsigned short ushort
Definition: BLI_sys_types.h:84
#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 EDBM_selectmode_flush_ex(struct BMEditMesh *em, const short selectmode)
void ED_mesh_uv_texture_ensure(struct Mesh *me, const char *name)
Definition: mesh_data.c:318
void EDBM_update_generic(struct Mesh *me, const bool do_tessellation, const bool is_destructive)
float ED_object_new_primitive_matrix(struct bContext *C, struct Object *obedit, const float loc[3], const float rot[3], float primmat[4][4])
Definition: object_add.c:334
void ED_object_add_unit_props_size(struct wmOperatorType *ot)
Definition: object_add.c:380
@ EM_FREEDATA
Definition: ED_object.h:204
bool ED_object_editmode_exit_ex(struct Main *bmain, struct Scene *scene, struct Object *obedit, int flag)
Definition: object_edit.c:676
#define OBJECT_ADD_SIZE_MAXF
Definition: ED_object.h:288
bool ED_object_editmode_enter_ex(struct Main *bmain, struct Scene *scene, struct Object *ob, int flag)
Definition: object_edit.c:762
struct Object * ED_object_add_type(struct bContext *C, const int type, const char *name, const float loc[3], const float rot[3], const bool enter_editmode, const unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL
Definition: object_add.c:659
void ED_object_add_generic_props(struct wmOperatorType *ot, bool do_editmode)
Definition: object_add.c:397
bool ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, const char view_align_axis, float loc[3], float rot[3], float scale[3], bool *enter_editmode, unsigned short *local_view_bits, bool *is_view_aligned)
Definition: object_add.c:455
void ED_object_add_mesh_props(struct wmOperatorType *ot)
Definition: object_add.c:450
void ED_object_add_unit_props_radius(struct wmOperatorType *ot)
Definition: object_add.c:392
bool ED_operator_scene_editable(struct bContext *C)
Definition: screen_ops.c:192
#define C
Definition: RandGen.cpp:39
#define ND_DRAW
Definition: WM_types.h:362
@ OPTYPE_UNDO
Definition: WM_types.h:155
@ OPTYPE_REGISTER
Definition: WM_types.h:153
#define NC_OBJECT
Definition: WM_types.h:280
Scene scene
void MESH_OT_primitive_plane_add(wmOperatorType *ot)
Definition: editmesh_add.c:153
static int add_primitive_circle_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:242
static int add_primitive_plane_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:107
void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
Definition: editmesh_add.c:367
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:471
static const EnumPropertyItem fill_type_items[]
Definition: editmesh_add.c:235
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:392
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:56
#define MESH_ADD_VERTS_MAXI
Definition: editmesh_add.c:47
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:172
static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:316
void MESH_OT_primitive_cone_add(wmOperatorType *ot)
Definition: editmesh_add.c:443
void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
Definition: editmesh_add.c:654
static void make_prim_finish(bContext *C, Object *obedit, const MakePrimitiveData *creation_data, int enter_editmode)
Definition: editmesh_add.c:85
void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
Definition: editmesh_add.c:589
void MESH_OT_primitive_cube_add(wmOperatorType *ot)
Definition: editmesh_add.c:216
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:677
struct MakePrimitiveData MakePrimitiveData
void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
Definition: editmesh_add.c:721
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:609
void MESH_OT_primitive_grid_add(wmOperatorType *ot)
Definition: editmesh_add.c:516
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
Definition: editmesh_add.c:543
void MESH_OT_primitive_circle_add(wmOperatorType *ot)
Definition: editmesh_add.c:293
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:6308
float RNA_float_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:6355
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:6261
int RNA_enum_get(PointerRNA *ptr, const char *name)
Definition: rna_access.c:6402
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:4041
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:3585
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:3771
Definition: BKE_main.h:116
float mat[4][4]
Definition: editmesh_add.c:52
void * data
const char * name
Definition: WM_types.h:721
const char * idname
Definition: WM_types.h:723
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:776
struct StructRNA * srna
Definition: WM_types.h:802
const char * description
Definition: WM_types.h:726
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:736
struct PointerRNA * ptr
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition: wm_files.c:3156
void WM_operator_view3d_unit_defaults(struct bContext *C, struct wmOperator *op)
Definition: wm_operators.c:915