예제 #1
0
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 );
}
예제 #2
0
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];
		}
	}
}
예제 #3
0
void
Canvas::select ( int x, int y )
{
    if ( ! grid_pos( &x, &y ) )
        return;

    m.grid->toggle_select( x, y );
}
예제 #4
0
void
Canvas::adj_length ( int x, int y, int n )
{
    if ( ! grid_pos( &x, &y ) )
        return;

    m.grid->adj_duration( x, y, n );
}
예제 #5
0
void
Canvas::adj_color ( int x, int y, int n )
{
    if ( ! grid_pos( &x, &y ) )
        return;

    m.grid->adj_velocity( x, y, n );
}
예제 #6
0
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 );
}
예제 #7
0
/** 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 );
}
예제 #8
0
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();
}
예제 #9
0
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;
}
예제 #10
0
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;
}