Blender  V2.93
Classes
object_transform.c File Reference
#include <stdlib.h>
#include <string.h>
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_collection_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_lattice_types.h"
#include "DNA_light_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_array.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_editmesh.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_idtype.h"
#include "BKE_lattice.h"
#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_mesh.h"
#include "BKE_multires.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_tracking.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "WM_api.h"
#include "WM_types.h"
#include "ED_armature.h"
#include "ED_gpencil.h"
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "MEM_guardedalloc.h"
#include "object_intern.h"

Go to the source code of this file.

Classes

struct  XFormAxisItem
 
struct  XFormAxisData
 

Functions

Clear Transformation Utilities
static void object_clear_loc (Object *ob, const bool clear_delta)
 
static void object_clear_rot (Object *ob, const bool clear_delta)
 
static void object_clear_scale (Object *ob, const bool clear_delta)
 
static int object_clear_transform_generic_exec (bContext *C, wmOperator *op, void(*clear_func)(Object *, const bool), const char default_ksName[])
 
Clear Location Operator
static int object_location_clear_exec (bContext *C, wmOperator *op)
 
void OBJECT_OT_location_clear (wmOperatorType *ot)
 
Clear Rotation Operator
static int object_rotation_clear_exec (bContext *C, wmOperator *op)
 
void OBJECT_OT_rotation_clear (wmOperatorType *ot)
 
Clear Scale Operator
static int object_scale_clear_exec (bContext *C, wmOperator *op)
 
void OBJECT_OT_scale_clear (wmOperatorType *ot)
 
Clear Origin Operator
static int object_origin_clear_exec (bContext *C, wmOperator *UNUSED(op))
 
void OBJECT_OT_origin_clear (wmOperatorType *ot)
 
Apply Transformation Operator
static void ignore_parent_tx (Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
 
static void append_sorted_object_parent_hierarchy (Object *root_object, Object *object, Object **sorted_objects, int *object_index)
 
static Object ** sorted_selected_editable_objects (bContext *C, int *r_num_objects)
 
static int apply_objects_internal (bContext *C, ReportList *reports, bool apply_loc, bool apply_rot, bool apply_scale, bool do_props)
 
static int visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op))
 
void OBJECT_OT_visual_transform_apply (wmOperatorType *ot)
 
static int object_transform_apply_exec (bContext *C, wmOperator *op)
 
void OBJECT_OT_transform_apply (wmOperatorType *ot)
 

Transform Axis Target

Note this is an experimental operator to point lights/cameras at objects. We may re-work how this behaves based on user feedback.

  • campbell.
#define USE_RELATIVE_ROTATION
 
#define USE_RENDER_OVERRIDE
 
#define USE_FAKE_DEPTH_INIT
 
static void object_transform_axis_target_calc_depth_init (struct XFormAxisData *xfd, const int mval[2])
 
static bool object_is_target_compat (const Object *ob)
 
static void object_transform_axis_target_free_data (wmOperator *op)
 
static void object_apply_rotation (Object *ob, const float rmat[3][3])
 
static void object_apply_location (Object *ob, const float loc[3])
 
static bool object_orient_to_location (Object *ob, const float rot_orig[3][3], const float axis[3], const float location[3], const bool z_flip)
 
static void object_transform_axis_target_cancel (bContext *C, wmOperator *op)
 
static int object_transform_axis_target_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int object_transform_axis_target_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
void OBJECT_OT_transform_axis_target (wmOperatorType *ot)
 

Set Object Center Operator

enum  {
  GEOMETRY_TO_ORIGIN = 0 , ORIGIN_TO_GEOMETRY , ORIGIN_TO_CURSOR , ORIGIN_TO_CENTER_OF_MASS_SURFACE ,
  ORIGIN_TO_CENTER_OF_MASS_VOLUME
}
 
static int object_origin_set_exec (bContext *C, wmOperator *op)
 
void OBJECT_OT_origin_set (wmOperatorType *ot)
 

Macro Definition Documentation

◆ USE_FAKE_DEPTH_INIT

#define USE_FAKE_DEPTH_INIT

Calculate a depth if the cursor isn't already over a depth (not essential but feels buggy without).

Definition at line 1608 of file object_transform.c.

◆ USE_RELATIVE_ROTATION

#define USE_RELATIVE_ROTATION

When using multiple objects, apply their relative rotational offset to the active object.

Definition at line 1601 of file object_transform.c.

◆ USE_RENDER_OVERRIDE

#define USE_RENDER_OVERRIDE

