[Bf-blender-cvs] [22e102efae7] temp-collection-assets: Merge branch 'master' into temp-collection-assets
Julian Eisel
noreply at git.blender.org
Thu Apr 7 16:10:18 CEST 2022
Commit: 22e102efae70cd50f5f49d93c8df22185cb4dc76
Author: Julian Eisel
Date: Thu Apr 7 15:03:42 2022 +0200
Branches: temp-collection-assets
https://developer.blender.org/rB22e102efae70cd50f5f49d93c8df22185cb4dc76
Merge branch 'master' into temp-collection-assets
===================================================================
===================================================================
diff --cc source/blender/editors/object/object_add.cc
index 00000000000,b3c5879b4d0..8cad98ab4ae
mode 000000,100644..100644
--- a/source/blender/editors/object/object_add.cc
+++ b/source/blender/editors/object/object_add.cc
@@@ -1,0 -1,4089 +1,4089 @@@
+ /* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
+
+ /** \file
+ * \ingroup edobj
+ */
+
+ #include <cctype>
+ #include <cstdlib>
+ #include <cstring>
+ #include <optional>
+
+ #include "MEM_guardedalloc.h"
+
+ #include "DNA_anim_types.h"
+ #include "DNA_camera_types.h"
+ #include "DNA_collection_types.h"
+ #include "DNA_curve_types.h"
+ #include "DNA_gpencil_modifier_types.h"
+ #include "DNA_gpencil_types.h"
+ #include "DNA_key_types.h"
+ #include "DNA_light_types.h"
+ #include "DNA_lightprobe_types.h"
+ #include "DNA_material_types.h"
+ #include "DNA_mesh_types.h"
+ #include "DNA_meta_types.h"
+ #include "DNA_object_fluidsim_types.h"
+ #include "DNA_object_force_types.h"
+ #include "DNA_object_types.h"
+ #include "DNA_pointcloud_types.h"
+ #include "DNA_scene_types.h"
+ #include "DNA_vfont_types.h"
+
+ #include "BLI_ghash.h"
+ #include "BLI_listbase.h"
+ #include "BLI_math.h"
+ #include "BLI_string.h"
+ #include "BLI_utildefines.h"
+
+ #include "BLT_translation.h"
+
+ #include "BKE_action.h"
+ #include "BKE_anim_data.h"
+ #include "BKE_armature.h"
+ #include "BKE_camera.h"
+ #include "BKE_collection.h"
+ #include "BKE_constraint.h"
+ #include "BKE_context.h"
+ #include "BKE_curve.h"
+ #include "BKE_curves.h"
+ #include "BKE_displist.h"
+ #include "BKE_duplilist.h"
+ #include "BKE_effect.h"
+ #include "BKE_geometry_set.h"
+ #include "BKE_gpencil_curve.h"
+ #include "BKE_gpencil_geom.h"
+ #include "BKE_gpencil_modifier.h"
+ #include "BKE_key.h"
+ #include "BKE_lattice.h"
+ #include "BKE_layer.h"
+ #include "BKE_lib_id.h"
+ #include "BKE_lib_override.h"
+ #include "BKE_lib_query.h"
+ #include "BKE_lib_remap.h"
+ #include "BKE_light.h"
+ #include "BKE_lightprobe.h"
+ #include "BKE_main.h"
+ #include "BKE_material.h"
+ #include "BKE_mball.h"
+ #include "BKE_mesh.h"
+ #include "BKE_mesh_runtime.h"
+ #include "BKE_nla.h"
+ #include "BKE_object.h"
+ #include "BKE_particle.h"
+ #include "BKE_pointcloud.h"
+ #include "BKE_report.h"
+ #include "BKE_scene.h"
+ #include "BKE_speaker.h"
+ #include "BKE_vfont.h"
+ #include "BKE_volume.h"
+
+ #include "DEG_depsgraph.h"
+ #include "DEG_depsgraph_build.h"
+ #include "DEG_depsgraph_query.h"
+
+ #include "RNA_access.h"
+ #include "RNA_define.h"
+ #include "RNA_enum_types.h"
+
+ #include "UI_interface.h"
+
+ #include "WM_api.h"
+ #include "WM_types.h"
+
+ #include "ED_armature.h"
+ #include "ED_curve.h"
+ #include "ED_curves.h"
+ #include "ED_gpencil.h"
+ #include "ED_mball.h"
+ #include "ED_mesh.h"
+ #include "ED_node.h"
+ #include "ED_object.h"
+ #include "ED_outliner.h"
+ #include "ED_physics.h"
+ #include "ED_render.h"
+ #include "ED_screen.h"
+ #include "ED_select_utils.h"
+ #include "ED_transform.h"
+ #include "ED_view3d.h"
+
+ #include "UI_resources.h"
+
+ #include "object_intern.h"
+
+ /* -------------------------------------------------------------------- */
+ /** \name Local Enum Declarations
+ * \{ */
+
+ /* This is an exact copy of the define in `rna_light.c`
+ * kept here because of linking order.
+ * Icons are only defined here */
+ const EnumPropertyItem rna_enum_light_type_items[] = {
+ {LA_LOCAL, "POINT", ICON_LIGHT_POINT, "Point", "Omnidirectional point light source"},
+ {LA_SUN, "SUN", ICON_LIGHT_SUN, "Sun", "Constant direction parallel ray light source"},
+ {LA_SPOT, "SPOT", ICON_LIGHT_SPOT, "Spot", "Directional cone light source"},
+ {LA_AREA, "AREA", ICON_LIGHT_AREA, "Area", "Directional area light source"},
+ {0, nullptr, 0, nullptr, nullptr},
+ };
+
+ /* copy from rna_object_force.c */
+ static const EnumPropertyItem field_type_items[] = {
+ {PFIELD_FORCE, "FORCE", ICON_FORCE_FORCE, "Force", ""},
+ {PFIELD_WIND, "WIND", ICON_FORCE_WIND, "Wind", ""},
+ {PFIELD_VORTEX, "VORTEX", ICON_FORCE_VORTEX, "Vortex", ""},
+ {PFIELD_MAGNET, "MAGNET", ICON_FORCE_MAGNETIC, "Magnetic", ""},
+ {PFIELD_HARMONIC, "HARMONIC", ICON_FORCE_HARMONIC, "Harmonic", ""},
+ {PFIELD_CHARGE, "CHARGE", ICON_FORCE_CHARGE, "Charge", ""},
+ {PFIELD_LENNARDJ, "LENNARDJ", ICON_FORCE_LENNARDJONES, "Lennard-Jones", ""},
+ {PFIELD_TEXTURE, "TEXTURE", ICON_FORCE_TEXTURE, "Texture", ""},
+ {PFIELD_GUIDE, "GUIDE", ICON_FORCE_CURVE, "Curve Guide", ""},
+ {PFIELD_BOID, "BOID", ICON_FORCE_BOID, "Boid", ""},
+ {PFIELD_TURBULENCE, "TURBULENCE", ICON_FORCE_TURBULENCE, "Turbulence", ""},
+ {PFIELD_DRAG, "DRAG", ICON_FORCE_DRAG, "Drag", ""},
+ {PFIELD_FLUIDFLOW, "FLUID", ICON_FORCE_FLUIDFLOW, "Fluid Flow", ""},
+ {0, nullptr, 0, nullptr, nullptr},
+ };
+
+ static EnumPropertyItem lightprobe_type_items[] = {
+ {LIGHTPROBE_TYPE_CUBE,
+ "CUBEMAP",
+ ICON_LIGHTPROBE_CUBEMAP,
+ "Reflection Cubemap",
+ "Reflection probe with spherical or cubic attenuation"},
+ {LIGHTPROBE_TYPE_PLANAR,
+ "PLANAR",
+ ICON_LIGHTPROBE_PLANAR,
+ "Reflection Plane",
+ "Planar reflection probe"},
+ {LIGHTPROBE_TYPE_GRID,
+ "GRID",
+ ICON_LIGHTPROBE_GRID,
+ "Irradiance Volume",
+ "Irradiance probe to capture diffuse indirect lighting"},
+ {0, nullptr, 0, nullptr, nullptr},
+ };
+
+ enum {
+ ALIGN_WORLD = 0,
+ ALIGN_VIEW,
+ ALIGN_CURSOR,
+ };
+
+ static const EnumPropertyItem align_options[] = {
+ {ALIGN_WORLD, "WORLD", 0, "World", "Align the new object to the world"},
+ {ALIGN_VIEW, "VIEW", 0, "View", "Align the new object to the view"},
+ {ALIGN_CURSOR, "CURSOR", 0, "3D Cursor", "Use the 3D cursor orientation for the new object"},
+ {0, nullptr, 0, nullptr, nullptr},
+ };
+
+ /** \} */
+
+ /* -------------------------------------------------------------------- */
+ /** \name Local Helpers
+ * \{ */
+
+ /**
+ * Operator properties for creating an object under a screen space (2D) coordinate.
+ * Used for object dropping like behavior (drag object and drop into 3D View).
+ */
+ static void object_add_drop_xy_props(wmOperatorType *ot)
+ {
+ PropertyRNA *prop;
+
+ prop = RNA_def_int(ot->srna,
+ "drop_x",
+ 0,
+ INT_MIN,
+ INT_MAX,
+ "Drop X",
+ "X-coordinate (screen space) to place the new object under",
+ INT_MIN,
+ INT_MAX);
+ RNA_def_property_flag(prop, (PropertyFlag)(PROP_HIDDEN | PROP_SKIP_SAVE));
+ prop = RNA_def_int(ot->srna,
+ "drop_y",
+ 0,
+ INT_MIN,
+ INT_MAX,
+ "Drop Y",
+ "Y-coordinate (screen space) to place the new object under",
+ INT_MIN,
+ INT_MAX);
+ RNA_def_property_flag(prop, (PropertyFlag)(PROP_HIDDEN | PROP_SKIP_SAVE));
+ }
+
+ static bool object_add_drop_xy_is_set(const wmOperator *op)
+ {
+ return RNA_struct_property_is_set(op->ptr, "drop_x") &&
+ RNA_struct_property_is_set(op->ptr, "drop_y");
+ }
+
+ /**
+ * Query the currently set X- and Y-coordinate to position the new object under.
+ * \param r_mval: Returned pointer to the coordinate in region-space.
+ */
+ static bool object_add_drop_xy_get(bContext *C, wmOperator *op, int (*r_mval)[2])
+ {
+ if (!object_add_drop_xy_is_set(op)) {
+ (*r_mval)[0] = 0.0f;
+ (*r_mval)[1] = 0.0f;
+ return false;
+ }
+
+ const ARegion *region = CTX_wm_region(C);
+ (*r_mval)[0] = RNA_int_get(op->ptr, "drop_x") - region->winrct.xmin;
+ (*r_mval)[1] = RNA_int_get(op->ptr, "drop_y") - region->winrct.ymin;
+
+ return true;
+ }
+
+ /**
+ * Set the drop coordinate to the mouse position (if not already set) and call the operator's
+ * `exec()` callback.
+ */
+ static int object_add_drop_xy_generic_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+ {
+ if (!object_add_drop_xy_is_set(op)) {
+ RNA_int_set(op->ptr, "drop_x", event->xy[0]);
+ RNA_int_set(op->ptr, "drop_y", event->xy[1]);
+ }
+ return op->type->exec(C, op);
+ }
+
+ /** \} */
+
+ /* -------------------------------------------------------------------- */
+ /** \name Public Add Object API
+ * \{ */
+
+ void ED_object_location_from_view(bContext *C, float loc[3])
+ {
+ const Scene *scene = CTX_data_scene(C);
+ copy_v3_v3(loc, scene->cursor.location);
+ }
+
+ void ED_object_rotation_from_quat(float rot[3], const float viewquat[4], const char align_axis)
+ {
+ BLI_assert(align_axis >= 'X' && align_axis <= 'Z');
+
+ switch (align_axis) {
+ case 'X': {
+ /* Same as 'rv3d->viewinv[1]' */
+ const float axis_y[4] = {0.0f, 1.0f, 0.0f};
+ float quat_y[4], quat[4];
+ axis_angle_to_quat(quat_y, axis_y, M_PI_2);
+ mul_qt_qtqt(quat, viewquat, quat_y);
+ quat_to_eul(rot, quat);
+ break;
+ }
+ case 'Y': {
+ quat_to_eul(rot, viewquat);
+ rot[0] -= (float)M_PI_2;
+ break;
+ }
+ case 'Z': {
+ quat_to_eul(rot, viewquat);
+ break;
+ }
+ }
+ }
+
+ void ED_object_rotation_from_view(bContext *C, float rot[3], const char align_axis)
+ {
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+ BLI_assert(align_axis >= 'X' && align_axis <= 'Z');
+ if (rv3d) {
+ float viewquat[4];
+ copy_qt_qt(viewquat, rv3d->viewquat);
+ viewquat[0] *= -1.0f;
+ ED_object_rotation_from_quat(rot, viewquat, align_axis);
+ }
+ else {
+ zero_v3(rot);
+ }
+ }
+
+ void ED_object_base_init_transform_on_add(Object *object, const float loc[3], const float rot[3])
+ {
+ if (loc) {
+ copy_v3_v3(object->loc, loc);
+ }
+
+ if (rot) {
+ copy_v3_v3(object->rot, rot);
+ }
+
+ BKE_object_to_mat4(object, object->obmat);
+ }
+
+ float ED_object_new_primitive_matrix(bContext *C,
+ Object *obedit,
+ const float loc[3],
+ const float rot[3],
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list