[Bf-blender-cvs] [16943c01464] master: Object: add scale argument to creation operators

Campbell Barton noreply at git.blender.org
Thu May 28 07:16:34 CEST 2020


Commit: 16943c01464c7119480cae7cf5d089e1c597d8ab
Author: Campbell Barton
Date:   Thu May 28 14:30:42 2020 +1000
Branches: master
https://developer.blender.org/rB16943c01464c7119480cae7cf5d089e1c597d8ab

Object: add scale argument to creation operators

Needed for to create objects of a specific size.

===================================================================

M	source/blender/editors/curve/editcurve_add.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/mesh/editmesh_add.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_volume.c

===================================================================

diff --git a/source/blender/editors/curve/editcurve_add.c b/source/blender/editors/curve/editcurve_add.c
index 499f621ab47..bacdd5b69b5 100644
--- a/source/blender/editors/curve/editcurve_add.c
+++ b/source/blender/editors/curve/editcurve_add.c
@@ -521,7 +521,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
   WM_operator_view3d_unit_defaults(C, op);
 
   if (!ED_object_add_generic_get_opts(
-          C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
+          C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL)) {
     return OPERATOR_CANCELLED;
   }
 
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index e6d39d5f966..5adc99a8ae0 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -269,6 +269,7 @@ bool ED_object_add_generic_get_opts(struct bContext *C,
                                     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);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 1484dcfa92d..3c426e5d2b1 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -59,6 +59,7 @@ 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)
 {
@@ -76,6 +77,13 @@ static Object *make_prim_init(bContext *C,
 
   ED_object_new_primitive_matrix(C, obedit, loc, rot, r_creation_data->mat);
 
+  if (scale && !equals_v3v3(scale, (const float[3]){1.0f, 1.0f, 1.0f})) {
+    float scale_half[3];
+    copy_v3_v3(scale_half, scale);
+    mul_v3_fl(scale_half, 0.5f);
+    rescale_m4(r_creation_data->mat, scale_half);
+  }
+
   return obedit;
 }
 
@@ -112,9 +120,16 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"),
+                          loc,
+                          rot,
+                          NULL,
+                          local_view_bits,
+                          &creation_data);
+
   em = BKE_editmesh_from_object(obedit);
 
   if (calc_uvs) {
@@ -164,15 +179,22 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
   MakePrimitiveData creation_data;
   Object *obedit;
   BMEditMesh *em;
-  float loc[3], rot[3];
+  float loc[3], rot[3], scale[3];
   bool enter_editmode;
   ushort local_view_bits;
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"),
+                          loc,
+                          rot,
+                          scale,
+                          local_view_bits,
+                          &creation_data);
+
   em = BKE_editmesh_from_object(obedit);
 
   if (calc_uvs) {
@@ -237,9 +259,16 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
   cap_tri = (cap_end == 2);
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"),
+                          loc,
+                          rot,
+                          NULL,
+                          local_view_bits,
+                          &creation_data);
+
   em = BKE_editmesh_from_object(obedit);
 
   if (calc_uvs) {
@@ -294,7 +323,7 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
   MakePrimitiveData creation_data;
   Object *obedit;
   BMEditMesh *em;
-  float loc[3], rot[3];
+  float loc[3], rot[3], scale[3];
   bool enter_editmode;
   ushort local_view_bits;
   const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
@@ -303,11 +332,13 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
   obedit = make_prim_init(C,
                           CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
                           loc,
                           rot,
+                          scale,
                           local_view_bits,
                           &creation_data);
   em = BKE_editmesh_from_object(obedit);
@@ -368,7 +399,7 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
   MakePrimitiveData creation_data;
   Object *obedit;
   BMEditMesh *em;
-  float loc[3], rot[3];
+  float loc[3], rot[3], scale[3];
   bool enter_editmode;
   ushort local_view_bits;
   const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
@@ -377,9 +408,15 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"),
+                          loc,
+                          rot,
+                          scale,
+                          local_view_bits,
+                          &creation_data);
   em = BKE_editmesh_from_object(obedit);
 
   if (calc_uvs) {
@@ -447,9 +484,15 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"),
+                          loc,
+                          rot,
+                          NULL,
+                          local_view_bits,
+                          &creation_data);
   em = BKE_editmesh_from_object(obedit);
 
   if (calc_uvs) {
@@ -514,10 +557,16 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, &enter_editmode, &local_view_bits, NULL);
+  ED_object_add_generic_get_opts(
+      C, op, 'Y', loc, rot, NULL, &enter_editmode, &local_view_bits, NULL);
 
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"), loc, rot, local_view_bits, &creation_data);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"),
+                          loc,
+                          rot,
+                          NULL,
+                          local_view_bits,
+                          &creation_data);
   dia = RNA_float_get(op->ptr, "size") / 2.0f;
   mul_mat3_m4_fl(creation_data.mat, dia);
 
@@ -567,15 +616,21 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
   MakePrimitiveData creation_data;
   Object *obedit;
   BMEditMesh *em;
-  float loc[3], rot[3];
+  float loc[3], rot[3], scale[3];
   bool enter_editmode;
   ushort local_view_bits;
   const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
   WM_operator_view3d_unit_defaults(C, op);
-  ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
-  obedit = make_prim_init(
-      C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"), loc, rot, local_view_bits, &creation_data);
+  ED_object_add_generic_get_opts(
+      C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, NULL);
+  obedit = make_prim_init(C,
+                          CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"),
+                          loc,
+                          rot,
+                          scale,
+                          l

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list