Disable overlays, ignoring user setting (light wire gets in the way).

Definition at line 1603 of file object_transform.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
GEOMETRY_TO_ORIGIN 
ORIGIN_TO_GEOMETRY 
ORIGIN_TO_CURSOR 
ORIGIN_TO_CENTER_OF_MASS_SURFACE 
ORIGIN_TO_CENTER_OF_MASS_VOLUME 

Definition at line 1043 of file object_transform.c.

Function Documentation

◆ append_sorted_object_parent_hierarchy()

static void append_sorted_object_parent_hierarchy ( Object root_object,
Object object,
Object **  sorted_objects,
int *  object_index 
)
static

Definition at line 563 of file object_transform.c.

References ELEM, Object::id, LIB_TAG_DOIT, NULL, Object::parent, and ID::tag.

Referenced by sorted_selected_editable_objects().

◆ apply_objects_internal()

static int apply_objects_internal ( bContext C,
ReportList reports,
bool  apply_loc,
bool  apply_rot,
bool  apply_scale,
bool  do_props 
)
static

Definition at line 612 of file object_transform.c.

References add_v3_v3v3(), Light::area_shape, Light::area_size, Light::area_sizey, Light::area_sizez, BKE_armature_copy_bone_transforms(), BKE_armature_transform(), BKE_curve_transform_ex(), BKE_gpencil_transform(), BKE_idtype_idcode_to_name(), BKE_lattice_transform(), BKE_mball_transform(), BKE_mesh_calc_normals(), BKE_mesh_transform(), BKE_object_movieclip_get(), BKE_object_rot_to_mat3(), BKE_object_scale_to_mat3(), BKE_object_to_mat3(), BKE_object_transform_copy(), BKE_object_where_is_calc(), BKE_pose_where_is(), BKE_report(), BKE_reportf(), BKE_tracking_reconstruction_scale(), C, compare_ff_relative(), copy_m4_m3(), copy_v3_fl(), CTX_DATA_BEGIN, CTX_DATA_END, CTX_data_ensure_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CU_3D, Object::data, DEG_get_evaluated_object(), DEG_id_tag_update(), depsgraph, Object::dloc, Object::dquat, Object::drot, Object::drotAngle, Object::drotAxis, Object::dscale, ELEM, Object::empty_drawsize, fabsf, ListBase::first, Curve::flag, Curve::fsize, GS, TextBox::h, bGPdata::id, Object::id, ID_GD, ID_IS_LINKED, ID_REAL_USERS, ID_RECALC_GEOMETRY, ID_RECALC_TRANSFORM, ignore_parent_tx(), invert_m3_m3(), Curve::key, LA_AREA, LA_AREA_DISK, LA_AREA_ELLIPSE, LA_AREA_RECT, LA_AREA_SQUARE, bGPdata::layers, LISTBASE_FOREACH, Object::loc, mat3_to_scale(), max_fff(), MEM_freeN, mul_m3_m3m3(), mul_m3_v3(), multiresModifier_scale_disp(), ID::name, NC_OBJECT, ND_TRANSFORM, NULL, OB_ARMATURE, OB_CAMERA, OB_CURVE, OB_EMPTY, OB_FONT, OB_GPENCIL, OB_LAMP, OB_LATTICE, OB_MBALL, OB_MESH, OB_SURF, OPERATOR_CANCELLED, OPERATOR_FINISHED, Object::quat, Object::rot, Object::rotAngle, Object::rotAxis, RPT_ERROR, RPT_WARNING, Object::scale, scene, sorted_selected_editable_objects(), Curve::tb, Curve::totbox, MovieClip::tracking, Light::type, Object::type, unit_axis_angle(), unit_m3(), unit_qt(), TextBox::w, WM_event_add_notifier(), TextBox::x, TextBox::y, and zero_v3().

Referenced by object_transform_apply_exec().

◆ ignore_parent_tx()

static void ignore_parent_tx ( Main bmain,
Depsgraph depsgraph,
Scene scene,
Object ob 
)
static

◆ object_apply_location()

static void object_apply_location ( Object ob,
const float  loc[3] 
)
static

◆ object_apply_rotation()

static void object_apply_rotation ( Object ob,
const float  rmat[3][3] 
)
static

◆ object_clear_loc()

static void object_clear_loc ( Object ob,
const bool  clear_delta 
)
static

◆ object_clear_rot()

static void object_clear_rot ( Object ob,
const bool  clear_delta 
)
static

◆ object_clear_scale()

static void object_clear_scale ( Object ob,
const bool  clear_delta 
)
static

