X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fmotion51%2Fmotion51.C;h=b61e22442b91109f35c2fa69255a888a2b175374;hb=26f3c4335351a3938db78303c57a2ba6551a2a10;hp=9e4143f45cbe11510fd7077ff50e4deee02d1132;hpb=723142d62d61cde588e961426440f839ca9dcda9;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/motion51/motion51.C b/cinelerra-5.1/plugins/motion51/motion51.C index 9e4143f4..b61e2244 100644 --- a/cinelerra-5.1/plugins/motion51/motion51.C +++ b/cinelerra-5.1/plugins/motion51/motion51.C @@ -147,7 +147,7 @@ void Motion51Main::save_data(KeyFrame *keyframe) FileXML output; // cause data to be stored directly in text - output.set_shared_output(keyframe->get_data(), MESSAGESIZE); + output.set_shared_output(keyframe->xbuf); output.tag.set_title("MOTION51"); output.tag.set_property("HORIZ_LIMIT", config.horiz_limit); output.tag.set_property("VERT_LIMIT", config.vert_limit); @@ -172,7 +172,7 @@ void Motion51Main::save_data(KeyFrame *keyframe) void Motion51Main::read_data(KeyFrame *keyframe) { FileXML input; - input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data())); + input.set_shared_input(keyframe->xbuf); int result = 0; while( !(result = input.read_tag()) ) { @@ -565,41 +565,68 @@ void Motion51Main::centroid(double *pix[3], double *ctr_v, double *ctr_x, double } } +Motion51VVFrame::Motion51VVFrame(VFrame *vfrm, int n) + : VFrame(vfrm->get_data(), -1, vfrm->get_y()-vfrm->get_data(), + vfrm->get_u()-vfrm->get_data(), vfrm->get_v()-vfrm->get_data(), + vfrm->get_w(), vfrm->get_h(), vfrm->get_color_model(), + vfrm->get_bytes_per_line()) +{ + this->n = n; +} + +int Motion51VVFrame::draw_pixel(int x, int y) +{ + VFrame::draw_pixel(x+0, y+0); + for( int i=1; idraw_arrow(rx, ry, rx+current_dx, ry+current_dy); + int iw = img->get_w(), ih = img->get_h(); + int mx = iw > ih ? iw : ih; + int n = mx/800 + 1; + Motion51VVFrame vfrm(img, n); + vfrm.set_pixel_color(WHITE); + int m = 2; while( m < n ) m <<= 1; + vfrm.set_stiple(2*m); -// img->draw_smooth(rx-rr,ry, rx-rr,ry+rr, rx,ry+rr); -// img->draw_smooth(rx,ry+rr, rx+rr,ry+rr, rx+rr,ry); -// img->draw_smooth(rx+rr,ry, rx+rr,ry-rr, rx,ry-rr); -// img->draw_smooth(rx,ry-rr, rx-rr,ry-rr, rx-rr,ry); + vfrm.draw_arrow(rx, ry, rx+current_dx, ry+current_dy); +// vfrm.draw_smooth(rx-rr,ry, rx-rr,ry+rr, rx,ry+rr); +// vfrm.draw_smooth(rx,ry+rr, rx+rr,ry+rr, rx+rr,ry); +// vfrm.draw_smooth(rx+rr,ry, rx+rr,ry-rr, rx,ry-rr); +// vfrm.draw_smooth(rx,ry-rr, rx-rr,ry-rr, rx-rr,ry); float rx1 = rx - 0.5*rw; float ry1 = ry - 0.5*rh; float rx2 = rx1 + rw; float ry2 = ry1 + rh; - img->draw_line(rx1, ry1, rx2, ry1); - img->draw_line(rx2, ry1, rx2, ry2); - img->draw_line(rx2, ry2, rx1, ry2); - img->draw_line(rx1, ry2, rx1, ry1); + vfrm.draw_line(rx1, ry1, rx2, ry1); + vfrm.draw_line(rx2, ry1, rx2, ry2); + vfrm.draw_line(rx2, ry2, rx1, ry2); + vfrm.draw_line(rx1, ry2, rx1, ry1); float sx1 = rx1 - rr, sy1 = ry1 - rr; float sx2 = rx2 + rr, sy2 = ry2 + rr; - img->draw_smooth(sx1, ry1, sx1, sy1, rx1, sy1); - img->draw_line(rx1, sy1, rx2, sy1); - img->draw_smooth(rx2, sy1, sx2, sy1, sx2, ry1); - img->draw_line(sx2, ry1, sx2, ry2); - img->draw_smooth(sx2, ry2, sx2, sy2, rx2, sy2); - img->draw_line(rx2, sy2, rx1, sy2); - img->draw_smooth(rx1, sy2, sx1, sy2, sx1, ry2); - img->draw_line(sx1, ry2, sx1, ry1); + vfrm.draw_smooth(sx1, ry1, sx1, sy1, rx1, sy1); + vfrm.draw_line(rx1, sy1, rx2, sy1); + vfrm.draw_smooth(rx2, sy1, sx2, sy1, sx2, ry1); + vfrm.draw_line(sx2, ry1, sx2, ry2); + vfrm.draw_smooth(sx2, ry2, sx2, sy2, rx2, sy2); + vfrm.draw_line(rx2, sy2, rx1, sy2); + vfrm.draw_smooth(rx1, sy2, sx1, sy2, sx1, ry2); + vfrm.draw_line(sx1, ry2, sx1, ry1); double *xp = xpts, *yp = ypts; for( int i=cir_sz; --i>=0; ++xp, ++yp ) - img->draw_pixel(rx+*xp, ry+*yp); + vfrm.draw_pixel(rx+*xp, ry+*yp); } int Motion51Main::open_cache_file()