Camera tracking integration
=========================== Moved tweak from "Cursor To Active" to "Cursor To Selection". It's more logical due to this operator already works with midpoints.
This commit is contained in:
@@ -750,6 +750,32 @@ void VIEW3D_OT_snap_cursor_to_grid(wmOperatorType *ot)
|
||||
|
||||
/* **************************************************** */
|
||||
|
||||
static void bundle_midpoint(Scene *scene, float vec[3])
|
||||
{
|
||||
MovieTrackingTrack *track;
|
||||
int ok= 0;
|
||||
float min[3], max[3], mat[4][4], pos[3];
|
||||
|
||||
BKE_get_tracking_mat(scene, mat);
|
||||
|
||||
INIT_MINMAX(min, max);
|
||||
|
||||
track= scene->clip->tracking.tracks.first;
|
||||
while(track) {
|
||||
if(track->flag&TRACK_HAS_BUNDLE && TRACK_SELECTED(track)) {
|
||||
ok= 1;
|
||||
mul_v3_m4v3(pos, mat, track->bundle_pos);
|
||||
DO_MINMAX(pos, min, max);
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
|
||||
if(ok) {
|
||||
interp_v3_v3v3(vec, min, max, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
@@ -814,6 +840,15 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
|
||||
else {
|
||||
CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
|
||||
VECCOPY(vec, ob->obmat[3]);
|
||||
|
||||
/* special case for camera -- snap to bundles */
|
||||
if(obact->type==OB_CAMERA) {
|
||||
/* snap to bundles should happen only when bundles are visible */
|
||||
if(scene->clip && v3d->flag2&V3D_SHOW_RECONSTRUCTION) {
|
||||
bundle_midpoint(scene, vec);
|
||||
}
|
||||
}
|
||||
|
||||
add_v3_v3(centroid, vec);
|
||||
DO_MINMAX(vec, min, max);
|
||||
count++;
|
||||
@@ -853,32 +888,6 @@ void VIEW3D_OT_snap_cursor_to_selected(wmOperatorType *ot)
|
||||
|
||||
/* ********************************************** */
|
||||
|
||||
static void snap_to_bundle(Scene *scene, float *curs)
|
||||
{
|
||||
MovieTrackingTrack *track;
|
||||
int ok= 0;
|
||||
float min[3], max[3], mat[4][4], pos[3];
|
||||
|
||||
BKE_get_tracking_mat(scene, mat);
|
||||
|
||||
INIT_MINMAX(min, max);
|
||||
|
||||
track= scene->clip->tracking.tracks.first;
|
||||
while(track) {
|
||||
if(track->flag&TRACK_HAS_BUNDLE && TRACK_SELECTED(track)) {
|
||||
ok= 1;
|
||||
mul_v3_m4v3(pos, mat, track->bundle_pos);
|
||||
DO_MINMAX(pos, min, max);
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
|
||||
if(ok) {
|
||||
interp_v3_v3v3(curs, min, max, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
static int snap_curs_to_active(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
@@ -905,14 +914,6 @@ static int snap_curs_to_active(bContext *C, wmOperator *UNUSED(op))
|
||||
else {
|
||||
if (obact) {
|
||||
VECCOPY(curs, obact->obmat[3]);
|
||||
|
||||
/* special case for camera -- snap to bundles */
|
||||
if(obact->type==OB_CAMERA) {
|
||||
/* snap to bundles should happen only when bundles are visible */
|
||||
if(scene->clip && v3d->flag2&V3D_SHOW_RECONSTRUCTION) {
|
||||
snap_to_bundle(scene, curs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user