79 if (
object !=
nullptr && object->
parent !=
nullptr) {
80 object =
object->parent;
93 if (clip !=
nullptr) {
125 if (cti ==
nullptr) {
150 if (cti ==
nullptr) {
170 if (selected_count == 0) {
173 "At least one track with bundle should be selected to "
174 "define origin position");
180 if (
object ==
nullptr) {
187 float median[3] = {0.0f, 0.0f, 0.0f};
194 mul_v3_fl(median, 1.0f / selected_count);
196 float mat[4][4], vec[3];
221 ot->name =
"Set Origin";
223 "Set active marker as origin by moving camera (or its parent if present) in 3D space";
224 ot->idname =
"CLIP_OT_set_origin";
238 "Set origin to median point of selected bundles");
253 float mat[4][4], vec[3], obmat[4][4], dvec[3];
280 if (
fabsf(dvec[1]) < 1e-3f) {
296 if (is_camera ||
fabsf(vec[2]) < 1e-3f) {
312 if (
fabsf(dvec[0]) < 1e-3f) {
328 if (is_camera ||
fabsf(vec[2]) < 1e-3f) {
355 float lmat[4][4], ilmat[4][4], rmat[3][3];
384 float vec[3][3], mat[4][4], obmat[4][4], newmat[4][4], orig[3] = {0.0f, 0.0f, 0.0f};
387 {0.0f, 0.0f, -1.0f, 0.0f},
388 {0.0f, 1.0f, 0.0f, 0.0f},
389 {1.0f, 0.0f, 0.0f, 0.0f},
390 {0.0f, 0.0f, 0.0f, 1.0f},
402 if (
object ==
nullptr) {
413 while (track && tot < 3) {
416 if (tot == 0 || track == tracking_object->
active_track) {
438 else if (plane == 1) {
462 if (object->
loc[2] < 0) {
479 set_axis(scene,
object, clip, tracking_object, axis_track,
'X');
493 {0,
"FLOOR", 0,
"Floor",
"Set floor plane"},
494 {1,
"WALL", 0,
"Wall",
"Set wall plane"},
495 {0,
nullptr, 0,
nullptr,
nullptr},
499 ot->name =
"Set Plane";
501 "Set plane based on 3 selected bundles by moving camera "
502 "(or its parent if present) in 3D space";
503 ot->idname =
"CLIP_OT_set_plane";
513 RNA_def_enum(
ot->srna,
"plane", plane_items, 0,
"Plane",
"Plane to be used for orientation");
530 op->
reports,
RPT_ERROR,
"Single track with bundle should be selected to define axis");
535 if (
object ==
nullptr) {
549 set_axis(scene,
object, clip, tracking_object, track, axis == 0 ?
'X' :
'Y');
563 {0,
"X", 0,
"X",
"Align bundle align X axis"},
564 {1,
"Y", 0,
"Y",
"Align bundle align Y axis"},
565 {0,
nullptr, 0,
nullptr,
nullptr},
569 ot->name =
"Set Axis";
571 "Set the direction of a scene axis by rotating the camera "
572 "(or its parent if present). This assumes that the selected "
573 "track lies on a real axis connecting it to the origin";
574 ot->idname =
"CLIP_OT_set_axis";
584 RNA_def_enum(
ot->srna,
"axis", axis_actions, 0,
"Axis",
"Axis to use to align bundle along");
602 float vec[2][3], mat[4][4], scale;
610 if (!scale_solution && !apply_scale) {
612 if (
object ==
nullptr) {
629 if (
len_v3(vec[0]) > 1e-5f) {
630 scale = dist /
len_v3(vec[0]);
641 reconstructed_cameras = reconstruction->
cameras;
642 for (
i = 0;
i < reconstruction->
camnr;
i++) {
643 mul_v3_fl(reconstructed_cameras[
i].mat[3], scale);
656 else if (!scale_solution) {
659 object->scale[0] =
object->scale[1] =
object->scale[2] = 1.0f / scale;
662 object->scale[0] /= solver_camera->
scale[0];
663 object->scale[1] /= solver_camera->
scale[1];
664 object->scale[2] /= solver_camera->
scale[2];
668 tracking_object->
scale = scale;
705 ot->name =
"Set Scale";
706 ot->description =
"Set scale of scene by scaling camera (or its parent if present)";
707 ot->idname =
"CLIP_OT_set_scale";
724 "Distance between selected tracks",
736 if (clip !=
nullptr) {
767 ot->name =
"Set Solution Scale";
769 "Set object solution scale using distance between "
770 "two selected tracks";
771 ot->idname =
"CLIP_OT_set_solution_scale";
788 "Distance between selected tracks",
800 if (clip !=
nullptr) {
829 ot->name =
"Apply Solution Scale";
831 "Apply scale on solution itself to make distance between "
832 "selected tracks equals to desired";
833 ot->idname =
"CLIP_OT_apply_solution_scale";
850 "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)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
void BKE_object_where_is_calc_mat4(const Object *ob, float r_obmat[4][4])
void BKE_object_rot_to_mat3(const Object *ob, float r_mat[3][3], bool use_drot)
MovieClip * BKE_object_movieclip_get(Scene *scene, const Object *ob, bool use_default)
void BKE_object_apply_mat4(Object *ob, const float mat[4][4], bool use_compat, bool use_parent)
void BKE_object_to_mat4(const Object *ob, float r_mat[4][4])
void BKE_object_where_is_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_tracking_get_camera_object_matrix(const struct Object *camera_object, float mat[4][4])
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
#define TRACK_VIEW_SELECTED(sc, track)
#define LISTBASE_FOREACH(type, var, list)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3])
#define mul_m4_series(...)
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
bool invert_m4(float mat[4][4])
bool invert_m3(float mat[3][3])
void unit_m4(float m[4][4])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
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 normalize_v3(float n[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void DEG_id_tag_update(ID *id, unsigned int flags)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ CONSTRAINT_TYPE_OBJECTSOLVER
Object is a sort of wrapper for general info.
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
BMesh const char void * data
BPy_StructRNA * depsgraph
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, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
struct MovieTracking tracking
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
struct MovieReconstructedCamera * cameras
struct MovieTrackingTrack * next
MovieTrackingSettings settings
struct ReportList * reports
void CLIP_OT_set_origin(wmOperatorType *ot)
static wmOperatorStatus set_origin_exec(bContext *C, wmOperator *op)
static wmOperatorStatus set_solution_scale_exec(bContext *C, wmOperator *op)
static Object * object_solver_camera(Scene *scene, Object *ob)
void CLIP_OT_apply_solution_scale(wmOperatorType *ot)
static bool set_orientation_poll(bContext *C)
static wmOperatorStatus set_scale_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool set_solution_scale_poll(bContext *C)
void CLIP_OT_set_solution_scale(wmOperatorType *ot)
static wmOperatorStatus set_scale_exec(bContext *C, wmOperator *op)
static wmOperatorStatus apply_solution_scale_invoke(bContext *C, wmOperator *op, const wmEvent *)
void CLIP_OT_set_axis(wmOperatorType *ot)
static wmOperatorStatus apply_solution_scale_exec(bContext *C, wmOperator *op)
static wmOperatorStatus set_plane_exec(bContext *C, wmOperator *op)
static bool apply_solution_scale_poll(bContext *C)
static wmOperatorStatus set_axis_exec(bContext *C, wmOperator *op)
void CLIP_OT_set_scale(wmOperatorType *ot)
static Object * get_camera_with_movieclip(Scene *scene, const MovieClip *clip)
static void object_solver_inverted_matrix(Scene *scene, Object *ob, float invmat[4][4])
static int count_selected_bundles(bContext *C)
void CLIP_OT_set_plane(wmOperatorType *ot)
static Object * get_orientation_object(bContext *C)
static wmOperatorStatus set_solution_scale_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void set_axis(Scene *scene, Object *ob, const MovieClip *clip, const MovieTrackingObject *tracking_object, const MovieTrackingTrack *track, char axis)
static wmOperatorStatus do_set_scale(bContext *C, wmOperator *op, bool scale_solution, bool apply_scale)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)