91 object =
OBACT(view_layer);
95 object =
object->parent;
183 if (selected_count == 0) {
186 "At least one track with bundle should be selected to "
187 "define origin position");
193 if (
object ==
NULL) {
201 float median[3] = {0.0f, 0.0f, 0.0f};
208 mul_v3_fl(median, 1.0f / selected_count);
210 float mat[4][4], vec[3];
237 "Set active marker as origin by moving camera (or its parent if present) in 3D space";
249 ot->
srna,
"use_median", 0,
"Use Median",
"Set origin to median point of selected bundles");
264 float mat[4][4], vec[3], obmat[4][4], dvec[3];
291 if (
fabsf(dvec[1]) < 1e-3f) {
307 if (is_camera ||
fabsf(vec[2]) < 1e-3f) {
323 if (
fabsf(dvec[0]) < 1e-3f) {
339 if (is_camera ||
fabsf(vec[2]) < 1e-3f) {
366 float lmat[4][4], ilmat[4][4], rmat[3][3];
398 float vec[3][3], mat[4][4], obmat[4][4], newmat[4][4], orig[3] = {0.0f, 0.0f, 0.0f};
401 {0.0f, 0.0f, -1.0f, 0.0f},
402 {0.0f, 1.0f, 0.0f, 0.0f},
403 {1.0f, 0.0f, 0.0f, 0.0f},
404 {0.0f, 0.0f, 0.0f, 1.0f},
418 if (
object ==
NULL) {
426 track = tracksbase->
first;
427 while (track && tot < 3) {
430 if (tot == 0 || track == act_track) {
451 else if (plane == 1) {
475 if (object->
loc[2] < 0) {
492 set_axis(
scene,
object, clip, tracking_object, axis_track,
'X');
506 {0,
"FLOOR", 0,
"Floor",
"Set floor plane"},
507 {1,
"WALL", 0,
"Wall",
"Set wall plane"},
514 "Set plane based on 3 selected bundles by moving camera "
515 "(or its parent if present) in 3D space";
526 RNA_def_enum(
ot->
srna,
"plane", plane_items, 0,
"Plane",
"Plane to be used for orientation");
543 op->
reports,
RPT_ERROR,
"Single track with bundle should be selected to define axis");
548 if (
object ==
NULL) {
562 set_axis(
scene,
object, clip, tracking_object, track, axis == 0 ?
'X' :
'Y');
576 {0,
"X", 0,
"X",
"Align bundle align X axis"},
577 {1,
"Y", 0,
"Y",
"Align bundle align Y axis"},
584 "Set direction of scene axis rotating camera "
585 "(or its parent if present) and assume selected track "
586 "lies on real axis, joining it with the origin";
597 RNA_def_enum(
ot->
srna,
"axis", axis_actions, 0,
"Axis",
"Axis to use to align bundle along");
614 float vec[2][3], mat[4][4], scale;
622 if (!scale_solution && !apply_scale) {
624 if (
object ==
NULL) {
632 track = tracksbase->
first;
643 if (
len_v3(vec[0]) > 1e-5f) {
644 scale = dist /
len_v3(vec[0]);
652 for (track = tracksbase->
first; track; track = track->
next) {
658 mul_v3_fl(reconstructed_cameras[i].mat[3], scale);
669 else if (!scale_solution) {
672 object->scale[0] =
object->scale[1] =
object->scale[2] = 1.0f / scale;
675 object->scale[0] /= solver_camera->
scale[0];
676 object->scale[1] /= solver_camera->
scale[1];
677 object->scale[2] /= solver_camera->
scale[2];
681 tracking_object->
scale = scale;
719 ot->
description =
"Set scale of scene by scaling camera (or its parent if present)";
737 "Distance between selected tracks",
778 ot->
name =
"Set Solution Scale";
780 "Set object solution scale using distance between "
781 "two selected tracks";
782 ot->
idname =
"CLIP_OT_set_solution_scale";
799 "Distance between selected tracks",
838 ot->
name =
"Apply Solution Scale";
840 "Apply scale on solution itself to make distance between "
841 "selected tracks equals to desired";
842 ot->
idname =
"CLIP_OT_apply_solution_scale";
859 "Distance between selected tracks",
#define FOREACH_SCENE_OBJECT_END
#define FOREACH_SCENE_OBJECT_BEGIN(scene, _instance)
const bConstraintTypeInfo * BKE_constraint_typeinfo_get(struct bConstraint *con)
struct Scene * CTX_data_scene(const bContext *C)
struct SpaceClip * CTX_wm_space_clip(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
General operations, lookup, etc. for blender objects.
struct MovieClip * BKE_object_movieclip_get(struct Scene *scene, struct Object *ob, bool use_default)
void BKE_object_where_is_calc(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
void BKE_object_transform_copy(struct Object *ob_tar, const struct Object *ob_src)
void BKE_object_where_is_calc_mat4(struct Object *ob, float r_obmat[4][4])
void BKE_object_rot_to_mat3(const struct Object *ob, float r_mat[3][3], bool use_drot)
void BKE_object_to_mat4(struct Object *ob, float r_mat[4][4])
void BKE_object_apply_mat4(struct Object *ob, const float mat[4][4], const bool use_compat, const bool use_parent)
void BKE_report(ReportList *reports, ReportType type, const char *message)
void BKE_tracking_get_camera_object_matrix(struct Object *camera_object, float mat[4][4])
struct ListBase * BKE_tracking_get_active_tracks(struct MovieTracking *tracking)
struct MovieTrackingTrack * BKE_tracking_track_get_active(struct MovieTracking *tracking)
struct MovieTrackingReconstruction * BKE_tracking_get_active_reconstruction(struct MovieTracking *tracking)
#define TRACK_VIEW_SELECTED(sc, track)
struct ListBase * BKE_tracking_object_get_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object)
struct MovieTrackingObject * BKE_tracking_object_get_active(struct MovieTracking *tracking)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
bool invert_m4(float R[4][4])
void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3])
void unit_m4(float m[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
#define mul_m4_series(...)
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
bool invert_m3(float R[3][3])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ CONSTRAINT_TYPE_OBJECTSOLVER
Object is a sort of wrapper for general info.
#define OBACT(_view_layer)
struct MovieClip * ED_space_clip_get_clip(struct SpaceClip *sc)
Read Guarded memory(de)allocation.
return(oflags[bm->toolflag_index].f &oflag) !=0
const Depsgraph * depsgraph
const ProjectiveReconstruction & reconstruction
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
struct MovieTracking tracking
struct MovieTrackingTrack * next
MovieTrackingSettings settings
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void CLIP_OT_set_origin(wmOperatorType *ot)
static void set_axis(Scene *scene, Object *ob, MovieClip *clip, MovieTrackingObject *tracking_object, MovieTrackingTrack *track, char axis)
void CLIP_OT_apply_solution_scale(wmOperatorType *ot)
static bool set_orientation_poll(bContext *C)
static int apply_solution_scale_exec(bContext *C, wmOperator *op)
static bool set_solution_scale_poll(bContext *C)
static int apply_solution_scale_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
void CLIP_OT_set_solution_scale(wmOperatorType *ot)
void CLIP_OT_set_axis(wmOperatorType *ot)
static int set_origin_exec(bContext *C, wmOperator *op)
static Object * get_orientation_object(bContext *C)
static int set_scale_exec(bContext *C, wmOperator *op)
static int do_set_scale(bContext *C, wmOperator *op, bool scale_solution, bool apply_scale)
static bool apply_solution_scale_poll(bContext *C)
static int set_solution_scale_exec(bContext *C, wmOperator *op)
void CLIP_OT_set_scale(wmOperatorType *ot)
static Object * object_solver_camera(Scene *scene, Object *ob)
static int set_axis_exec(bContext *C, wmOperator *op)
static int set_plane_exec(bContext *C, wmOperator *op)
static int set_solution_scale_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static int set_scale_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static void object_solver_inverted_matrix(Scene *scene, Object *ob, float invmat[4][4])
static Object * get_camera_with_movieclip(Scene *scene, MovieClip *clip)
static int count_selected_bundles(bContext *C)
void CLIP_OT_set_plane(wmOperatorType *ot)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)