◆ object_clear_transform_generic_exec()

static int object_clear_transform_generic_exec ( bContext C,
wmOperator op,
void(*)(Object *, const bool)  clear_func,
const char  default_ksName[] 
)
static

◆ object_is_target_compat()

static bool object_is_target_compat ( const Object ob)
static

◆ object_location_clear_exec()

static int object_location_clear_exec ( bContext C,
wmOperator op 
)
static

◆ object_orient_to_location()

static bool object_orient_to_location ( Object ob,
const float  rot_orig[3][3],
const float  axis[3],
const float  location[3],
const bool  z_flip 
)
static

◆ object_origin_clear_exec()

static int object_origin_clear_exec ( bContext C,
wmOperator UNUSEDop 
)
static

◆ object_origin_set_exec()

static int object_origin_set_exec ( bContext C,
wmOperator op 
)
static

Definition at line 1051 of file object_transform.c.

References add_v3_v3(), Object_Runtime::bb, BKE_armature_copy_bone_transforms(), BKE_curve_center_bounds(), BKE_curve_center_median(), BKE_curve_translate(), BKE_gpencil_centroid_3d(), BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_stroke_geometry_update(), BKE_lattice_center_bounds(), BKE_lattice_center_median(), BKE_lattice_translate(), BKE_mball_center_bounds(), BKE_mball_center_median(), BKE_mball_translate(), BKE_mesh_center_bounds(), BKE_mesh_center_median(), BKE_mesh_center_of_surface(), BKE_mesh_center_of_volume(), BKE_mesh_translate(), BKE_object_batch_cache_dirty_tag(), BKE_object_minmax_dupli(), BKE_object_to_mat4(), BKE_object_transform_copy(), BKE_object_where_is_calc(), BKE_pose_where_is(), BKE_report(), BKE_reportf(), BMEditMesh::bm, BM_ITER_MESH, BM_VERTS_OF_MESH, C, BMVert::co, copy_m3_m4(), copy_v3_v3(), CTX_data_active_object(), CTX_data_edit_object(), CTX_data_ensure_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CU_3D, Scene::cursor, Object::data, DEG_get_evaluated_object(), DEG_id_tag_update(), depsgraph, ED_armature_origin_set(), EDBM_mesh_normals_update(), Mesh::edit_mesh, ELEM, ListBase::first, Curve::flag, Object::flag, float(), GEOMETRY_TO_ORIGIN, bArmature::id, Collection::id, Curve::id, bGPdata::id, Lattice::id, Mesh::id, MetaBall::id, Object::id, ID_IS_LINKED, ID_REAL_USERS, ID_RECALC_COPY_ON_WRITE, ID_RECALC_GEOMETRY, ID_RECALC_TRANSFORM, ignore_parent_tx(), Object::imat, INIT_MINMAX, Object::instance_collection, Collection::instance_offset, invert_m3_m3(), invert_m4_m4(), bGPdata::layers, LIB_TAG_DOIT, LISTBASE_FOREACH, Object::loc, View3DCursor::location, madd_v3_v3fl(), max, MEM_freeN, mid_v3_v3v3(), min, minmax_v3v3_v3(), mul_m3_v3(), mul_m4_v3(), mul_v3_m3v3(), mul_v3_m4v3(), mul_v3_mat3_m4v3(), NC_OBJECT, ND_TRANSFORM, negate_v3_v3(), ID::next, NULL, OB_ARMATURE, OB_CURVE, OB_DONE, OB_DUPLICOLLECTION, OB_FONT, OB_GPENCIL, OB_LATTICE, OB_MBALL, OB_MESH, OB_SURF, Main::objects, Object::obmat, OPERATOR_CANCELLED, OPERATOR_FINISHED, ORIGIN_TO_CENTER_OF_MASS_SURFACE, ORIGIN_TO_CENTER_OF_MASS_VOLUME, ORIGIN_TO_CURSOR, ORIGIN_TO_GEOMETRY, wmOperator::ptr, wmOperator::reports, RNA_enum_get(), RNA_property_enum_get(), RNA_property_enum_set(), RNA_property_is_set(), RNA_struct_find_property(), RPT_ERROR, RPT_WARNING, Object::runtime, scene, sorted_selected_editable_objects(), sub_v3_v3(), sub_v3_v3v3(), ID::tag, Scene::toolsettings, BMesh::totvert, Object::transflag, ToolSettings::transform_pivot_point, Object::type, V3D_AROUND_CENTER_BOUNDS, V3D_AROUND_CENTER_MEDIAN, BoundBox::vec, WM_event_add_notifier(), bGPDspoint::x, Curve::xof, Curve::yof, and zero_v3().

