void Canvas::unset ( int x, int y ) { if ( y - m.origin_y < m.margin_top ) /* looks like a click on the ruler */ { if ( x - m.margin_left - m.origin_x >= 0 ) { m.p2 = m.vp->x + ((x - m.margin_left - m.origin_x) / m.div_w); m.ruler_drawn = false; m.p3 = m.p4 = 0; } _lr(); signal_draw(); return; } if ( ! grid_pos( &x, &y ) ) return; m.grid->del( x, y ); }
void FastShift::initial() { r = data.rows; n = data.cols; partitionGrid(); selectD = 2; selected.resize(selectD, 0); factor.resize(n, 1); for(int i = n - 2; i >= 0; i --) factor[i] *= grids[i+1]; gridNum = factor[0] * grids[0]; D = new int[gridNum]; C = new float*[gridNum]; for(int i = 0; i < gridNum; i ++) C[i] = new float[n]; vector<int> grid_pos(n, 0); for(int i = 0; i < n; i ++) { whichGrid(data.row(i), grid_pos); int pos = findposition(grid_pos); D[pos] ++; add(C[pos], (float*)(data.row(i).data), n); } for(int i = 0; i < gridNum; i ++) { for(int j = 0; j < n; j ++) { C[i][j] /= D[i]; } } }
void Canvas::select ( int x, int y ) { if ( ! grid_pos( &x, &y ) ) return; m.grid->toggle_select( x, y ); }
void Canvas::adj_length ( int x, int y, int n ) { if ( ! grid_pos( &x, &y ) ) return; m.grid->adj_duration( x, y, n ); }
void Canvas::adj_color ( int x, int y, int n ) { if ( ! grid_pos( &x, &y ) ) return; m.grid->adj_velocity( x, y, n ); }
void Canvas::randomize_row ( int y ) { int x = m.margin_left; if ( ! grid_pos( &x, &y ) ) return; ((pattern*)m.grid)->randomize_row( y, song.random.feel, song.random.probability ); }
/** if coords correspond to a row name entry, return the (absolute) note number, otherwise return -1 */ int Canvas::is_row_name ( int x, int y ) { if ( x - m.origin_x >= m.margin_left ) return -1; x = m.margin_left; grid_pos( &x, &y ); return m.grid->y_to_note( y ); }
void Canvas::end_cursor ( int x, int y ) { if ( ! grid_pos( &x, &y ) ) return; m.ruler_drawn = false; m.p2 = x; m.p4 = ntr( y ); _lr(); signal_draw(); }
vector<float> FastShift::allDirections(vector<float> shiftPoint, vector<float> shiftValue) { vector<int> grid_pos(n, 0); whichGrid(shiftPoint, grid_pos); int pos = findposition(grid_pos); vector<float> external_force(n, 0); vector<float> force1(n, 0); for(int i = 0; i < selectD; i ++) { for(int j = -1; j <= 1; j += 2) { calForce(shiftPoint, pos + j * factor[selected[i]], force1); external_force += force1; } } return external_force; }
vector<float> FastShift::maxDirectionTwoSide(vector<float> shiftPoint, vector<float> shiftValue) { vector<float> external_force(n, 0); vector<float> force(n, 0); vector<float> force1(n, 0); bool unset = true; float max; int shift; vector<int> grid_pos(n, 0); whichGrid(shiftPoint, grid_pos); int pos = findposition(grid_pos); for(int i = 0; i < selectD; i ++) { for(int j = -1; j <= 1; j += 2) { calForce(shiftPoint, pos + j * factor[selected[i]], force1); force += force1; } float l = l2norm(force); if(unset) { max = l; external_force = force; shift = pos - factor[selected[i]]; unset = false; continue; } if(l > max) { max = l; external_force = force; } } //copy(C[shift], shiftValue, n); return external_force; }