Camera tracking integration
=========================== DeBalie commit (main changes only): - Code cleanup - Selectable tracking graph curves and curve knots - Graph curve and curve knots can be deleted now - Fixed wrong write when linking libraries (error is caused by hardcoded cound of linkable ID blocks) - Fixed for KLT tracker when using keyframe adjustment
This commit is contained in:
parent
f385e54a48
commit
9d2caba92e
12
extern/libmv/libmv-capi.cpp
vendored
12
extern/libmv/libmv-capi.cpp
vendored
@ -198,7 +198,7 @@ void savePNGImage(png_bytep *row_pointers, int width, int height, int depth, int
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
static void saveImage(libmv::FloatImage image, int x0, int y0)
|
||||
static void saveImage(char *prefix, libmv::FloatImage image, int x0, int y0)
|
||||
{
|
||||
int x, y;
|
||||
png_bytep *row_pointers;
|
||||
@ -228,7 +228,7 @@ static void saveImage(libmv::FloatImage image, int x0, int y0)
|
||||
{
|
||||
static int a= 0;
|
||||
char buf[128];
|
||||
snprintf(buf, sizeof(buf), "%02d.png", ++a);
|
||||
snprintf(buf, sizeof(buf), "%s_%02d.png", prefix, ++a);
|
||||
savePNGImage(row_pointers, image.Width(), image.Height(), 8, PNG_COLOR_TYPE_RGBA, buf);
|
||||
}
|
||||
|
||||
@ -238,7 +238,7 @@ static void saveImage(libmv::FloatImage image, int x0, int y0)
|
||||
free(row_pointers);
|
||||
}
|
||||
|
||||
static void saveBytesImage(unsigned char *data, int width, int height)
|
||||
static void saveBytesImage(char *prefix, unsigned char *data, int width, int height)
|
||||
{
|
||||
int x, y;
|
||||
png_bytep *row_pointers;
|
||||
@ -260,7 +260,7 @@ static void saveBytesImage(unsigned char *data, int width, int height)
|
||||
{
|
||||
static int a= 0;
|
||||
char buf[128];
|
||||
snprintf(buf, sizeof(buf), "%02d.png", ++a);
|
||||
snprintf(buf, sizeof(buf), "%s_%02d.png", prefix, ++a);
|
||||
savePNGImage(row_pointers, width, height, 8, PNG_COLOR_TYPE_RGBA, buf);
|
||||
}
|
||||
|
||||
@ -295,8 +295,8 @@ int libmv_regionTrackerTrack(libmv_RegionTracker *libmv_tracker, const float *im
|
||||
int result = region_tracker->Track(old_patch, new_patch, x1, y1, x2, y2);
|
||||
|
||||
if (!result) {
|
||||
saveImage(old_patch, x1, y1);
|
||||
saveImage(new_patch, sx2, sy2);
|
||||
saveImage("old_patch", old_patch, x1, y1);
|
||||
saveImage("new_patch", new_patch, sx2, sy2);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -1190,6 +1190,7 @@ static void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r)
|
||||
|
||||
/* TODO what to do with vert_r->flag? */
|
||||
vert_r->bweight = (unsigned char) (ev->bweight*255.0f);
|
||||
vert_r->flag= ev->f;
|
||||
}
|
||||
|
||||
static void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r)
|
||||
|
@ -83,7 +83,7 @@ static int sequence_guess_offset(const char *full_name, int head_len, int numlen
|
||||
{
|
||||
char num[FILE_MAX]= {0};
|
||||
|
||||
BLI_strncpy(num, full_name+head_len, numlen);
|
||||
BLI_strncpy(num, full_name+head_len, numlen+1);
|
||||
|
||||
return atoi(num);
|
||||
}
|
||||
@ -387,12 +387,12 @@ static MovieClip *movieclip_alloc(const char *name)
|
||||
clip->tracking.settings.keyframe1= 1;
|
||||
clip->tracking.settings.keyframe2= 30;
|
||||
clip->tracking.settings.dist= 1;
|
||||
clip->tracking.settings.corr= 0.75;
|
||||
clip->tracking.settings.corr= 0.75f;
|
||||
|
||||
clip->tracking.stabilization.scaleinf= 1.f;
|
||||
clip->tracking.stabilization.locinf= 1.f;
|
||||
clip->tracking.stabilization.rotinf= 1.f;
|
||||
clip->tracking.stabilization.maxscale= 2.f;
|
||||
clip->tracking.stabilization.scaleinf= 1.0f;
|
||||
clip->tracking.stabilization.locinf= 1.0f;
|
||||
clip->tracking.stabilization.rotinf= 1.0f;
|
||||
clip->tracking.stabilization.maxscale= 2.0f;
|
||||
|
||||
clip->proxy.build_size_flag= IMB_PROXY_25;
|
||||
clip->proxy.build_tc_flag= IMB_TC_RECORD_RUN|IMB_TC_FREE_RUN|IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN;
|
||||
@ -454,7 +454,7 @@ MovieClip *BKE_add_movieclip_file(const char *name)
|
||||
clip->tracking.camera.principal[0]= ((float)width)/2;
|
||||
clip->tracking.camera.principal[1]= ((float)height)/2;
|
||||
|
||||
clip->tracking.camera.focal= 24.f*width/clip->tracking.camera.sensor_width;
|
||||
clip->tracking.camera.focal= 24.0f*width/clip->tracking.camera.sensor_width;
|
||||
}
|
||||
|
||||
return clip;
|
||||
@ -473,13 +473,13 @@ static void real_ibuf_size(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, in
|
||||
break;
|
||||
|
||||
case MCLIP_PROXY_RENDER_SIZE_50:
|
||||
(*width)*= 2;
|
||||
(*height)*= 2;
|
||||
(*width)*= 2.0f;
|
||||
(*height)*= 2.0f;
|
||||
break;
|
||||
|
||||
case MCLIP_PROXY_RENDER_SIZE_75:
|
||||
*width= ((float)*width)*4.f/3.f;
|
||||
*height= ((float)*height)*4.f/3.f;
|
||||
*width= ((float)*width)*4.0f/3.0f;
|
||||
*height= ((float)*height)*4.0f/3.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -535,9 +535,9 @@ static ImBuf *get_undistorted_ibuf(MovieClip *clip, struct MovieDistortion *dist
|
||||
imb_freerectfloatImBuf(ibuf);
|
||||
|
||||
if(distoriton)
|
||||
undistibuf= BKE_tracking_distortion_exec(distoriton, &clip->tracking, ibuf, ibuf->x, ibuf->y, 0.f, 1);
|
||||
undistibuf= BKE_tracking_distortion_exec(distoriton, &clip->tracking, ibuf, ibuf->x, ibuf->y, 0.0f, 1);
|
||||
else
|
||||
undistibuf= BKE_tracking_undistort(&clip->tracking, ibuf, ibuf->x, ibuf->y, 0.f);
|
||||
undistibuf= BKE_tracking_undistort(&clip->tracking, ibuf, ibuf->x, ibuf->y, 0.0f);
|
||||
|
||||
if(undistibuf->userflags|= IB_RECT_INVALID) {
|
||||
ibuf->userflags&= ~IB_RECT_INVALID;
|
||||
@ -645,7 +645,6 @@ ImBuf *BKE_movieclip_get_ibuf_flag(MovieClip *clip, MovieClipUser *user, int fla
|
||||
cache_undistorted= 1;
|
||||
}
|
||||
|
||||
/* cache is supposed to be threadsafe */
|
||||
ibuf= get_imbuf_cache(clip, user, flag);
|
||||
|
||||
if(!ibuf) {
|
||||
@ -730,8 +729,8 @@ ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float
|
||||
if(angle) *angle= tangle;
|
||||
} else {
|
||||
if(loc) zero_v2(loc);
|
||||
if(scale) *scale= 1.f;
|
||||
if(angle) *angle= 0.f;
|
||||
if(scale) *scale= 1.0f;
|
||||
if(angle) *angle= 0.0f;
|
||||
|
||||
stableibuf= ibuf;
|
||||
}
|
||||
@ -895,7 +894,7 @@ void BKE_movieclip_update_scopes(MovieClip *clip, MovieClipUser *user, MovieClip
|
||||
|
||||
if(user->render_flag&MCLIP_PROXY_RENDER_UNDISTORT) {
|
||||
int width, height;
|
||||
float aspy= 1.f/clip->tracking.camera.pixel_aspect;;
|
||||
float aspy= 1.0f/clip->tracking.camera.pixel_aspect;;
|
||||
|
||||
BKE_movieclip_get_size(clip, user, &width, &height);
|
||||
|
||||
@ -944,8 +943,8 @@ static void movieclip_build_proxy_ibuf(MovieClip *clip, ImBuf *ibuf, int cfra, i
|
||||
|
||||
get_proxy_fname(clip, proxy_render_size, undistorted, cfra, name);
|
||||
|
||||
rectx= ibuf->x*size/100.f;
|
||||
recty= ibuf->y*size/100.f;
|
||||
rectx= ibuf->x*size/100.0f;
|
||||
recty= ibuf->y*size/100.0f;
|
||||
|
||||
scaleibuf= IMB_dupImBuf(ibuf);
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_math_base.h"
|
||||
#include "BLI_listbase.h"
|
||||
#include "BLI_ghash.h"
|
||||
#include "BLI_path_util.h"
|
||||
@ -131,8 +132,8 @@ void BKE_tracking_clamp_track(MovieTrackingTrack *track, int event)
|
||||
sub_v2_v2v2(dim, track->pat_max, track->pat_min);
|
||||
|
||||
for(a= 0; a<2; a++) {
|
||||
track->pat_min[a]= -dim[a]/2.f;
|
||||
track->pat_max[a]= dim[a]/2.f;
|
||||
track->pat_min[a]= -dim[a]/2.0f;
|
||||
track->pat_max[a]= dim[a]/2.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,11 +164,11 @@ MovieTrackingTrack *BKE_tracking_add_track(MovieTracking *tracking, float x, flo
|
||||
/* XXX: not very nice to have such check here, but it will prevent
|
||||
complaints about bad default settings for new markers */
|
||||
if(tracking->settings.tracker==TRACKER_SAD) {
|
||||
pat[0]= 8.f;
|
||||
pat[1]= 8.f;
|
||||
pat[0]= 8.0f;
|
||||
pat[1]= 8.0f;
|
||||
|
||||
search[0]= 32.f;
|
||||
search[1]= 32.f;
|
||||
search[0]= 32.0f;
|
||||
search[1]= 32.0f;
|
||||
}
|
||||
|
||||
pat[0] /= (float)width;
|
||||
@ -478,6 +479,8 @@ typedef struct TrackContext {
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
#ifdef WITH_LIBMV
|
||||
float keyframed_pos[2];
|
||||
|
||||
/* ** KLT tracker ** */
|
||||
struct libmv_RegionTracker *region_tracker;
|
||||
float *patch; /* keyframed patch */
|
||||
@ -670,16 +673,12 @@ static ImBuf *get_area_imbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieTracki
|
||||
w= (x2-x1)|1;
|
||||
h= (y2-y1)|1;
|
||||
|
||||
/* happens due to rounding issues */
|
||||
if(x1+w<=x) x1++;
|
||||
if(y1+h<=y) y1++;
|
||||
|
||||
tmpibuf= IMB_allocImBuf(w+margin*2, h+margin*2, 32, IB_rect);
|
||||
IMB_rectcpy(tmpibuf, ibuf, 0, 0, x1-margin, y1-margin, w+margin*2, h+margin*2);
|
||||
|
||||
if(pos != NULL) {
|
||||
pos[0]= x-x1+(mpos[0]*ibuf->x-x)+margin;
|
||||
pos[1]= y-y1+(mpos[1]*ibuf->y-y)+margin;
|
||||
pos[0]= mpos[0]*ibuf->x-x1+margin;
|
||||
pos[1]= mpos[1]*ibuf->y-y1+margin;
|
||||
}
|
||||
|
||||
if(origin != NULL) {
|
||||
@ -731,7 +730,7 @@ static float *get_search_floatbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieT
|
||||
|
||||
*fp= 0.2126*rrgbf[0] + 0.7152*rrgbf[1] + 0.0722*rrgbf[2];
|
||||
} else {
|
||||
char *rrgb= (char*)tmpibuf->rect + pixel*4;
|
||||
unsigned char *rrgb= (unsigned char*)tmpibuf->rect + pixel*4;
|
||||
|
||||
*fp= (0.2126*rrgb[0] + 0.7152*rrgb[1] + 0.0722*rrgb[2])/255.0f;
|
||||
}
|
||||
@ -986,7 +985,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
double x1, y1, x2, y2;
|
||||
ImBuf *ibuf= NULL;
|
||||
MovieTrackingMarker marker_new, *marker_keyed;
|
||||
int onbound= 0;
|
||||
int onbound= 0, coords_correct= 0;
|
||||
|
||||
if(!context->settings.adjframes) need_readjust= context->first_time;
|
||||
else need_readjust= context->frames%context->settings.adjframes == 0;
|
||||
@ -998,8 +997,8 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
margin[1]= MAX2(margin[1], (float)context->settings.margin / ibuf_new->y);
|
||||
|
||||
/* do not track markers which are too close to boundary */
|
||||
if(marker->pos[0]<margin[0] || marker->pos[0]>1.f-margin[0] ||
|
||||
marker->pos[1]<margin[1] || marker->pos[1]>1.f-margin[1]) {
|
||||
if(marker->pos[0]<margin[0] || marker->pos[0]>1.0f-margin[0] ||
|
||||
marker->pos[1]<margin[1] || marker->pos[1]>1.0f-margin[1]) {
|
||||
onbound= 1;
|
||||
}
|
||||
else if(context->settings.tracker==TRACKER_KLT) {
|
||||
@ -1013,18 +1012,18 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
if(track_context->patch)
|
||||
MEM_freeN(track_context->patch);
|
||||
|
||||
track_context->patch= get_search_floatbuf(ibuf, track, marker_keyed, &width, &height, pos, origin);
|
||||
track_context->patch= get_search_floatbuf(ibuf, track, marker_keyed, &width, &height, track_context->keyframed_pos, origin);
|
||||
|
||||
IMB_freeImBuf(ibuf);
|
||||
}
|
||||
|
||||
patch_new= get_search_floatbuf(ibuf_new, track, marker, &width, &height, pos, origin);
|
||||
|
||||
x1= pos[0];
|
||||
y1= pos[1];
|
||||
x1= track_context->keyframed_pos[0];
|
||||
y1= track_context->keyframed_pos[1];
|
||||
|
||||
x2= x1;
|
||||
y2= y1;
|
||||
x2= pos[0];
|
||||
y2= pos[1];
|
||||
|
||||
wndx= (int)((track->pat_max[0]-track->pat_min[0])*ibuf_new->x)/2;
|
||||
wndy= (int)((track->pat_max[1]-track->pat_min[1])*ibuf_new->y)/2;
|
||||
@ -1100,7 +1099,8 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
MEM_freeN(image_new);
|
||||
}
|
||||
|
||||
if(tracked || !context->disable_failed) {
|
||||
coords_correct= !isnan(x2) && !isnan(y2) && finite(x2) && finite(y2);
|
||||
if(coords_correct && (tracked || !context->disable_failed)) {
|
||||
if(context->first_time) {
|
||||
int prevframe;
|
||||
|
||||
@ -1113,6 +1113,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
marker_new= *marker;
|
||||
marker_new.framenr= prevframe;
|
||||
|
||||
marker_new.flag&= ~MARKER_GRAPH_SEL;
|
||||
marker_new.flag|= MARKER_DISABLED;
|
||||
|
||||
#pragma omp critical
|
||||
@ -1201,7 +1202,7 @@ static int retrieve_libmv_reconstruct(MovieTracking *tracking, struct libmv_Reco
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
|
||||
MovieReconstructedCamera *reconstructed;
|
||||
float origin[3]= {0.0f, 0.f, 0.0f};
|
||||
float origin[3]= {0.0f, 0.0f, 0.0f};
|
||||
int ok= 1;
|
||||
|
||||
track= tracking->tracks.first;
|
||||
@ -1295,7 +1296,7 @@ float BKE_tracking_solve_reconstruction(MovieTracking *tracking, int width, int
|
||||
#if WITH_LIBMV
|
||||
{
|
||||
MovieTrackingCamera *camera= &tracking->camera;
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
struct libmv_Tracks *tracks= create_libmv_tracks(tracking, width, height*aspy);
|
||||
struct libmv_Reconstruction *reconstruction = libmv_solveReconstruction(tracks,
|
||||
tracking->settings.keyframe1, tracking->settings.keyframe2,
|
||||
@ -1307,7 +1308,7 @@ float BKE_tracking_solve_reconstruction(MovieTracking *tracking, int width, int
|
||||
tracking->reconstruction.error= error;
|
||||
|
||||
if(!retrieve_libmv_reconstruct(tracking, reconstruction))
|
||||
error= -1.f;
|
||||
error= -1.0f;
|
||||
|
||||
libmv_destroyReconstruction(reconstruction);
|
||||
libmv_tracksDestroy(tracks);
|
||||
@ -1441,7 +1442,7 @@ void BKE_tracking_projection_matrix(MovieTracking *tracking, int framenr, int wi
|
||||
float lens= tracking->camera.focal*tracking->camera.sensor_width/(float)winx;
|
||||
float viewfac, pixsize, left, right, bottom, top, clipsta, clipend;
|
||||
float winmat[4][4];
|
||||
float ycor= 1.f/tracking->camera.pixel_aspect;
|
||||
float ycor= 1.0f/tracking->camera.pixel_aspect;
|
||||
|
||||
clipsta= 0.1f;
|
||||
clipend= 1000.0f;
|
||||
@ -1475,7 +1476,7 @@ void BKE_tracking_apply_intrinsics(MovieTracking *tracking, float co[2], float n
|
||||
|
||||
#ifdef WITH_LIBMV
|
||||
double x, y;
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
|
||||
/* normalize coords */
|
||||
x= (co[0]-camera->principal[0]) / camera->focal;
|
||||
@ -1496,7 +1497,7 @@ void BKE_tracking_invert_intrinsics(MovieTracking *tracking, float co[2], float
|
||||
|
||||
#ifdef WITH_LIBMV
|
||||
double x= co[0], y= co[1];
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
|
||||
libmv_InvertIntrinsics(camera->focal, camera->principal[0], camera->principal[1] * aspy,
|
||||
camera->k1, camera->k2, camera->k3, x, y, &x, &y);
|
||||
@ -1651,8 +1652,8 @@ static int stabilization_median_point(MovieTracking *tracking, int framenr, floa
|
||||
track= track->next;
|
||||
}
|
||||
|
||||
median[0]= (max[0]+min[0])/2.f;
|
||||
median[1]= (max[1]+min[1])/2.f;
|
||||
median[0]= (max[0]+min[0])/2.0f;
|
||||
median[1]= (max[1]+min[1])/2.0f;
|
||||
|
||||
return ok;
|
||||
}
|
||||
@ -1662,8 +1663,8 @@ static void calculate_stabdata(MovieTracking *tracking, int framenr, float width
|
||||
{
|
||||
MovieTrackingStabilization *stab= &tracking->stabilization;
|
||||
|
||||
*scale= (stab->scale-1.f)*stab->scaleinf+1.f;
|
||||
*angle= 0.f;
|
||||
*scale= (stab->scale-1.0f)*stab->scaleinf+1.0f;
|
||||
*angle= 0.0f;
|
||||
|
||||
loc[0]= (firstmedian[0]-median[0])*width*(*scale);
|
||||
loc[1]= (firstmedian[1]-median[1])*height*(*scale);
|
||||
@ -1673,7 +1674,7 @@ static void calculate_stabdata(MovieTracking *tracking, int framenr, float width
|
||||
if(stab->rot_track && stab->rotinf) {
|
||||
MovieTrackingMarker *marker;
|
||||
float a[2], b[2];
|
||||
float x0= (float)width/2.f, y0= (float)height/2.f;
|
||||
float x0= (float)width/2.0f, y0= (float)height/2.0f;
|
||||
float x= median[0]*width, y= median[1]*height;
|
||||
|
||||
marker= BKE_tracking_get_marker(stab->rot_track, 1);
|
||||
@ -1705,10 +1706,10 @@ static float stabilization_auto_scale_factor(MovieTracking *tracking, int width,
|
||||
|
||||
if(stabilization_median_point(tracking, 1, firstmedian)) {
|
||||
int sfra= INT_MAX, efra= INT_MIN, cfra;
|
||||
float delta[2]= {0.f, 0.f}, scalex= 1.f, scaley= 1.f;
|
||||
float delta[2]= {0.0f, 0.0f}, scalex= 1.0f, scaley= 1.0f;
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
stab->scale= 1.f;
|
||||
stab->scale= 1.0f;
|
||||
|
||||
track= tracking->tracks.first;
|
||||
while(track) {
|
||||
@ -1731,30 +1732,30 @@ static float stabilization_auto_scale_factor(MovieTracking *tracking, int width,
|
||||
calculate_stabdata(tracking, cfra, width, height, firstmedian, median,
|
||||
loc, &scale, &angle);
|
||||
|
||||
if(angle==0.f) {
|
||||
if(angle==0.0f) {
|
||||
loc[0]= fabsf(loc[0]);
|
||||
loc[1]= fabsf(loc[1]);
|
||||
|
||||
delta[0]= MAX2(delta[0], loc[0]);
|
||||
delta[1]= MAX2(delta[1], loc[1]);
|
||||
|
||||
near[0]= MIN2(median[0], 1.f-median[0]);
|
||||
near[1]= MIN2(median[1], 1.f-median[1]);
|
||||
near[0]= MAX2(near[0], 0.05);
|
||||
near[1]= MAX2(near[1], 0.05);
|
||||
near[0]= MIN2(median[0], 1.0f-median[0]);
|
||||
near[1]= MIN2(median[1], 1.0f-median[1]);
|
||||
near[0]= MAX2(near[0], 0.05f);
|
||||
near[1]= MAX2(near[1], 0.05f);
|
||||
|
||||
scalex= 1.f+delta[0]/(near[0]*width);
|
||||
scaley= 1.f+delta[1]/(near[1]*height);
|
||||
scalex= 1.0f+delta[0]/(near[0]*width);
|
||||
scaley= 1.0f+delta[1]/(near[1]*height);
|
||||
} else {
|
||||
int i;
|
||||
float mat[4][4];
|
||||
float points[4][2]={{0.f, 0.f}, {0.f, height}, {width, height}, {width, 0.f}};
|
||||
float points[4][2]={{0.0f, 0.0f}, {0.0f, height}, {width, height}, {width, 0.0f}};
|
||||
|
||||
BKE_tracking_stabdata_to_mat4(width, height, loc, scale, angle, mat);
|
||||
|
||||
for(i= 0; i<4; i++) {
|
||||
int j;
|
||||
float a[3]= {0.f}, b[3]= {0.f};
|
||||
float a[3]= {0.0f, 0.0f, 0.0f}, b[3]= {0.0f, 0.0f, 0.0f};
|
||||
|
||||
copy_v3_v3(a, points[i]);
|
||||
copy_v3_v3(b, points[(i+1)%4]);
|
||||
@ -1763,13 +1764,13 @@ static float stabilization_auto_scale_factor(MovieTracking *tracking, int width,
|
||||
mul_m4_v3(mat, b);
|
||||
|
||||
for(j= 0; j<4; j++) {
|
||||
float point[3]= {points[j][0], points[j][1], 0.f};
|
||||
float point[3]= {points[j][0], points[j][1], 0.0f};
|
||||
float v1[3], v2[3];
|
||||
|
||||
sub_v3_v3v3(v1, b, a);
|
||||
sub_v3_v3v3(v2, point, a);
|
||||
|
||||
if(cross_v2v2(v1, v2) >= 0.f) {
|
||||
if(cross_v2v2(v1, v2) >= 0.0f) {
|
||||
float dist= dist_to_line_v2(point, a, b);
|
||||
if(i%2==0) {
|
||||
scalex= MAX2(scalex, (width+2*dist)/width);
|
||||
@ -1784,10 +1785,10 @@ static float stabilization_auto_scale_factor(MovieTracking *tracking, int width,
|
||||
|
||||
stab->scale= MAX2(scalex, scaley);
|
||||
|
||||
if(stab->maxscale>0.f)
|
||||
if(stab->maxscale>0.0f)
|
||||
stab->scale= MIN2(stab->scale, stab->maxscale);
|
||||
} else {
|
||||
stab->scale= 1.f;
|
||||
stab->scale= 1.0f;
|
||||
}
|
||||
|
||||
stab->ok= 1;
|
||||
@ -1811,7 +1812,7 @@ static ImBuf* stabilize_alloc_ibuf(ImBuf *cacheibuf, ImBuf *srcibuf, int fill)
|
||||
|
||||
if(cacheibuf) {
|
||||
if(fill) {
|
||||
float col[4]= {0.f, 0.f, 0.f, 0.f};
|
||||
float col[4]= {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
IMB_rectfill(cacheibuf, col);
|
||||
}
|
||||
}
|
||||
@ -1830,8 +1831,8 @@ void BKE_tracking_stabilization_data(MovieTracking *tracking, int framenr, int w
|
||||
|
||||
if((stab->flag&TRACKING_2D_STABILIZATION)==0) {
|
||||
zero_v2(loc);
|
||||
*scale= 1.f;
|
||||
*angle= 0.f;
|
||||
*scale= 1.0f;
|
||||
*angle= 0.0f;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1840,7 +1841,7 @@ void BKE_tracking_stabilization_data(MovieTracking *tracking, int framenr, int w
|
||||
stabilization_median_point(tracking, framenr, median);
|
||||
|
||||
if((stab->flag&TRACKING_AUTOSCALE)==0)
|
||||
stab->scale= 1.f;
|
||||
stab->scale= 1.0f;
|
||||
|
||||
if(!stab->ok) {
|
||||
if(stab->flag&TRACKING_AUTOSCALE)
|
||||
@ -1854,8 +1855,8 @@ void BKE_tracking_stabilization_data(MovieTracking *tracking, int framenr, int w
|
||||
}
|
||||
} else {
|
||||
zero_v2(loc);
|
||||
*scale= 1.f;
|
||||
*angle= 0.f;
|
||||
*scale= 1.0f;
|
||||
*angle= 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1871,7 +1872,7 @@ ImBuf *BKE_tracking_stabilize(MovieTracking *tracking, int framenr, ImBuf *ibuf,
|
||||
|
||||
if((stab->flag&TRACKING_2D_STABILIZATION)==0) {
|
||||
if(loc) zero_v2(loc);
|
||||
if(scale) *scale= 1.f;
|
||||
if(scale) *scale= 1.0f;
|
||||
|
||||
return ibuf;
|
||||
}
|
||||
@ -1881,7 +1882,7 @@ ImBuf *BKE_tracking_stabilize(MovieTracking *tracking, int framenr, ImBuf *ibuf,
|
||||
tmpibuf= stabilize_alloc_ibuf(NULL, ibuf, 1);
|
||||
|
||||
/* scale would be handled by matrix transformation when angle is non-zero */
|
||||
if(tscale!=1.f && tangle==0.f) {
|
||||
if(tscale!=1.0f && tangle==0.0f) {
|
||||
ImBuf *scaleibuf;
|
||||
|
||||
stabilization_auto_scale_factor(tracking, width, height);
|
||||
@ -1895,7 +1896,7 @@ ImBuf *BKE_tracking_stabilize(MovieTracking *tracking, int framenr, ImBuf *ibuf,
|
||||
ibuf= scaleibuf;
|
||||
}
|
||||
|
||||
if(tangle==0.f) {
|
||||
if(tangle==0.0f) {
|
||||
/* if angle is zero, then it's much faster to use rect copy
|
||||
but could be issues with subpixel precisions */
|
||||
IMB_rectcpy(tmpibuf, ibuf, tloc[0]-(tscale-1.0f)*width/2.0f, tloc[1]-(tscale-1.0f)*height/2.0f, 0, 0, ibuf->x, ibuf->y);
|
||||
@ -1941,8 +1942,8 @@ void BKE_tracking_stabdata_to_mat4(int width, int height, float loc[2], float sc
|
||||
unit_m4(cmat);
|
||||
|
||||
/* image center as rotation center */
|
||||
cmat[3][0]= (float)width/2.f;
|
||||
cmat[3][1]= (float)height/2.f;
|
||||
cmat[3][0]= (float)width/2.0f;
|
||||
cmat[3][1]= (float)height/2.0f;
|
||||
invert_m4_m4(icmat, cmat);
|
||||
|
||||
size_to_mat4(smat, svec); /* scale matrix */
|
||||
@ -1978,7 +1979,7 @@ MovieDistortion *BKE_tracking_distortion_copy(MovieDistortion *distortion)
|
||||
void BKE_tracking_distortion_update(MovieDistortion *distortion, MovieTracking *tracking, int width, int height)
|
||||
{
|
||||
MovieTrackingCamera *camera= &tracking->camera;
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
|
||||
#ifdef WITH_LIBMV
|
||||
if(!distortion->intrinsics) {
|
||||
|
@ -2270,7 +2270,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
|
||||
|
||||
static void write_libraries(WriteData *wd, Main *main)
|
||||
{
|
||||
ListBase *lbarray[30];
|
||||
ListBase *lbarray[ID_NUMTYPES];
|
||||
ID *id;
|
||||
int a, tot, foundone;
|
||||
|
||||
|
@ -842,6 +842,9 @@ void ui_theme_init_default(void)
|
||||
SETCOL(btheme->tclip.path_after, 0x00, 0x00, 0xff, 255);
|
||||
SETCOL(btheme->tclip.grid, 0x5e, 0x5e, 0x5e, 255);
|
||||
SETCOL(btheme->tclip.cframe, 0x60, 0xc0, 0x40, 255);
|
||||
SETCOL(btheme->tclip.handle_vertex, 0x00, 0x00, 0x00, 0xff);
|
||||
SETCOL(btheme->tclip.handle_vertex_select, 0xff, 0xff, 0, 0xff);
|
||||
btheme->tclip.handle_vertex_size= 4;
|
||||
}
|
||||
|
||||
|
||||
@ -1673,6 +1676,9 @@ void init_userdef_do_versions(void)
|
||||
SETCOL(btheme->tclip.path_after, 0x00, 0x00, 0xff, 255);
|
||||
SETCOL(btheme->tclip.grid, 0x5e, 0x5e, 0x5e, 255);
|
||||
SETCOL(btheme->tclip.cframe, 0x60, 0xc0, 0x40, 255);
|
||||
SETCOL(btheme->tclip.handle_vertex, 0x00, 0x00, 0x00, 0xff);
|
||||
SETCOL(btheme->tclip.handle_vertex_select, 0xff, 0xff, 0, 0xff);
|
||||
btheme->tclip.handle_vertex_size= 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,13 +40,15 @@ set(INC_SYS
|
||||
|
||||
set(SRC
|
||||
space_clip.c
|
||||
clip_draw_graph.c
|
||||
clip_draw_main.c
|
||||
clip_draw.c
|
||||
clip_toolbar.c
|
||||
clip_ops.c
|
||||
tracking_ops.c
|
||||
clip_graph_ops.c
|
||||
clip_graph_draw.c
|
||||
clip_editor.c
|
||||
clip_buttons.c
|
||||
clip_utils.c
|
||||
tracking_ops.c
|
||||
|
||||
clip_intern.h
|
||||
)
|
||||
|
110
source/blender/editors/space_clip/clip_draw_main.c → source/blender/editors/space_clip/clip_draw.c
110
source/blender/editors/space_clip/clip_draw_main.c → source/blender/editors/space_clip/clip_draw.c
@ -25,7 +25,7 @@
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/clip_draw_main.c
|
||||
/** \file blender/editors/space_clip/clip_draw.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
@ -170,26 +170,55 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
|
||||
glRecti(x, 0, x+framelen, 8);
|
||||
|
||||
/* frame number */
|
||||
BLF_size(fontid, 11.f, U.dpi);
|
||||
BLF_size(fontid, 11.0f, U.dpi);
|
||||
BLI_snprintf(str, sizeof(str), "%d", sc->user.framenr);
|
||||
fontsize= BLF_height(fontid, str);
|
||||
fontwidth= BLF_width(fontid, str);
|
||||
|
||||
if(x+fontwidth+6.f<=ar->winx) {
|
||||
glRecti(x, 8.f, x+fontwidth+6.f, 12.f+fontsize);
|
||||
if(x+fontwidth+6.0f<=ar->winx) {
|
||||
glRecti(x, 8, x+fontwidth+6, 12+fontsize);
|
||||
|
||||
UI_ThemeColor(TH_TEXT);
|
||||
BLF_position(fontid, x+2.f, 10.f, 0.f);
|
||||
BLF_position(fontid, x+2.0f, 10.0f, 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
} else {
|
||||
glRecti(x+framelen, 8.f, x+framelen-fontwidth-6.f, 12.f+fontsize);
|
||||
glRecti(x+framelen, 8.0f, x+framelen-fontwidth-6.0f, 12.0f+fontsize);
|
||||
|
||||
UI_ThemeColor(TH_TEXT);
|
||||
BLF_position(fontid, x-2.f-fontwidth+framelen, 10.f, 0.f);
|
||||
BLF_position(fontid, x-2.0f-fontwidth+framelen, 10.0f, 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_movieclip_notes(SpaceClip *sc, ARegion *ar)
|
||||
{
|
||||
char str[256]= {0};
|
||||
|
||||
if(sc->flag&SC_LOCK_SELECTION)
|
||||
strcpy(str, "Locked");
|
||||
|
||||
if(str[0]) {
|
||||
uiStyle *style= UI_GetStyle();
|
||||
int fontsize, fontwidth;
|
||||
int fontid= style->widget.uifont_id;
|
||||
|
||||
BLF_size(fontid, 11.0f, U.dpi);
|
||||
fontsize= BLF_height(fontid, str);
|
||||
fontwidth= BLF_width(fontid, str);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
glColor4f(0.0f, 0.0f, 0.0f, 0.6f);
|
||||
glRecti(0, ar->winy-fontsize-9, fontwidth+12, ar->winy);
|
||||
|
||||
glColor3f(1.0f, 1.0f, 1.0f);
|
||||
BLF_position(fontid, 6.0f, ar->winy-fontsize-5.0f, 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
|
||||
int width, int height, float zoomx, float zoomy)
|
||||
{
|
||||
@ -200,7 +229,7 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
|
||||
glPixelZoom(zoomx*width/ibuf->x, zoomy*height/ibuf->y);
|
||||
|
||||
/* find window pixel coordinates of origin */
|
||||
UI_view2d_to_region_no_clip(&ar->v2d, 0.f, 0.f, &x, &y);
|
||||
UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x, &y);
|
||||
|
||||
if(sc->flag&SC_MUTE_FOOTAGE) {
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
@ -216,7 +245,7 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
|
||||
|
||||
/* draw boundary border for frame if stabilization is enabled */
|
||||
if(sc->flag&SC_SHOW_STABLE && clip->tracking.stabilization.flag&TRACKING_2D_STABILIZATION) {
|
||||
glColor3f(0.f, 0.f, 0.f);
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
glLineStipple(3, 0xaaaa);
|
||||
glEnable(GL_LINE_STIPPLE);
|
||||
glEnable(GL_COLOR_LOGIC_OP);
|
||||
@ -229,10 +258,10 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
|
||||
glMultMatrixf(sc->stabmat);
|
||||
|
||||
glBegin(GL_LINE_LOOP);
|
||||
glVertex2f(0.f, 0.f);
|
||||
glVertex2f(ibuf->x, 0.f);
|
||||
glVertex2f(0.0f, 0.0f);
|
||||
glVertex2f(ibuf->x, 0.0f);
|
||||
glVertex2f(ibuf->x, ibuf->y);
|
||||
glVertex2f(0.f, ibuf->y);
|
||||
glVertex2f(0.0f, ibuf->y);
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
@ -243,7 +272,7 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
|
||||
|
||||
|
||||
/* reset zoom */
|
||||
glPixelZoom(1.f, 1.f);
|
||||
glPixelZoom(1.0f, 1.0f);
|
||||
}
|
||||
|
||||
static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackingTrack *track)
|
||||
@ -492,7 +521,7 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
|
||||
glVertex2f(pos[0], pos[1] + px[1]*7);
|
||||
glEnd();
|
||||
|
||||
glColor3f(0.f, 0.f, 0.f);
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
glLineStipple(3, 0xaaaa);
|
||||
glEnable(GL_LINE_STIPPLE);
|
||||
glEnable(GL_COLOR_LOGIC_OP);
|
||||
@ -597,11 +626,11 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
|
||||
dx= 6.0f/width/sc->zoom;
|
||||
dy= 6.0f/height/sc->zoom;
|
||||
|
||||
patdx= MIN2(dx*2.f/3.f, (track->pat_max[0]-track->pat_min[0])/6.f);
|
||||
patdy= MIN2(dy*2.f/3.f, (track->pat_max[1]-track->pat_min[1])/6.f);
|
||||
patdx= MIN2(dx*2.0f/3.0f, (track->pat_max[0]-track->pat_min[0])/6.0f);
|
||||
patdy= MIN2(dy*2.0f/3.0f, (track->pat_max[1]-track->pat_min[1])/6.0f);
|
||||
|
||||
searchdx= MIN2(dx, (track->search_max[0]-track->search_min[0])/6.f);
|
||||
searchdy= MIN2(dy, (track->search_max[1]-track->search_min[1])/6.f);
|
||||
searchdx= MIN2(dx, (track->search_max[0]-track->search_min[0])/6.0f);
|
||||
searchdy= MIN2(dy, (track->search_max[1]-track->search_min[1])/6.0f);
|
||||
|
||||
px[0]= 1.0f/sc->zoom/width/sc->scale;
|
||||
px[1]= 1.0f/sc->zoom/height/sc->scale;
|
||||
@ -635,8 +664,8 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
|
||||
x= track->search_max[0];
|
||||
y= track->search_min[1];
|
||||
|
||||
tdx= searchdx*2.f;
|
||||
tdy= searchdy*2.f;
|
||||
tdx= searchdx*2.0f;
|
||||
tdy= searchdy*2.0f;
|
||||
|
||||
if(outline) {
|
||||
tdx+= px[0];
|
||||
@ -679,8 +708,8 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
|
||||
x= track->pat_max[0];
|
||||
y= track->pat_min[1];
|
||||
|
||||
tdx= patdx*2.f;
|
||||
tdy= patdy*2.f;
|
||||
tdx= patdx*2.0f;
|
||||
tdy= patdy*2.0f;
|
||||
|
||||
if(outline) {
|
||||
tdx+= px[0];
|
||||
@ -704,14 +733,14 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
|
||||
int width, int height, float zoomx, float zoomy)
|
||||
{
|
||||
char str[128]= {0}, state[64]= {0};
|
||||
float dx= 0.f, dy= 0.f, fontsize, pos[3];
|
||||
float dx= 0.0f, dy= 0.0f, fontsize, pos[3];
|
||||
uiStyle *style= U.uistyles.first;
|
||||
int fontid= style->widget.uifont_id;
|
||||
|
||||
if(!TRACK_VIEW_SELECTED(sc, track))
|
||||
return;
|
||||
|
||||
BLF_size(fontid, 11.f, U.dpi);
|
||||
BLF_size(fontid, 11.0f, U.dpi);
|
||||
fontsize= BLF_height_max(fontid);
|
||||
|
||||
if(marker->flag&MARKER_DISABLED) {
|
||||
@ -732,7 +761,7 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
|
||||
|
||||
pos[0]= (marker_pos[0]+dx)*width;
|
||||
pos[1]= (marker_pos[1]+dy)*height;
|
||||
pos[2]= 0.f;
|
||||
pos[2]= 0.0f;
|
||||
|
||||
mul_m4_v3(sc->stabmat, pos);
|
||||
|
||||
@ -749,19 +778,19 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
|
||||
else
|
||||
BLI_snprintf(str, sizeof(str), "%s", track->name);
|
||||
|
||||
BLF_position(fontid, pos[0], pos[1], 0.f);
|
||||
BLF_position(fontid, pos[0], pos[1], 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
pos[1]-= fontsize;
|
||||
|
||||
if(track->flag&TRACK_HAS_BUNDLE) {
|
||||
BLI_snprintf(str, sizeof(str), "Average error: %.3f", track->error);
|
||||
BLF_position(fontid, pos[0], pos[1], 0.f);
|
||||
BLF_position(fontid, pos[0], pos[1], 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
pos[1]-= fontsize;
|
||||
}
|
||||
|
||||
if(track->flag&TRACK_LOCKED) {
|
||||
BLF_position(fontid, pos[0], pos[1], 0.f);
|
||||
BLF_position(fontid, pos[0], pos[1], 0.0f);
|
||||
BLF_draw(fontid, "locked", 6);
|
||||
}
|
||||
}
|
||||
@ -926,7 +955,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip,
|
||||
glEnable(GL_POINT_SMOOTH);
|
||||
glPointSize(3.0f);
|
||||
|
||||
aspy= 1.f/clip->tracking.camera.pixel_aspect;
|
||||
aspy= 1.0f/clip->tracking.camera.pixel_aspect;
|
||||
BKE_tracking_projection_matrix(tracking, framenr, width, height, mat);
|
||||
|
||||
track= tracking->tracks.first;
|
||||
@ -946,7 +975,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip,
|
||||
|
||||
BKE_tracking_apply_intrinsics(tracking, pos, npos);
|
||||
|
||||
if(npos[0]>=0.f && npos[1]>=0.f && npos[0]<=width && npos[1]<=height*aspy) {
|
||||
if(npos[0]>=0.0f && npos[1]>=0.0f && npos[0]<=width && npos[1]<=height*aspy) {
|
||||
vec[0]= (marker->pos[0]+track->offset[0])*width;
|
||||
vec[1]= (marker->pos[1]+track->offset[1])*height*aspy;
|
||||
|
||||
@ -1008,7 +1037,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
int i, j, a;
|
||||
float pos[2], tpos[2], grid[11][11][2];
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
float dx= (float)width/n, dy= (float)height/n*aspy;
|
||||
|
||||
if(sc->mode!=SC_MODE_DISTORTION)
|
||||
@ -1061,7 +1090,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
pos[0]+= dx;
|
||||
}
|
||||
|
||||
pos[0]= 0.f;
|
||||
pos[0]= 0.0f;
|
||||
pos[1]+= dy;
|
||||
}
|
||||
|
||||
@ -1094,7 +1123,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
pos[1]+= dy;
|
||||
}
|
||||
|
||||
glColor3f(1.f, 0.f, 0.f);
|
||||
glColor3f(1.0f, 0.0f, 0.0f);
|
||||
|
||||
for(i= 0; i<=n; i++) {
|
||||
glBegin(GL_LINE_STRIP);
|
||||
@ -1141,7 +1170,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
npos[1]= stroke->points[i+1].y*height*aspy;
|
||||
|
||||
len= len_v2v2(pos, npos);
|
||||
steps= ceil(len/5.f);
|
||||
steps= ceil(len/5.0f);
|
||||
|
||||
/* we want to distort only long straight lines */
|
||||
if(stroke->totpoints==2) {
|
||||
@ -1150,7 +1179,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
}
|
||||
|
||||
sub_v2_v2v2(dpos, npos, pos);
|
||||
mul_v2_fl(dpos, 1.f/steps);
|
||||
mul_v2_fl(dpos, 1.0f/steps);
|
||||
|
||||
for(j= 0; j<=steps; j++) {
|
||||
BKE_tracking_apply_intrinsics(tracking, pos, tpos);
|
||||
@ -1177,8 +1206,8 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid
|
||||
layer= layer->next;
|
||||
}
|
||||
|
||||
glLineWidth(1.f);
|
||||
glPointSize(1.f);
|
||||
glLineWidth(1.0f);
|
||||
glPointSize(1.0f);
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
@ -1205,8 +1234,8 @@ void draw_clip_main(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
BKE_tracking_stabdata_to_mat4(width, height, sc->loc, sc->scale, sc->angle, sc->stabmat);
|
||||
|
||||
unit_m4(smat);
|
||||
smat[0][0]= 1.f/width;
|
||||
smat[1][1]= 1.f/height;
|
||||
smat[0][0]= 1.0f/width;
|
||||
smat[1][1]= 1.0f/height;
|
||||
invert_m4_m4(ismat, smat);
|
||||
|
||||
mul_serie_m4(sc->unistabmat, smat, sc->stabmat, ismat, NULL, NULL, NULL, NULL, NULL);
|
||||
@ -1214,7 +1243,7 @@ void draw_clip_main(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
ibuf= ED_space_clip_get_buffer(sc);
|
||||
|
||||
zero_v2(sc->loc);
|
||||
sc->scale= 1.f;
|
||||
sc->scale= 1.0f;
|
||||
unit_m4(sc->stabmat);
|
||||
unit_m4(sc->unistabmat);
|
||||
}
|
||||
@ -1228,6 +1257,7 @@ void draw_clip_main(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
}
|
||||
|
||||
draw_movieclip_cache(sc, ar, clip, scene);
|
||||
draw_movieclip_notes(sc, ar);
|
||||
}
|
||||
|
||||
/* draw grease pencil */
|
@ -53,6 +53,8 @@
|
||||
|
||||
#include "UI_view2d.h"
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
int ED_space_clip_poll(bContext *C)
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
@ -139,7 +141,7 @@ void ED_space_clip_aspect(SpaceClip *sc, float *aspx, float *aspy)
|
||||
if(clip)
|
||||
BKE_movieclip_aspect(clip, aspx, aspy);
|
||||
else
|
||||
*aspx= *aspy= 1.f;
|
||||
*aspx= *aspy= 1.0f;
|
||||
}
|
||||
|
||||
void ED_clip_update_frame(const Main *mainp, int cfra)
|
||||
@ -184,7 +186,7 @@ static int selected_boundbox(SpaceClip *sc, float min[2], float max[2])
|
||||
|
||||
pos[0]= (marker->pos[0]+track->offset[0])*width;
|
||||
pos[1]= (marker->pos[1]+track->offset[1])*height;
|
||||
pos[2]= 0.f;
|
||||
pos[2]= 0.0f;
|
||||
|
||||
mul_v3_m4v3(pos, sc->stabmat, pos);
|
||||
|
||||
@ -202,29 +204,31 @@ static int selected_boundbox(SpaceClip *sc, float min[2], float max[2])
|
||||
|
||||
void ED_clip_view_selection(SpaceClip *sc, ARegion *ar, int fit)
|
||||
{
|
||||
int w, h, width, height, frame_width, frame_height;
|
||||
float min[2], max[2], aspx, aspy;
|
||||
int w, h, frame_width, frame_height;
|
||||
float min[2], max[2];
|
||||
|
||||
ED_space_clip_size(sc, &frame_width, &frame_height);
|
||||
ED_space_clip_aspect(sc, &aspx, &aspy);
|
||||
|
||||
if(frame_width==0 || frame_height==0) return;
|
||||
|
||||
width= ar->winrct.xmax - ar->winrct.xmin + 1;
|
||||
height= ar->winrct.ymax - ar->winrct.ymin + 1;
|
||||
if(!selected_boundbox(sc, min, max))
|
||||
return;
|
||||
|
||||
if(!selected_boundbox(sc, min, max)) return;
|
||||
/* center view */
|
||||
clip_view_center_to_point(sc, (max[0]+min[0])/(2*frame_width), (max[1]+min[1])/(2*frame_height));
|
||||
|
||||
w= max[0]-min[0];
|
||||
h= max[1]-min[1];
|
||||
|
||||
/* center view */
|
||||
sc->xof= ((float)(max[0]+min[0]-frame_width))/2*aspx;
|
||||
sc->yof= ((float)(max[1]+min[1]-frame_height))/2*aspy;
|
||||
|
||||
/* set zoom to see all selection */
|
||||
if(w>0 && h>0) {
|
||||
float zoomx, zoomy, newzoom;
|
||||
int width, height;
|
||||
float zoomx, zoomy, newzoom, aspx, aspy;
|
||||
|
||||
ED_space_clip_aspect(sc, &aspx, &aspy);
|
||||
|
||||
width= ar->winrct.xmax - ar->winrct.xmin + 1;
|
||||
height= ar->winrct.ymax - ar->winrct.ymin + 1;
|
||||
|
||||
zoomx= (float)width/w/aspx;
|
||||
zoomy= (float)height/h/aspy;
|
||||
@ -242,7 +246,7 @@ void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2])
|
||||
|
||||
if(sc->user.render_flag&MCLIP_PROXY_RENDER_UNDISTORT) {
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
float aspy= 1.f/clip->tracking.camera.pixel_aspect;
|
||||
float aspy= 1.0f/clip->tracking.camera.pixel_aspect;
|
||||
int width, height;
|
||||
|
||||
ED_space_clip_size(sc, &width, &height);
|
||||
@ -261,7 +265,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
int sx, sy, width, height;
|
||||
float zoomx, zoomy, pos[3]={0.f, 0.f, 0.f}, imat[4][4];
|
||||
float zoomx, zoomy, pos[3]={0.0f, 0.0f, 0.0f}, imat[4][4];
|
||||
|
||||
ED_space_clip_zoom(sc, ar, &zoomx, &zoomy);
|
||||
ED_space_clip_size(sc, &width, &height);
|
||||
@ -280,7 +284,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y
|
||||
if(sc->user.render_flag&MCLIP_PROXY_RENDER_UNDISTORT) {
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
float aspy= 1.f/tracking->camera.pixel_aspect;
|
||||
float aspy= 1.0f/tracking->camera.pixel_aspect;
|
||||
float tmp[2]= {*xr*width, *yr*height*aspy};
|
||||
|
||||
BKE_tracking_apply_intrinsics(tracking, tmp, tmp);
|
||||
|
@ -25,7 +25,7 @@
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/clip_draw_graph.c
|
||||
/** \file blender/editors/space_clip/clip_graph_draw.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
@ -58,6 +58,34 @@
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
static void draw_curve_knot(float x, float y, float xscale, float yscale, float hsize)
|
||||
{
|
||||
static GLuint displist=0;
|
||||
|
||||
/* initialise round circle shape */
|
||||
if (displist == 0) {
|
||||
GLUquadricObj *qobj;
|
||||
|
||||
displist= glGenLists(1);
|
||||
glNewList(displist, GL_COMPILE);
|
||||
|
||||
qobj= gluNewQuadric();
|
||||
gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
|
||||
gluDisk(qobj, 0, 0.7, 8, 1);
|
||||
gluDeleteQuadric(qobj);
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
glTranslatef(x, y, 0.0f);
|
||||
glScalef(1.0f/xscale*hsize, 1.0f/yscale*hsize, 1.0f);
|
||||
glCallList(displist);
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
static void draw_graph_cfra(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
{
|
||||
View2D *v2d= &ar->v2d;
|
||||
@ -104,70 +132,93 @@ static void draw_graph_cfra(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
|
||||
/* draw current frame number - black text */
|
||||
UI_ThemeColor(TH_TEXT);
|
||||
BLF_position(fontid, x-5, y+2, 0.f);
|
||||
BLF_position(fontid, x-5, y+2, 0.0f);
|
||||
BLF_draw(fontid, str, strlen(str));
|
||||
|
||||
/* restore view transform */
|
||||
glScalef(xscale, 1.0, 1.0);
|
||||
}
|
||||
|
||||
static void draw_clip_tracks_curves(SpaceClip *sc)
|
||||
static void tracking_segment_point_cb(void *UNUSED(userdata), MovieTrackingTrack *UNUSED(track),
|
||||
MovieTrackingMarker *marker, int UNUSED(coord), float val)
|
||||
{
|
||||
glVertex2f(marker->framenr, val);
|
||||
}
|
||||
|
||||
void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord)
|
||||
{
|
||||
static float colors[2][3] = {{1.0f, 0.0f, 0.0f},
|
||||
{0.0f, 1.0f, 0.0f}};
|
||||
float col[4];
|
||||
|
||||
copy_v3_v3(col, colors[coord]);
|
||||
|
||||
if(track==userdata) {
|
||||
col[3]= 1.0f;
|
||||
glLineWidth(2.0f);
|
||||
} else {
|
||||
col[3]= 0.5f;
|
||||
glLineWidth(1.0f);
|
||||
}
|
||||
|
||||
glColor4fv(col);
|
||||
|
||||
glBegin(GL_LINE_STRIP);
|
||||
}
|
||||
|
||||
void tracking_segment_end_cb(void *UNUSED(userdata))
|
||||
{
|
||||
glEnd();
|
||||
|
||||
glLineWidth(1.0f);
|
||||
}
|
||||
|
||||
static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track,
|
||||
MovieTrackingMarker *marker, int UNUSED(coord), float val)
|
||||
{
|
||||
struct { MovieTrackingTrack *act_track; int sel; float xscale, yscale, hsize; } *data = userdata;
|
||||
int sel= 0;
|
||||
|
||||
if(track!=data->act_track)
|
||||
return;
|
||||
|
||||
sel= (marker->flag&MARKER_GRAPH_SEL) ? 1 : 0;
|
||||
|
||||
if(sel == data->sel) {
|
||||
if(sel) UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
|
||||
else UI_ThemeColor(TH_HANDLE_VERTEX);
|
||||
|
||||
draw_curve_knot(marker->framenr, val, data->xscale, data->yscale, data->hsize);
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_clip_tracks_curves(View2D *v2d, SpaceClip *sc)
|
||||
{
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
int size[2];
|
||||
int width, height;
|
||||
struct { MovieTrackingTrack *act_track; int sel; float xscale, yscale, hsize; } userdata;
|
||||
|
||||
static float colors[2][3] = {{1.f, 0.f, 0.f},
|
||||
{0.f, 1.f, 0.f}};
|
||||
BKE_movieclip_get_size(clip, &sc->user, &width, &height);
|
||||
|
||||
|
||||
BKE_movieclip_get_size(clip, &sc->user, &size[0], &size[1]);
|
||||
|
||||
if(!size[0] || !size[1])
|
||||
if(!width || !height)
|
||||
return;
|
||||
|
||||
track= tracking->tracks.first;
|
||||
while(track) {
|
||||
if(TRACK_VIEW_SELECTED(sc, track)) {
|
||||
int coord;
|
||||
/* non-selected knot handles */
|
||||
userdata.hsize= UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE);
|
||||
userdata.sel= 0;
|
||||
userdata.act_track= clip->tracking.act_track;
|
||||
UI_view2d_getscale(v2d, &userdata.xscale, &userdata.yscale);
|
||||
clip_graph_tracking_values_iterate(sc, &userdata, tracking_segment_knot_cb, NULL, NULL);
|
||||
|
||||
for(coord= 0; coord<2; coord++) {
|
||||
int i, lines= 0, prevfra= 0;
|
||||
float prevval= 0.f;
|
||||
/* draw graph lines */
|
||||
glEnable(GL_BLEND);
|
||||
clip_graph_tracking_values_iterate(sc, tracking->act_track, tracking_segment_point_cb, tracking_segment_start_cb, tracking_segment_end_cb);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
glColor3fv(colors[coord]);
|
||||
|
||||
for(i= 0; i<track->markersnr; i++) {
|
||||
MovieTrackingMarker *marker= &track->markers[i];
|
||||
|
||||
if(marker->flag&MARKER_DISABLED)
|
||||
continue;
|
||||
|
||||
if(lines && marker->framenr!=prevfra+1) {
|
||||
glEnd();
|
||||
lines= 0;
|
||||
}
|
||||
|
||||
if(!lines) {
|
||||
glBegin(GL_LINE_STRIP);
|
||||
lines= 1;
|
||||
prevval= marker->pos[coord];
|
||||
}
|
||||
|
||||
glVertex2f(marker->framenr, (marker->pos[coord] - prevval) * size[coord]);
|
||||
|
||||
prevval= marker->pos[coord];
|
||||
prevfra= marker->framenr;
|
||||
}
|
||||
|
||||
if(lines)
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
/* selected knot handles on top of curves */
|
||||
userdata.sel= 1;
|
||||
clip_graph_tracking_values_iterate(sc, &userdata, tracking_segment_knot_cb, NULL, NULL);
|
||||
}
|
||||
|
||||
static void draw_clip_frame_curves(SpaceClip *sc)
|
||||
@ -177,7 +228,7 @@ static void draw_clip_frame_curves(SpaceClip *sc)
|
||||
MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
|
||||
int i, lines= 0, prevfra= 0;
|
||||
|
||||
glColor3f(0.f, 0.f, 1.f);
|
||||
glColor3f(0.0f, 0.0f, 1.0f);
|
||||
|
||||
for(i= 0; i<reconstruction->camnr; i++) {
|
||||
MovieReconstructedCamera *camera= &reconstruction->cameras[i];
|
||||
@ -213,7 +264,7 @@ void draw_clip_graph(SpaceClip *sc, ARegion *ar, Scene *scene)
|
||||
UI_view2d_grid_free(grid);
|
||||
|
||||
if(sc->flag&SC_SHOW_GRAPH_TRACKS)
|
||||
draw_clip_tracks_curves(sc);
|
||||
draw_clip_tracks_curves(v2d, sc);
|
||||
|
||||
if(sc->flag&SC_SHOW_GRAPH_FRAMES)
|
||||
draw_clip_frame_curves(sc);
|
356
source/blender/editors/space_clip/clip_graph_ops.c
Normal file
356
source/blender/editors/space_clip/clip_graph_ops.c
Normal file
@ -0,0 +1,356 @@
|
||||
/*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2011 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Contributor(s): Blender Foundation,
|
||||
* Sergey Sharybin
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/clip_graph_ops.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
#include "DNA_object_types.h" /* SELECT */
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_listbase.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_movieclip.h"
|
||||
#include "BKE_tracking.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_clip.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
#include "UI_view2d.h"
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
/******************** common graph-editing utilities ********************/
|
||||
|
||||
typedef struct {
|
||||
int action;
|
||||
} SelectUserData;
|
||||
|
||||
static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker)
|
||||
{
|
||||
SelectUserData *data= (SelectUserData *)userdata;
|
||||
|
||||
switch(data->action) {
|
||||
case SEL_SELECT:
|
||||
marker->flag|= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_DESELECT:
|
||||
marker->flag&= ~MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_INVERT:
|
||||
marker->flag^= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/******************** mouse select operator ********************/
|
||||
|
||||
typedef struct {
|
||||
int coord, /* coordinate index of found entuty (0 = X-axis, 1 = Y-axis) */
|
||||
has_prev; /* if there's valid coordinate of previous point of curve segment */
|
||||
|
||||
float min_dist, /* minimal distance between mouse and currently found entuty */
|
||||
mouse_co[2], /* mouse coordinate */
|
||||
prev_co[2], /* coordinate of previeous point of segment */
|
||||
min_co[2]; /* coordinate of entity with minimal distance */
|
||||
|
||||
MovieTrackingTrack *track; /* nearest found track */
|
||||
MovieTrackingMarker *marker; /* nearest found marker */
|
||||
} MouseSelectUserData;
|
||||
|
||||
static void find_nearest_tracking_segment_cb(void *userdata, MovieTrackingTrack *track,
|
||||
MovieTrackingMarker *marker, int coord, float val)
|
||||
{
|
||||
MouseSelectUserData *data= userdata;
|
||||
float co[2]= {marker->framenr, val};
|
||||
|
||||
if(data->has_prev) {
|
||||
float d= dist_to_line_segment_v2(data->mouse_co, data->prev_co, co);
|
||||
|
||||
if(data->track==NULL || d<data->min_dist) {
|
||||
data->track= track;
|
||||
data->min_dist= d;
|
||||
data->coord= coord;
|
||||
copy_v2_v2(data->min_co, co);
|
||||
}
|
||||
}
|
||||
|
||||
data->has_prev= 1;
|
||||
copy_v2_v2(data->prev_co, co);
|
||||
}
|
||||
|
||||
void find_nearest_tracking_segment_end_cb(void *userdata)
|
||||
{
|
||||
MouseSelectUserData *data= userdata;
|
||||
|
||||
data->has_prev= 0;
|
||||
}
|
||||
|
||||
static void find_nearest_tracking_knot_cb(void *userdata, MovieTrackingTrack *track,
|
||||
MovieTrackingMarker *marker, int coord, float val)
|
||||
{
|
||||
MouseSelectUserData *data= userdata;
|
||||
float dx= marker->framenr-data->mouse_co[0], dy= val-data->mouse_co[1];
|
||||
float d= dx*dx+dy*dy;
|
||||
|
||||
if(data->marker==NULL || d<data->min_dist) {
|
||||
float co[2]= {marker->framenr, val};
|
||||
|
||||
data->track= track;
|
||||
data->marker= marker;
|
||||
data->min_dist= d;
|
||||
data->coord= coord;
|
||||
copy_v2_v2(data->min_co, co);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void mouse_select_init_data(MouseSelectUserData *userdata, float *co)
|
||||
{
|
||||
memset(userdata, 0, sizeof(MouseSelectUserData));
|
||||
userdata->min_dist= FLT_MAX;
|
||||
copy_v2_v2(userdata->mouse_co, co);
|
||||
}
|
||||
|
||||
static int mouse_select_knot(bContext *C, float co[2], int extend)
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
View2D *v2d= &ar->v2d;
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
static const int delta= 6;
|
||||
|
||||
if(tracking->act_track) {
|
||||
MouseSelectUserData userdata;
|
||||
|
||||
mouse_select_init_data(&userdata, co);
|
||||
clip_graph_tracking_values_iterate_track(sc, tracking->act_track,
|
||||
&userdata, find_nearest_tracking_knot_cb, NULL, NULL);
|
||||
|
||||
if(userdata.marker) {
|
||||
int x1, y1, x2, y2;
|
||||
|
||||
UI_view2d_view_to_region(v2d, co[0], co[1], &x1, &y1);
|
||||
UI_view2d_view_to_region(v2d, userdata.min_co[0], userdata.min_co[1], &x2, &y2);
|
||||
|
||||
if(abs(x2-x1)<=delta && abs(y2-y1)<=delta) {
|
||||
if(!extend) {
|
||||
SelectUserData selectdata = {SEL_DESELECT};
|
||||
clip_graph_tracking_iterate(sc, &selectdata, toggle_selection_cb);
|
||||
}
|
||||
|
||||
userdata.marker->flag|= MARKER_GRAPH_SEL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mouse_select_curve(bContext *C, float co[2], int extend)
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MouseSelectUserData userdata;
|
||||
|
||||
mouse_select_init_data(&userdata, co);
|
||||
clip_graph_tracking_values_iterate(sc, &userdata, find_nearest_tracking_segment_cb, NULL, find_nearest_tracking_segment_end_cb);
|
||||
|
||||
if(userdata.track) {
|
||||
if(extend) {
|
||||
if(tracking->act_track==userdata.track) {
|
||||
/* currently only single curve can be selected (selected curve represents active track) */
|
||||
tracking->act_track= NULL;
|
||||
}
|
||||
}
|
||||
else if(tracking->act_track!=userdata.track) {
|
||||
MovieTrackingMarker *marker;
|
||||
SelectUserData selectdata = {SEL_DESELECT};
|
||||
|
||||
tracking->act_track= userdata.track;
|
||||
|
||||
/* make active track be centered to screen */
|
||||
marker= BKE_tracking_get_marker(userdata.track, sc->user.framenr);
|
||||
|
||||
clip_view_center_to_point(sc, marker->pos[0], marker->pos[1]);
|
||||
|
||||
/* deselect all knots on newly selected curve */
|
||||
clip_graph_tracking_iterate(sc, &selectdata, toggle_selection_cb);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mouse_select(bContext *C, float co[2], int extend)
|
||||
{
|
||||
int sel= 0;
|
||||
|
||||
/* first try to select knot on selected curves */
|
||||
sel= mouse_select_knot(C, co, extend);
|
||||
|
||||
if(!sel) {
|
||||
/* if there's no close enough knot to mouse osition, select nearest curve */
|
||||
sel= mouse_select_curve(C, co, extend);
|
||||
}
|
||||
|
||||
if(sel)
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int select_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
float co[2];
|
||||
int extend= RNA_boolean_get(op->ptr, "extend");
|
||||
|
||||
RNA_float_get_array(op->ptr, "location", co);
|
||||
|
||||
return mouse_select(C, co, extend);
|
||||
}
|
||||
|
||||
static int select_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
float co[2];
|
||||
|
||||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]);
|
||||
RNA_float_set_array(op->ptr, "location", co);
|
||||
|
||||
return select_exec(C, op);
|
||||
}
|
||||
|
||||
void CLIP_OT_graph_select(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select";
|
||||
ot->description= "Select graph curves";
|
||||
ot->idname= "CLIP_OT_graph_select";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_exec;
|
||||
ot->invoke= select_invoke;
|
||||
ot->poll= ED_space_clip_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX,
|
||||
"Location", "Mouse location to select nearest entity closest to", -100.0f, 100.0f);
|
||||
RNA_def_boolean(ot->srna, "extend", 0,
|
||||
"Extend", "Extend selection rather than clearing the existing selection");
|
||||
}
|
||||
|
||||
/******************** delete curve operator ********************/
|
||||
|
||||
static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
|
||||
if(tracking->act_track)
|
||||
clip_delete_track(C, clip, tracking->act_track);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CLIP_OT_graph_delete_curve(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Delete Curve";
|
||||
ot->description= "Delete selected curves";
|
||||
ot->idname= "CLIP_OT_graph_delete_curve";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= WM_operator_confirm;
|
||||
ot->exec= delete_curve_exec;
|
||||
ot->poll= ED_space_clip_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/******************** delete knot operator ********************/
|
||||
|
||||
static int delete_knot_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
|
||||
if(tracking->act_track) {
|
||||
int a= 0;
|
||||
MovieTrackingTrack *track= tracking->act_track;
|
||||
|
||||
while(a<track->markersnr) {
|
||||
MovieTrackingMarker *marker= &track->markers[a];
|
||||
|
||||
if(marker->flag&MARKER_GRAPH_SEL)
|
||||
clip_delete_marker(C, clip, track, marker);
|
||||
else
|
||||
a++;
|
||||
}
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CLIP_OT_graph_delete_knot(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Delete Knot";
|
||||
ot->description= "Delete curve knots";
|
||||
ot->idname= "CLIP_OT_graph_delete_knot";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= delete_knot_exec;
|
||||
ot->poll= ED_space_clip_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
@ -29,18 +29,35 @@
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
|
||||
#ifndef ED_CLIP_INTERN_H
|
||||
#define ED_CLIP_INTERN_H
|
||||
|
||||
struct bContext;
|
||||
struct ARegion;
|
||||
struct MovieClip;
|
||||
struct MovieTrackingMarker;
|
||||
struct MovieTrackingTrack;
|
||||
struct Scene;
|
||||
struct SpaceClip;
|
||||
struct wmOperatorType;
|
||||
|
||||
/* internal exports only */
|
||||
|
||||
/* clip_buttons.c */
|
||||
void ED_clip_buttons_register(struct ARegionType *art);
|
||||
|
||||
/* clip_draw.c */
|
||||
void draw_clip_main(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
||||
void draw_clip_grease_pencil(struct bContext *C, int onlyv2d);
|
||||
|
||||
/* clip_graph_draw.c */
|
||||
void draw_clip_graph(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
||||
|
||||
/* clip_graph_ops.c */
|
||||
void CLIP_OT_graph_select(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_delete_curve(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_delete_knot(struct wmOperatorType *ot);
|
||||
|
||||
/* clip_ops.c */
|
||||
void CLIP_OT_open(struct wmOperatorType *ot);
|
||||
void CLIP_OT_reload(struct wmOperatorType *ot);
|
||||
@ -56,7 +73,34 @@ void CLIP_OT_change_frame(wmOperatorType *ot);
|
||||
void CLIP_OT_rebuild_proxy(struct wmOperatorType *ot);
|
||||
void CLIP_OT_mode_set(struct wmOperatorType *ot);
|
||||
|
||||
/* clip_toolbar.c */
|
||||
void CLIP_OT_tools(struct wmOperatorType *ot);
|
||||
void CLIP_OT_properties(struct wmOperatorType *ot);
|
||||
void ED_clip_tool_props_register(struct ARegionType *art);
|
||||
|
||||
/* clip_utils.c */
|
||||
void clip_graph_tracking_values_iterate_track(struct SpaceClip *sc, struct MovieTrackingTrack *track, void *userdata,
|
||||
void (*func) (void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, float val),
|
||||
void (*segment_start) (void *userdata, struct MovieTrackingTrack *track, int coord),
|
||||
void (*segment_end) (void *userdata));
|
||||
|
||||
void clip_graph_tracking_values_iterate(struct SpaceClip *sc, void *userdata,
|
||||
void (*func) (void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, float val),
|
||||
void (*segment_start) (void *userdata, struct MovieTrackingTrack *track, int coord),
|
||||
void (*segment_end) (void *userdata));
|
||||
|
||||
void clip_graph_tracking_iterate(struct SpaceClip *sc, void *userdata,
|
||||
void (*func) (void *userdata, struct MovieTrackingMarker *marker));
|
||||
|
||||
void clip_delete_track(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track);
|
||||
void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker);
|
||||
|
||||
void clip_view_center_to_point(struct SpaceClip *sc, float x, float y);
|
||||
|
||||
/* tracking_ops.c */
|
||||
void clip_delete_track(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track);
|
||||
void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker);
|
||||
|
||||
void CLIP_OT_select(struct wmOperatorType *ot);
|
||||
void CLIP_OT_select_all(struct wmOperatorType *ot);
|
||||
void CLIP_OT_select_border(struct wmOperatorType *ot);
|
||||
@ -100,20 +144,4 @@ void CLIP_OT_stabilize_2d_set_rotation(struct wmOperatorType *ot);
|
||||
|
||||
void CLIP_OT_clean_tracks(wmOperatorType *ot);
|
||||
|
||||
/* clip_draw_main.c */
|
||||
void draw_clip_main(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
||||
void draw_clip_grease_pencil(struct bContext *C, int onlyv2d);
|
||||
|
||||
/* clip_draw_graph.c */
|
||||
void draw_clip_graph(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
||||
|
||||
/* clip_buttons.c */
|
||||
void ED_clip_buttons_register(struct ARegionType *art);
|
||||
|
||||
/* clip_toolbar.c */
|
||||
void CLIP_OT_tools(struct wmOperatorType *ot);
|
||||
void CLIP_OT_properties(struct wmOperatorType *ot);
|
||||
void ED_clip_tool_props_register(struct ARegionType *art);
|
||||
|
||||
#endif /* ED_CLIP_INTERN_H */
|
||||
|
||||
|
@ -25,6 +25,10 @@
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/clip_ops.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
@ -62,10 +66,6 @@
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
/** \file blender/editors/space_clip/clip_ops.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
/******************** view navigation utilities *********************/
|
||||
|
||||
static void sclip_zoom_set(SpaceClip *sc, ARegion *ar, float zoom)
|
||||
@ -246,56 +246,6 @@ void CLIP_OT_reload(wmOperatorType *ot)
|
||||
ot->exec= reload_exec;
|
||||
}
|
||||
|
||||
/******************* delete operator *********************/
|
||||
|
||||
#if 0
|
||||
static int unlink_poll(bContext *C)
|
||||
{
|
||||
/* it should be possible to unlink clips if they're lib-linked in... */
|
||||
return CTX_data_edit_movieclip(C) != NULL;
|
||||
}
|
||||
|
||||
static int unlink_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain= CTX_data_main(C);
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
MovieClip *clip= CTX_data_edit_movieclip(C);
|
||||
|
||||
if(!clip) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
/* make the previous text active, if its not there make the next text active */
|
||||
if(sc) {
|
||||
if(clip->id.prev) ED_space_clip_set(C, sc, clip->id.prev);
|
||||
else if(clip->id.next) ED_space_clip_set(C, sc, clip->id.next);
|
||||
}
|
||||
|
||||
unlink_movieclip(bmain, clip);
|
||||
free_libblock(&bmain->movieclip, clip);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_REMOVED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CLIP_OT_unlink(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Unlink";
|
||||
ot->idname= "CLIP_OT_unlink";
|
||||
ot->description= "Unlink active clip data block";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= unlink_exec;
|
||||
ot->invoke= WM_operator_confirm;
|
||||
ot->poll= unlink_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_UNDO;
|
||||
}
|
||||
#endif
|
||||
|
||||
/********************** view pan operator *********************/
|
||||
|
||||
typedef struct ViewPanData {
|
||||
@ -738,8 +688,8 @@ static int view_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
|
||||
sc->xlockof= 0.f;
|
||||
sc->ylockof= 0.f;
|
||||
sc->xlockof= 0.0f;
|
||||
sc->ylockof= 0.0f;
|
||||
|
||||
ED_clip_view_selection(sc, ar, 1);
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
@ -776,7 +726,7 @@ static void change_frame_apply(bContext *C, wmOperator *op)
|
||||
/* set the new frame number */
|
||||
CFRA= RNA_int_get(op->ptr, "frame");
|
||||
FRAMENUMBER_MIN_CLAMP(CFRA);
|
||||
SUBFRA = 0.f;
|
||||
SUBFRA = 0.0f;
|
||||
|
||||
/* do updates */
|
||||
sound_seek_scene(CTX_data_main(C), CTX_data_scene(C));
|
||||
|
219
source/blender/editors/space_clip/clip_utils.c
Normal file
219
source/blender/editors/space_clip/clip_utils.c
Normal file
@ -0,0 +1,219 @@
|
||||
/*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2011 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Contributor(s): Blender Foundation,
|
||||
* Sergey Sharybin
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/clip_utils.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
#include "DNA_object_types.h" /* SELECT */
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_listbase.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_movieclip.h"
|
||||
#include "BKE_tracking.h"
|
||||
#include "BKE_depsgraph.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_clip.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
#include "UI_view2d.h"
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack *track, void *userdata,
|
||||
void (*func) (void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, float val),
|
||||
void (*segment_start) (void *userdata, MovieTrackingTrack *track, int coord),
|
||||
void (*segment_end) (void *userdata))
|
||||
{
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
int width, height, coord;
|
||||
|
||||
BKE_movieclip_get_size(clip, &sc->user, &width, &height);
|
||||
|
||||
for(coord= 0; coord<2; coord++) {
|
||||
int i, open= 0, prevfra= 0;
|
||||
float prevval= 0.0f;
|
||||
|
||||
for(i= 0; i<track->markersnr; i++) {
|
||||
MovieTrackingMarker *marker= &track->markers[i];
|
||||
float val;
|
||||
|
||||
if(marker->flag&MARKER_DISABLED) {
|
||||
if(open) {
|
||||
if(segment_end)
|
||||
segment_end(userdata);
|
||||
|
||||
open= 0;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!open) {
|
||||
if(segment_start)
|
||||
segment_start(userdata, track, coord);
|
||||
|
||||
open= 1;
|
||||
prevval= marker->pos[coord];
|
||||
}
|
||||
|
||||
/* value is a pixels per frame speed */
|
||||
val= (marker->pos[coord] - prevval) * ((i==0) ? (width) : (height));
|
||||
val/= marker->framenr-prevfra;
|
||||
|
||||
if(func)
|
||||
func(userdata, track, marker, coord, val);
|
||||
|
||||
prevval= marker->pos[coord];
|
||||
prevfra= marker->framenr;
|
||||
}
|
||||
|
||||
if(open) {
|
||||
if(segment_end)
|
||||
segment_end(userdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clip_graph_tracking_values_iterate(SpaceClip *sc, void *userdata,
|
||||
void (*func) (void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, float val),
|
||||
void (*segment_start) (void *userdata, MovieTrackingTrack *track, int coord),
|
||||
void (*segment_end) (void *userdata))
|
||||
{
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
track= tracking->tracks.first;
|
||||
while(track) {
|
||||
if(TRACK_VIEW_SELECTED(sc, track)) {
|
||||
clip_graph_tracking_values_iterate_track(sc, track, userdata, func, segment_start, segment_end);
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
}
|
||||
|
||||
void clip_graph_tracking_iterate(SpaceClip *sc, void *userdata,
|
||||
void (*func) (void *userdata, MovieTrackingMarker *marker))
|
||||
{
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
track= tracking->tracks.first;
|
||||
while(track) {
|
||||
if(TRACK_VIEW_SELECTED(sc, track)) {
|
||||
int i;
|
||||
|
||||
for(i= 0; i<track->markersnr; i++) {
|
||||
MovieTrackingMarker *marker= &track->markers[i];
|
||||
|
||||
if(marker->flag&MARKER_DISABLED)
|
||||
continue;
|
||||
|
||||
if(func)
|
||||
func(userdata, marker);
|
||||
}
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
}
|
||||
|
||||
void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
|
||||
{
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingStabilization *stab= &tracking->stabilization;
|
||||
|
||||
int has_bundle= 0, update_stab= 0;
|
||||
|
||||
if(track==tracking->act_track)
|
||||
tracking->act_track= NULL;
|
||||
|
||||
if(track==stab->rot_track) {
|
||||
stab->rot_track= NULL;
|
||||
|
||||
update_stab= 1;
|
||||
}
|
||||
|
||||
/* handle reconstruction display in 3d viewport */
|
||||
if(track->flag&TRACK_HAS_BUNDLE)
|
||||
has_bundle= 1;
|
||||
|
||||
BKE_tracking_free_track(track);
|
||||
BLI_freelinkN(&tracking->tracks, track);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip);
|
||||
|
||||
if(update_stab) {
|
||||
tracking->stabilization.ok= 0;
|
||||
|
||||
DAG_id_tag_update(&clip->id, 0);
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, clip);
|
||||
}
|
||||
|
||||
if(has_bundle)
|
||||
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL);
|
||||
}
|
||||
|
||||
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker)
|
||||
{
|
||||
if(track->markersnr==1) {
|
||||
clip_delete_track(C, clip, track);
|
||||
}
|
||||
else {
|
||||
BKE_tracking_delete_marker(track, marker->framenr);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip);
|
||||
}
|
||||
}
|
||||
|
||||
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
|
||||
{
|
||||
int width, height;
|
||||
float aspx, aspy;
|
||||
|
||||
ED_space_clip_size(sc, &width, &height);
|
||||
ED_space_clip_aspect(sc, &aspx, &aspy);
|
||||
|
||||
sc->xof= (x-0.5f)*width*aspx;
|
||||
sc->yof= (y-0.5f)*height*aspy;
|
||||
}
|
@ -298,7 +298,6 @@ static void clip_operatortypes(void)
|
||||
/* ** clip_ops.c ** */
|
||||
WM_operatortype_append(CLIP_OT_open);
|
||||
WM_operatortype_append(CLIP_OT_reload);
|
||||
// WM_operatortype_append(CLIP_OT_unlink);
|
||||
WM_operatortype_append(CLIP_OT_view_pan);
|
||||
WM_operatortype_append(CLIP_OT_view_zoom);
|
||||
WM_operatortype_append(CLIP_OT_view_zoom_in);
|
||||
@ -368,6 +367,11 @@ static void clip_operatortypes(void)
|
||||
WM_operatortype_append(CLIP_OT_track_copy_color);
|
||||
|
||||
WM_operatortype_append(CLIP_OT_clean_tracks);
|
||||
|
||||
/* graph editing */
|
||||
WM_operatortype_append(CLIP_OT_graph_select);
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_curve);
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_knot);
|
||||
}
|
||||
|
||||
static void clip_keymap(struct wmKeyConfig *keyconf)
|
||||
@ -511,7 +515,18 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
|
||||
keymap= WM_keymap_find(keyconf, "Clip Graph Editor", SPACE_CLIP, 0);
|
||||
|
||||
/* "timeline" */
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_change_frame", ACTIONMOUSE, KM_PRESS, 0, 0);
|
||||
|
||||
/* selection */
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_select", SELECTMOUSE, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "CLIP_OT_graph_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
|
||||
|
||||
/* delete */
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", DELKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", XKEY, KM_PRESS, 0, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_knot", DELKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_knot", XKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
}
|
||||
|
||||
const char *clip_context_dir[]= {"edit_movieclip", NULL};
|
||||
|
@ -25,6 +25,10 @@
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_clip/tracking_ops.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_camera_types.h"
|
||||
@ -71,10 +75,6 @@
|
||||
|
||||
#include "clip_intern.h" // own include
|
||||
|
||||
/** \file blender/editors/space_clip/tracking_ops.c
|
||||
* \ingroup spclip
|
||||
*/
|
||||
|
||||
static int space_clip_frame_poll(bContext *C)
|
||||
{
|
||||
SpaceClip *sc= CTX_wm_space_clip(C);
|
||||
@ -176,7 +176,7 @@ void CLIP_OT_add_marker(wmOperatorType *ot)
|
||||
|
||||
/* properties */
|
||||
RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MIN, FLT_MAX,
|
||||
"Location", "Location of marker on frame", -1.f, 1.f);
|
||||
"Location", "Location of marker on frame", -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
/********************** delete track operator *********************/
|
||||
@ -187,45 +187,16 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingTrack *track= tracking->tracks.first, *next;
|
||||
MovieTrackingStabilization *stab= &tracking->stabilization;
|
||||
int has_bundle= 0, update_stab= 0;
|
||||
|
||||
while(track) {
|
||||
next= track->next;
|
||||
|
||||
if(TRACK_VIEW_SELECTED(sc, track)) {
|
||||
if(track==tracking->act_track)
|
||||
tracking->act_track= NULL;
|
||||
|
||||
if(track==stab->rot_track) {
|
||||
stab->rot_track= NULL;
|
||||
|
||||
update_stab= 1;
|
||||
}
|
||||
|
||||
/* handle reconstruction display in 3d viewport */
|
||||
if(track->flag&TRACK_HAS_BUNDLE)
|
||||
has_bundle= 1;
|
||||
|
||||
BKE_tracking_free_track(track);
|
||||
BLI_freelinkN(&tracking->tracks, track);
|
||||
}
|
||||
if(TRACK_VIEW_SELECTED(sc, track))
|
||||
clip_delete_track(C, clip, track);
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip);
|
||||
|
||||
if(update_stab) {
|
||||
tracking->stabilization.ok= 0;
|
||||
|
||||
DAG_id_tag_update(&clip->id, 0);
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, clip);
|
||||
}
|
||||
|
||||
if(has_bundle)
|
||||
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@ -260,24 +231,13 @@ static int delete_marker_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if(TRACK_VIEW_SELECTED(sc, track)) {
|
||||
MovieTrackingMarker *marker= BKE_tracking_exact_marker(track, framenr);
|
||||
|
||||
if(marker) {
|
||||
if(track->markersnr==1) {
|
||||
if(track==clip->tracking.act_track)
|
||||
clip->tracking.act_track= NULL;
|
||||
|
||||
BKE_tracking_free_track(track);
|
||||
BLI_freelinkN(&clip->tracking.tracks, track);
|
||||
} else {
|
||||
BKE_tracking_delete_marker(track, framenr);
|
||||
}
|
||||
}
|
||||
if(marker)
|
||||
clip_delete_marker(C, clip, track, marker);
|
||||
}
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@ -378,7 +338,7 @@ static int mouse_on_corner(SpaceClip *sc, MovieTrackingTrack *track, MovieTracki
|
||||
int area, float co[2], int corner, int width, int height)
|
||||
{
|
||||
int inside= 0;
|
||||
float size= 12.f;
|
||||
float size= 12.0f;
|
||||
float min[2], max[2];
|
||||
float crn[2], dx, dy, tdx, tdy;
|
||||
|
||||
@ -396,8 +356,8 @@ static int mouse_on_corner(SpaceClip *sc, MovieTrackingTrack *track, MovieTracki
|
||||
tdx= 5.0f/width/sc->zoom;
|
||||
tdy= 5.0f/height/sc->zoom;
|
||||
|
||||
dx= MIN2(dx, (max[0]-min[0])/6.f) + tdx;
|
||||
dy= MIN2(dy, (max[1]-min[1])/6.f) + tdy;
|
||||
dx= MIN2(dx, (max[0]-min[0])/6.0f) + tdx;
|
||||
dy= MIN2(dy, (max[1]-min[1])/6.0f) + tdy;
|
||||
|
||||
if(corner==0) {
|
||||
crn[0]= marker->pos[0]+max[0];
|
||||
@ -421,11 +381,11 @@ static int mouse_on_offset(SpaceClip *sc, MovieTrackingTrack *track, MovieTracki
|
||||
|
||||
add_v2_v2v2(pos, marker->pos, track->offset);
|
||||
|
||||
dx= 12.f/width/sc->zoom;
|
||||
dy= 12.f/height/sc->zoom;
|
||||
dx= 12.0f/width/sc->zoom;
|
||||
dy= 12.0f/height/sc->zoom;
|
||||
|
||||
dx=MIN2(dx, (track->pat_max[0]-track->pat_min[0])/2.f);
|
||||
dy=MIN2(dy, (track->pat_max[1]-track->pat_min[1])/2.f);
|
||||
dx=MIN2(dx, (track->pat_max[0]-track->pat_min[0])/2.0f);
|
||||
dy=MIN2(dy, (track->pat_max[1]-track->pat_min[1])/2.0f);
|
||||
|
||||
return co[0]>=pos[0]-dx && co[0]<=pos[0]+dx && co[1]>=pos[1]-dy && co[1]<=pos[1]+dy;
|
||||
}
|
||||
@ -697,8 +657,8 @@ static int track_mouse_area(SpaceClip *sc, float co[2], MovieTrackingTrack *trac
|
||||
epsy= MIN4(track->pat_min[1]-track->search_min[1], track->search_max[1]-track->pat_max[1],
|
||||
fabsf(track->pat_min[1]), fabsf(track->pat_max[1])) / 2;
|
||||
|
||||
epsx= MAX2(epsy, 2.f / width);
|
||||
epsy= MAX2(epsy, 2.f / height);
|
||||
epsx= MAX2(epsy, 2.0f / width);
|
||||
epsy= MAX2(epsy, 2.0f / height);
|
||||
|
||||
if(sc->flag&SC_SHOW_MARKER_SEARCH)
|
||||
if(mouse_on_rect(co, marker->pos, track->search_min, track->search_max, epsx, epsy))
|
||||
@ -709,8 +669,8 @@ static int track_mouse_area(SpaceClip *sc, float co[2], MovieTrackingTrack *trac
|
||||
if(mouse_on_rect(co, marker->pos, track->pat_min, track->pat_max, epsx, epsy))
|
||||
return TRACK_AREA_PAT;
|
||||
|
||||
epsx= 12.f/width;
|
||||
epsy= 12.f/height;
|
||||
epsx= 12.0f/width;
|
||||
epsy= 12.0f/height;
|
||||
|
||||
if(fabsf(co[0]-marker->pos[0]-track->offset[0])< epsx && fabsf(co[1]-marker->pos[1]-track->offset[1])<=epsy)
|
||||
return TRACK_AREA_POINT;
|
||||
@ -1554,10 +1514,10 @@ static int solve_camera_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if(tracking->camera.pixel_aspect > 1.0f) {
|
||||
scene->r.xasp= tracking->camera.pixel_aspect;
|
||||
scene->r.yasp= 1.f;
|
||||
scene->r.yasp= 1.0f;
|
||||
} else {
|
||||
scene->r.xasp= 1.f;
|
||||
scene->r.yasp= 1.f / tracking->camera.pixel_aspect;
|
||||
scene->r.xasp= 1.0f;
|
||||
scene->r.yasp= 1.0f / tracking->camera.pixel_aspect;
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT, camera);
|
||||
@ -1824,24 +1784,24 @@ static void set_axis(Scene *scene, Object *ob, MovieTrackingTrack *track, char
|
||||
|
||||
if(axis=='X') {
|
||||
if(fabsf(vec[1])<1e-3) {
|
||||
mat[0][0]= -1.f; mat[0][1]= 0.f; mat[0][2]= 0.f;
|
||||
mat[1][0]= 0.f; mat[1][1]= -1.f; mat[1][2]= 0.f;
|
||||
mat[2][0]= 0.f; mat[2][1]= 0.f; mat[2][2]= 1.0f;
|
||||
mat[0][0]= -1.0f; mat[0][1]= 0.0f; mat[0][2]= 0.0f;
|
||||
mat[1][0]= 0.0f; mat[1][1]= -1.0f; mat[1][2]= 0.0f;
|
||||
mat[2][0]= 0.0f; mat[2][1]= 0.0f; mat[2][2]= 1.0f;
|
||||
} else {
|
||||
copy_v3_v3(mat[0], vec);
|
||||
mat[0][2]= 0.f;
|
||||
mat[2][0]= 0.f; mat[2][1]= 0.f; mat[2][2]= 1.0f;
|
||||
mat[0][2]= 0.0f;
|
||||
mat[2][0]= 0.0f; mat[2][1]= 0.0f; mat[2][2]= 1.0f;
|
||||
cross_v3_v3v3(mat[1], mat[2], mat[0]);
|
||||
}
|
||||
} else {
|
||||
if(fabsf(vec[0])<1e-3) {
|
||||
mat[0][0]= -1.f; mat[0][1]= 0.f; mat[0][2]= 0.f;
|
||||
mat[1][0]= 0.f; mat[1][1]= -1.f; mat[1][2]= 0.f;
|
||||
mat[2][0]= 0.f; mat[2][1]= 0.f; mat[2][2]= 1.0f;
|
||||
mat[0][0]= -1.0f; mat[0][1]= 0.0f; mat[0][2]= 0.0f;
|
||||
mat[1][0]= 0.0f; mat[1][1]= -1.0f; mat[1][2]= 0.0f;
|
||||
mat[2][0]= 0.0f; mat[2][1]= 0.0f; mat[2][2]= 1.0f;
|
||||
} else {
|
||||
copy_v3_v3(mat[1], vec);
|
||||
mat[1][2]= 0.f;
|
||||
mat[2][0]= 0.f; mat[2][1]= 0.f; mat[2][2]= 1.0f;
|
||||
mat[1][2]= 0.0f;
|
||||
mat[2][0]= 0.0f; mat[2][1]= 0.0f; mat[2][2]= 1.0f;
|
||||
cross_v3_v3v3(mat[0], mat[1], mat[2]);
|
||||
}
|
||||
}
|
||||
@ -1866,11 +1826,11 @@ static int set_floor_exec(bContext *C, wmOperator *op)
|
||||
Object *camera= scene->camera;
|
||||
Object *parent= camera;
|
||||
int tot= 0;
|
||||
float vec[3][3], mat[4][4], obmat[4][4], newmat[4][4], orig[3]= {0.f, 0.f, 0.f};
|
||||
float rot[4][4]={{0.f, 0.f, -1.f, 0.f},
|
||||
{0.f, 1.f, 0.f, 0.f},
|
||||
{1.f, 0.f, 0.f, 0.f},
|
||||
{0.f, 0.f, 0.f, 1.f}}; /* 90 degrees Y-axis rotation matrix */
|
||||
float vec[3][3], mat[4][4], obmat[4][4], newmat[4][4], orig[3]= {0.0f, 0.0f, 0.0f};
|
||||
float rot[4][4]={{0.0f, 0.0f, -1.0f, 0.0f},
|
||||
{0.0f, 1.0f, 0.0f, 0.0f},
|
||||
{1.0f, 0.0f, 0.0f, 0.0f},
|
||||
{0.0f, 0.0f, 0.0f, 1.0f}}; /* 90 degrees Y-axis rotation matrix */
|
||||
|
||||
if(count_selected_bundles(C)!=3) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Three tracks with bundles are needed to orient the floor");
|
||||
@ -2081,7 +2041,7 @@ static int set_scale_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
|
||||
MovieClip *clip= ED_space_clip(sc);
|
||||
float dist= RNA_float_get(op->ptr, "distance");
|
||||
|
||||
if(dist==0.f)
|
||||
if(dist==0.0f)
|
||||
RNA_float_set(op->ptr, "distance", clip->tracking.settings.dist);
|
||||
|
||||
return set_scale_exec(C, op);
|
||||
@ -2886,7 +2846,7 @@ static int clean_tracks_exec(bContext *C, wmOperator *op)
|
||||
int ok= 1;
|
||||
|
||||
ok= (is_track_clean(track, frames, action==TRACKING_CLEAN_DELETE_SEGMENT)) &&
|
||||
(error == 0.f || (track->flag&TRACK_HAS_BUNDLE)==0 || track->error < error);
|
||||
(error == 0.0f || (track->flag&TRACK_HAS_BUNDLE)==0 || track->error < error);
|
||||
|
||||
if(!ok) {
|
||||
if(action==TRACKING_CLEAN_SELECT) {
|
||||
@ -2960,6 +2920,6 @@ void CLIP_OT_clean_tracks(wmOperatorType *ot)
|
||||
|
||||
/* properties */
|
||||
RNA_def_int(ot->srna, "frames", 0, 0, INT_MAX, "Tracked Frames", "Effect on tracks which are tracked less than specified amount of frames", 0, INT_MAX);
|
||||
RNA_def_float(ot->srna, "error", 0.0f, 0.f, FLT_MAX, "Reprojection Error", "Effect on tracks with have got larger reprojection error", 0.f, 100.0f);
|
||||
RNA_def_float(ot->srna, "error", 0.0f, 0.0f, FLT_MAX, "Reprojection Error", "Effect on tracks with have got larger reprojection error", 0.0f, 100.0f);
|
||||
RNA_def_enum(ot->srna, "action", actions_items, 0, "Action", "Cleanup action to execute");
|
||||
}
|
||||
|
@ -207,6 +207,12 @@ typedef struct PreviewImage {
|
||||
/* fluidsim Ipo */
|
||||
#define ID_FLUIDSIM MAKE_ID2('F', 'S')
|
||||
|
||||
/* ******** NOTE!!! ********
|
||||
Some areas of code is using staticly sized arrays to hold ID types to be processed
|
||||
DO NOT forgot to update this value when you're adding new ID type!
|
||||
*/
|
||||
#define ID_NUMTYPES 37
|
||||
|
||||
#define ID_REAL_USERS(id) (((ID *)id)->us - ((((ID *)id)->flag & LIB_FAKEUSER) ? 1:0))
|
||||
|
||||
#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM))
|
||||
|
@ -171,6 +171,7 @@ enum {
|
||||
/* MovieTrackingMarker->flag */
|
||||
#define MARKER_DISABLED (1<<0)
|
||||
#define MARKER_TRACKED (1<<1)
|
||||
#define MARKER_GRAPH_SEL (1<<2)
|
||||
|
||||
/* MovieTrackingTrack->flag */
|
||||
#define TRACK_HAS_BUNDLE (1<<1)
|
||||
|
@ -281,7 +281,7 @@ static void rna_def_trackingSettings(BlenderRNA *brna)
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "corr");
|
||||
RNA_def_property_range(prop, -1.0f, 1.0f);
|
||||
RNA_def_property_ui_range(prop, -1.f, 1.f, .1, 3);
|
||||
RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1, 3);
|
||||
RNA_def_property_ui_text(prop, "Correlation", "Minimal value of correlation between mathed pattern and reference which is still treated as successful tracking");
|
||||
|
||||
/* tool settings */
|
||||
@ -590,28 +590,28 @@ static void rna_def_trackingStabilization(BlenderRNA *brna)
|
||||
/* max scale */
|
||||
prop= RNA_def_property(srna, "scale_max", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "maxscale");
|
||||
RNA_def_property_range(prop, 0.f, 10.f);
|
||||
RNA_def_property_range(prop, 0.0f, 10.0f);
|
||||
RNA_def_property_ui_text(prop, "Miximal Scale", "Maximal value for scale factor");
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate");
|
||||
|
||||
/* influence_location */
|
||||
prop= RNA_def_property(srna, "influence_location", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "locinf");
|
||||
RNA_def_property_range(prop, 0.f, 1.f);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Location Influence", "Influence of stabilization algorithm on footage location");
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate");
|
||||
|
||||
/* influence_scale */
|
||||
prop= RNA_def_property(srna, "influence_scale", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "scaleinf");
|
||||
RNA_def_property_range(prop, 0.f, 1.f);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Scale Influence", "Influence of stabilization algorithm on footage scale");
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate");
|
||||
|
||||
/* influence_rotation */
|
||||
prop= RNA_def_property(srna, "influence_rotation", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "rotinf");
|
||||
RNA_def_property_range(prop, 0.f, 1.f);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Rotation Influence", "Influence of stabilization algorithm on footage rotation");
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate");
|
||||
}
|
||||
|
@ -1856,6 +1856,21 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Current Frame", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "handle_vertex", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Handle Vertex", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "handle_vertex_select", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Handle Vertex Select", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "handle_vertex_size", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 0, 255);
|
||||
RNA_def_property_ui_text(prop, "Handle Vertex Size", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_themes(BlenderRNA *brna)
|
||||
|
@ -15,7 +15,7 @@
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2006 Blender Foundation.
|
||||
* The Original Code is Copyright (C) 2011 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
@ -60,7 +60,7 @@ static void exec(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **
|
||||
ImBuf *obuf;
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
int width, height;
|
||||
float overscan= 0.f;
|
||||
float overscan= 0.0f;
|
||||
|
||||
ibuf->rect_float= cbuf->rect;
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2006 Blender Foundation.
|
||||
* The Original Code is Copyright (C) 2011 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
|
@ -15,7 +15,7 @@
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2006 Blender Foundation.
|
||||
* The Original Code is Copyright (C) 2011 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
@ -61,8 +61,8 @@ CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, f
|
||||
unit_m4(cmat);
|
||||
|
||||
/* image center as rotation center */
|
||||
cmat[3][0]= (float)cbuf->x/2.f;
|
||||
cmat[3][1]= (float)cbuf->y/2.f;
|
||||
cmat[3][0]= (float)cbuf->x/2.0f;
|
||||
cmat[3][1]= (float)cbuf->y/2.0f;
|
||||
invert_m4_m4(icmat, cmat);
|
||||
|
||||
size_to_mat4(smat, svec); /* scale matrix */
|
||||
|
Loading…
Reference in New Issue
Block a user