Ejemplo n.º 1
0
void draw_harmonics(t_space *x,  t_object *view, t_rect *rect)
{
	int pathLength = 0;
	t_pt beginCoord;
	t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("harmonics_layer"), rect->width, rect->height);

	if (g)
	{
		t_jmatrix transform;
		jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center.x, x->f_center.y);
		jgraphics_set_matrix(g, &transform);
		jgraphics_set_line_width(g, 2);
        
		if(x->f_viewer->getBiggestContribution() != 0.)
		{
            double max = 0.;
            double normalize = 1;
            for(int i = 0 ; i < x->f_number_of_microphones; i++)
            {
                if(x->f_microphonesValues[i] > max)
                    max = x->f_microphonesValues[i];
            }
            normalize = max / x->f_viewer->getBiggestContribution();
            
            if(x->f_mode == 1)
                normalize = x->f_rotation_max / x->f_viewer->getBiggestContribution();
            
			double factor = (x->f_rayonGlobal * 5. / 6.) * normalize;
			
			jgraphics_set_source_jrgba(g, &x->f_color_harmonics);
			for(int i = 0; i < NUMBEROFCIRCLEPOINTS; i++)
			{
				
				if (i == NUMBEROFCIRCLEPOINTS-1) {
					jgraphics_line_to(g, beginCoord.x, beginCoord.y );
				}
				else if(x->f_viewer->getColor(i) == 1)
				{
					if (pathLength == 0) 
					{
						beginCoord.x = x->f_viewer->getAbscisseValue(i) * factor;
						beginCoord.y = x->f_viewer->getOrdinateValue(i) * factor;
						jgraphics_move_to(g, beginCoord.x, beginCoord.y );
						pathLength++;
					}
                    else
                    {
						jgraphics_line_to(g, x->f_viewer->getAbscisseValue(i) * factor, 
										  x->f_viewer->getOrdinateValue(i) * factor);
					}
				}
			}
			if (pathLength) {
				jgraphics_close_path(g);
				jgraphics_fill_preserve(g);
				jgraphics_stroke(g);
			}
		}
		jbox_end_layer((t_object*)x, view, gensym("harmonics_layer"));
	}
	jbox_paint_layer((t_object *)x, view, gensym("harmonics_layer"), 0., 0.);
}
void draw_vectors(t_meter *x, t_object *view, t_rect *rect)
{
	double pointSize = rect->width*0.02;
	double maxRadius = (x->f_rayonInt-pointSize-1);
	if (pointSize > maxRadius)
		return;
	
	double vecX, vecY;
	t_jmatrix transform;
	t_jgraphics *g = jbox_start_layer((t_object *)x, view, hoa_sym_vectors_layer, rect->width, rect->height);
	
	if (g)
	{
		jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center, x->f_center);
		jgraphics_set_matrix(g, &transform);
        
        
		if (x->f_rotation)
			jgraphics_rotate(g, x->f_meter->getPlanewavesRotationX());
		else
			jgraphics_rotate(g, -x->f_meter->getPlanewavesRotationX());
        
		if (x->f_drawvector == VECTOR_BOTH || x->f_drawvector == VECTOR_ENERGY)
		{
			if (x->f_rotation)
			{
				vecX = x->f_vector_coords[2] * maxRadius;
				vecY = x->f_vector_coords[3] * maxRadius;
			}
			else
			{
                double rad = Math<double>::radius(x->f_vector_coords[2], x->f_vector_coords[3]) * maxRadius;
                double ang = -Math<double>::azimuth(x->f_vector_coords[2], x->f_vector_coords[3]);
                vecX = Math<double>::abscissa(rad, ang);
                vecY = Math<double>::ordinate(rad, ang);
			}
			
			jgraphics_set_source_jrgba(g, &x->f_color_energy);
			jgraphics_arc(g, vecX, vecY, pointSize, 0., HOA_2PI);
			jgraphics_fill_preserve(g);
			jgraphics_set_source_rgba(g, 0.2, 0.2, 0.2, 1.);
			jgraphics_stroke(g);
		}
		
		if (x->f_drawvector == VECTOR_BOTH || x->f_drawvector == VECTOR_VELOCITY)
		{
			if (x->f_rotation)
			{
				double rad = min(Math<double>::radius(x->f_vector_coords[0], x->f_vector_coords[1]), 1.) * maxRadius;
                double ang = Math<double>::azimuth(x->f_vector_coords[0], x->f_vector_coords[1]);
                vecX = Math<double>::abscissa(rad, ang);
                vecY = Math<double>::ordinate(rad, ang);
			}
			else
			{
				double rad = min(Math<double>::radius(x->f_vector_coords[0], x->f_vector_coords[1]), 1.) * maxRadius;
                double ang = -Math<double>::azimuth(x->f_vector_coords[0], x->f_vector_coords[1]);
                vecX = Math<double>::abscissa(rad, ang);
                vecY = Math<double>::ordinate(rad, ang);
			}
						
			jgraphics_set_source_jrgba(g, &x->f_color_velocity);
			jgraphics_arc(g, vecX, vecY, pointSize, 0., HOA_2PI);
			jgraphics_fill_preserve(g);
			jgraphics_set_source_rgba(g, 0.2, 0.2, 0.2, 1.);
			jgraphics_stroke(g);
		}
		jbox_end_layer((t_object*)x, view, hoa_sym_vectors_layer);
	}
	
	jbox_paint_layer((t_object *)x, view, hoa_sym_vectors_layer, 0., 0.);
}
Ejemplo n.º 3
0
void draw_background(t_space *x,  t_object *view, t_rect *rect)
{
	int i;
	double y1, y2, rotateAngle;
	t_jmatrix transform;

	t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("background_layer"), rect->width, rect->height);
	
	if (g) 
	{
		/* Background ************************************/
		jgraphics_rectangle_rounded(g, 0.5, 0.5, rect->width-1.,  rect->height-1., 12, 12);
		jgraphics_set_source_jrgba(g, &x->f_color_background);
		jgraphics_fill_preserve(g);
		jgraphics_set_source_jrgba(g, &x->f_color_border_box);
		jgraphics_stroke(g);
		
        /* Rotation slider *******************************/
        if (x->f_shadow) {
            /* Inner shadow */
            jgraphics_set_line_width(g, 4);
            jgraphics_set_source_jrgba(g, &x->f_color_circleShadow);
            jgraphics_arc(g, x->f_center.x+0.5, x->f_center.y+0.5, (double)5.5 * x->f_rayonCircle,  0., JGRAPHICS_2PI);
            jgraphics_stroke(g);
            
            jgraphics_set_line_width(g, 4);
            jgraphics_set_source_jrgba(g, &x->f_color_circleShadow);
            jgraphics_arc(g, x->f_center.x+0.5, x->f_center.y+0.5, (double)5.8 * x->f_rayonCircle,  0., JGRAPHICS_2PI);
            jgraphics_stroke(g);
        }
        /* Circle color */
        jgraphics_set_line_width(g, 3);
        jgraphics_set_source_jrgba(g, &x->f_color_circle);
        jgraphics_arc(g, x->f_center.x, x->f_center.y, (double)5.5 * x->f_rayonCircle,  0., JGRAPHICS_2PI);
        jgraphics_stroke(g);
        
        jgraphics_set_line_width(g, 3);
        jgraphics_set_source_jrgba(g, &x->f_color_circle);
        jgraphics_arc(g, x->f_center.x, x->f_center.y, (double)5.8 * x->f_rayonCircle,  0., JGRAPHICS_2PI);
        jgraphics_stroke(g);
        
        /* Gros cercle */
		jgraphics_arc(g, x->f_center.x, x->f_center.y, 5 * x->f_rayonCircle,  0., JGRAPHICS_2PI);
		jgraphics_set_source_jrgba(g, &x->f_color_circleInner);
		jgraphics_fill(g);
		
		/* Circles ***************************************/
		for(i = 5; i > 0; i--)
		{
			if (x->f_shadow) {
				/* Inner shadow */
				jgraphics_set_line_width(g, 2);
				jgraphics_set_source_jrgba(g, &x->f_color_circleShadow);
				jgraphics_arc(g, x->f_center.x+0.5, x->f_center.y+0.5, (double)i * x->f_rayonCircle,  0., JGRAPHICS_2PI);
				jgraphics_stroke(g);
			}
			/* Circle color */
			jgraphics_set_line_width(g, 1);
			jgraphics_set_source_jrgba(g, &x->f_color_circle);
			jgraphics_arc(g, x->f_center.x, x->f_center.y, (double)i * x->f_rayonCircle,  0., JGRAPHICS_2PI);
			jgraphics_stroke(g);
		}

		/* Axes *******************************************/
		jgraphics_set_source_jrgba(g, &x->f_color_circle);
		
		jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center.x, x->f_center.y);
		jgraphics_set_matrix(g, &transform);
		for(i = 0; i < x->f_number_of_microphones; i++)
		{
			rotateAngle = (double)i/ (double)x->f_number_of_microphones * JGRAPHICS_2PI - JGRAPHICS_2PI / ((double)x->f_number_of_microphones * 2.);
			jgraphics_rotate(g, rotateAngle);
			
			y1 = 1. / 6. * x->f_rayonGlobal;
			y2 = 5. / 6. * x->f_rayonGlobal;
			
			if (x->f_shadow) 
			{
				if ( (rotateAngle <= JGRAPHICS_PI && rotateAngle > 0.) ) 
				{
					jgraphics_move_to(g, -0.5, y1-0.5);
					jgraphics_line_to(g, -0.5, y2-0.5);
				}
				else 
				{
					jgraphics_move_to(g, 0.5, y1+0.5);
					jgraphics_line_to(g, 0.5, y2+0.5);
				}
				jgraphics_set_line_width(g, 2);
				jgraphics_set_source_jrgba(g, &x->f_color_circleShadow);
				jgraphics_stroke(g);
			}
			
			jgraphics_move_to(g, 0, y1);
			jgraphics_line_to(g, 0, y2);
			jgraphics_set_source_jrgba(g, &x->f_color_circle);
			jgraphics_set_line_width(g, 1);
			jgraphics_stroke(g);
			
			jgraphics_rotate(g, -rotateAngle);
		}
		jbox_end_layer((t_object*)x, view, gensym("background_layer"));
	}
	jbox_paint_layer((t_object *)x, view, gensym("background_layer"), 0., 0.);
}
void draw_skeleton(t_meter *x,  t_object *view, t_rect *rect)
{
	t_jgraphics *g = jbox_start_layer((t_object *)x, view, hoa_sym_skeleton_layer, rect->width, rect->height);

	if (g)
	{
        double deg1, deg2, rotateAngle, ledContainerSize, ledStroke, ledMargin, ledOffset, channelWidth;
        t_jmatrix transform;
        deg1 = HOA_PI2;
        ledContainerSize = x->f_rayonExt - x->f_rayonInt - (1*4);
        ledOffset = ledContainerSize / (x->f_numleds+1);
        ledStroke = ledOffset * 0.75;
        ledMargin = ledOffset * 0.5;
        
        t_jrgba black = rgba_addContrast(x->f_color_mbg, -0.12);
        
		// Background :
        jgraphics_rectangle(g, 0., 0., rect->width, rect->height);
        jgraphics_set_source_jrgba(g, &x->f_color_bg);
        jgraphics_fill_preserve(g);
        
        // Border :
        jgraphics_set_source_jrgba(g, &black);
        jgraphics_set_line_width(g, 1);
        jgraphics_stroke(g);
        
        // Meter Background :
		jgraphics_set_source_jrgba(g, &x->f_color_mbg);
		jgraphics_set_line_width(g, (x->f_rayonExt - x->f_rayonInt) - 0.5);
		jgraphics_arc(g, x->f_center, x->f_center, x->f_rayonExt*0.5+(x->f_rayonInt*0.5), 0., HOA_2PI);
		jgraphics_stroke(g);
		jgraphics_arc_negative(g, x->f_center, x->f_center, x->f_rayonExt*0.5+(x->f_rayonInt*0.5), HOA_PI, -HOA_2PI); // due to a stroke bug !
		jgraphics_stroke(g);
		
        // skelton circles :
        if (x->f_drawmborder == 1 || x->f_drawmborder == 3)
        {
            jgraphics_set_source_jrgba(g, &black);
            jgraphics_set_line_width(g, 1);
            jgraphics_arc(g, x->f_center, x->f_center, x->f_rayonExt,  0., HOA_2PI);
            jgraphics_stroke(g);
            jgraphics_arc(g, x->f_center, x->f_center, x->f_rayonInt,  0., HOA_2PI);
            jgraphics_stroke(g);
        }
        
        if (x->f_drawledsbg)
        {
            jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center, x->f_center);
            jgraphics_set_matrix(g, &transform);
			
            // skelton separators and leds bg:
            for(ulong i = 0; i < x->f_meter->getNumberOfPlanewaves(); i++)
            {
				channelWidth = radToDeg(x->f_meter->getPlanewaveWidth(i));
                deg2 = degToRad(90. + channelWidth);
				
                rotateAngle = radToDeg(x->f_meter->getPlanewaveAzimuthMapped(i) + x->f_meter->getPlanewavesRotationX()) - (channelWidth*0.5);
                if (!x->f_rotation)
				{
                    rotateAngle += channelWidth;
                    rotateAngle *= -1;
                }
				
                jgraphics_rotate(g, degToRad(rotateAngle));
                
                // leds Background :
                jgraphics_set_line_width(g, ledStroke);
                jgraphics_set_line_cap(g, JGRAPHICS_LINE_CAP_BUTT);
                jgraphics_set_source_jrgba(g, &x->f_color_ledbg);
                for(ulong j=0; j < x->f_numleds; j++ )
                {
                    if (x->f_meter->getNumberOfPlanewaves() > 1)
					{
                        if ( x->f_meter->getNumberOfPlanewaves() < 24  && (channelWidth > 14.5))
						{
                            double tmpdeg1 = 0, tmpdeg2 = 0, tmprad = 0;
                            
                            if (x->f_direction == 0) // inside
							{
                                tmpdeg1 = deg1 + (0.008 * (j+4) * x->f_metersize);
                                tmpdeg2 = deg2 - (0.008 * (j+4) * x->f_metersize);
                                tmprad = x->f_rayonExt - (j*ledOffset) - ledMargin - 2;
                            }
							else // outside
							{
                                tmpdeg1 = deg1 + (0.008 * (x->f_numleds+3-(j)) * x->f_metersize);
                                tmpdeg2 = deg2 - (0.008 * (x->f_numleds+3-(j)) * x->f_metersize);
                                tmprad = x->f_rayonInt + (j*ledOffset) + ledMargin + 2;
                            }
                            if (tmpdeg1 < tmpdeg2)
								jgraphics_arc(g, 0, 0, tmprad,  tmpdeg1, tmpdeg2);
                            else
                                jgraphics_arc(g, 0, 0, tmprad, tmpdeg2, tmpdeg1);
                        }
                        else
						{
                            if (x->f_direction == 0)
                                jgraphics_arc_negative(g, 0, 0, x->f_rayonExt-(j*ledOffset) - ledMargin - 2, deg2, deg1);
                            else
                                jgraphics_arc_negative(g, 0, 0, x->f_rayonInt+(j*ledOffset) + ledMargin + 2, deg2, deg1);
                        }
                    }
                    else // mono
					{
                        if (x->f_direction == 0)
                            jgraphics_arc(g, 0, 0, x->f_rayonExt - (j*ledOffset) - ledMargin - 2, 0, HOA_2PI);
                        else
                            jgraphics_arc(g, 0, 0, x->f_rayonInt + (j*ledOffset) + ledMargin + 2, 0, HOA_2PI);
                    }
                    jgraphics_stroke(g);
                }
                jgraphics_rotate(g, degToRad(-rotateAngle));
            }
        }
		jbox_end_layer((t_object*)x, view, hoa_sym_skeleton_layer);
	}
	jbox_paint_layer((t_object *)x, view, hoa_sym_skeleton_layer, 0., 0.);
}