Referenced by OBJECT_OT_origin_set().

◆ OBJECT_OT_location_clear()

void OBJECT_OT_location_clear ( wmOperatorType ot)

◆ OBJECT_OT_origin_clear()

void OBJECT_OT_origin_clear ( wmOperatorType ot)

◆ OBJECT_OT_origin_set()

void OBJECT_OT_origin_set ( wmOperatorType ot)

◆ OBJECT_OT_rotation_clear()

void OBJECT_OT_rotation_clear ( wmOperatorType ot)

◆ OBJECT_OT_scale_clear()

void OBJECT_OT_scale_clear ( wmOperatorType ot)

◆ OBJECT_OT_transform_apply()

void OBJECT_OT_transform_apply ( wmOperatorType ot)

◆ OBJECT_OT_transform_axis_target()

void OBJECT_OT_transform_axis_target ( wmOperatorType ot)

◆ OBJECT_OT_visual_transform_apply()

void OBJECT_OT_visual_transform_apply ( wmOperatorType ot)

◆ object_rotation_clear_exec()

static int object_rotation_clear_exec ( bContext C,
wmOperator op 
)
static

◆ object_scale_clear_exec()

static int object_scale_clear_exec ( bContext C,
wmOperator op 
)
static

◆ object_transform_apply_exec()

static int object_transform_apply_exec ( bContext C,
wmOperator op 
)
static

◆ object_transform_axis_target_calc_depth_init()

static void object_transform_axis_target_calc_depth_init ( struct XFormAxisData xfd,
const int  mval[2] 
)
static

◆ object_transform_axis_target_cancel()

static void object_transform_axis_target_cancel ( bContext C,
wmOperator op 
)
static

◆ object_transform_axis_target_free_data()

static void object_transform_axis_target_free_data ( wmOperator op)
static

◆ object_transform_axis_target_invoke()

static int object_transform_axis_target_invoke ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ object_transform_axis_target_modal()

static int object_transform_axis_target_modal ( bContext C,
wmOperator op,
const wmEvent event 
)
static

Definition at line 1862 of file object_transform.c.

References add_v3_v3(), C, copy_m3_m4(), copy_v3_v3(), wmOperator::customdata, DEG_id_tag_update(), XFormAxisData::depth, ViewDepths::depth_range, RegionView3D::depths, dot_v3v3(), double(), ED_region_tag_redraw(), ED_view3d_depth_read_cached(), ED_view3d_depth_read_cached_normal(), ED_view3d_depth_unproject(), ELEM, EVT_ESCKEY, EVT_PADENTER, EVT_RETKEY, fabsf, ViewDepths::h, Object::id, ID_RECALC_TRANSFORM, XFormAxisData::init_event, invert_m3_m3(), XFormAxisData::is_depth_valid, XFormAxisData::is_normal_valid, XFormAxisData::is_translate, XFormAxisItem::is_z_flip, ISMOUSE, KM_RELEASE, LEFTMOUSE, len_v3v3(), madd_v3_v3fl(), MOUSEMOVE, mul_m3_m3m3(), mul_m3_v3(), wmEvent::mval, NC_OBJECT, ND_TRANSFORM, normal, XFormAxisData::normal, normalize_m3(), normalize_v3(), normalize_v3_v3(), XFormAxisItem::ob, object_apply_location(), XFormAxisData::object_data, XFormAxisData::object_data_len, object_orient_to_location(), object_transform_axis_target_calc_depth_init(), object_transform_axis_target_cancel(), object_transform_axis_target_free_data(), Object::obmat, OPERATOR_CANCELLED, OPERATOR_FINISHED, OPERATOR_RUNNING_MODAL, XFormAxisData::prev, ViewContext::region, RIGHTMOUSE, XFormAxisItem::rot_mat, ViewContext::rv3d, wmEvent::type, wmEvent::val, XFormAxisData::vc, view3d_operator_needs_opengl(), ViewDepths::w, WM_event_add_notifier(), x, XFormAxisItem::xform_dist, XFormAxisItem::xform_rot_offset, and y.

Referenced by OBJECT_OT_transform_axis_target().

◆ sorted_selected_editable_objects()

static Object** sorted_selected_editable_objects ( bContext C,
int *  r_num_objects 
)
static

◆ visual_transform_apply_exec()

static int visual_transform_apply_exec ( bContext C,
wmOperator UNUSEDop 
)
static