void draw_microphones_points(t_space *x, t_object *view, t_rect *rect) { t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("microphones_points_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_source_jrgba(g, &x->f_color_points); double loudspeaker_angle = CICM_2PI / (double)x->f_number_of_microphones; double factor1 = 4. * x->f_rayonCircle; double factor2 = x->f_rayonCircle; for(int i = 0; i < x->f_number_of_microphones; i++) { jgraphics_set_source_jrgba(g, &x->f_color_points); double angle = loudspeaker_angle * (double)(i) + CICM_PI2; jgraphics_arc(g, Tools::abscisse(x->f_microphonesValues[i] * factor1 + factor2, angle), Tools::ordinate(x->f_microphonesValues[i] * factor1 + factor2, angle), 3., 0., JGRAPHICS_2PI); jgraphics_fill(g); } jbox_end_layer((t_object*)x, view, gensym("microphones_points_layer")); } jbox_paint_layer((t_object *)x, view, gensym("microphones_points_layer"), 0., 0.); }
void uisimp_paint(t_uisimp *x, t_object *view) { t_jgraphics *g; t_rect rect; t_jrgba rgba, textcolor; t_jfont *jf; t_jtextlayout *jtl; char text[16]; long inset = x->j_inset; g = (t_jgraphics*) patcherview_get_jgraphics(view); jbox_get_rect_for_view(&x->j_box.b_ob, view, &rect); if (x->j_shape == EXAMP_SQUARE) jgraphics_rectangle(g, inset, inset, rect.width - (inset * 2), rect.height - (inset * 2)); else if (x->j_shape == EXAMP_CIRCLE) { jgraphics_arc(g, rect.width * .5, rect.height * .5, (rect.width * .5) - (inset * 2), 0, JGRAPHICS_2PI); jgraphics_close_path(g); } else if (x->j_shape == EXAMP_ANGLE) { jgraphics_move_to(g, inset * 2, inset); jgraphics_line_to(g, rect.width - (inset * 2), inset); jgraphics_line_to(g, rect.width - (inset * 2), inset * 2); jgraphics_line_to(g, rect.width - (inset * 2), rect.height - (inset * 2)); jgraphics_line_to(g, rect.width - (inset * 2), rect.height - inset); jgraphics_line_to(g, inset * 2, rect.height - (inset * 2)); jgraphics_line_to(g, inset, rect.height - (inset * 3)); jgraphics_line_to(g, inset, inset * 2); jgraphics_line_to(g, inset * 2, inset); jgraphics_close_path(g); } if (x->j_mouse_is_down) { jbox_get_color((t_object *)x, &rgba); jgraphics_set_source_jrgba(g, &rgba); } else jgraphics_set_source_rgba(g, 0, 0, 0, 1.0); jgraphics_fill(g); // draw counter jf = jfont_create(jbox_get_fontname((t_object *)x)->s_name, jbox_get_font_slant((t_object *)x), jbox_get_font_weight((t_object *)x), jbox_get_fontsize((t_object *)x)); jtl = jtextlayout_create(); sprintf(text,"%d",x->j_mouse_counter); jtextlayout_set(jtl, text, jf, 5, 5, rect.width - 10, rect.height- 10, JGRAPHICS_TEXT_JUSTIFICATION_CENTERED, JGRAPHICS_TEXTLAYOUT_NOWRAP); textcolor.red = textcolor.green = textcolor.blue = 1; textcolor.alpha = 1; jtextlayout_settextcolor(jtl, &textcolor); jtextlayout_draw(jtl, g); jtextlayout_destroy(jtl); jfont_destroy(jf); }
void draw_background(t_scope *x, t_object *view, t_rect *rect) { t_jmatrix transform; t_jrgba black, white; double contrastBlack = 0.14; double contrastWhite = 0.06; black = white = x->f_colorBackground; black.red = Tools::clip_min(black.red -= contrastBlack); black.green = Tools::clip_min(black.green -= contrastBlack); black.blue = Tools::clip_min(black.blue -= contrastBlack); white.red = Tools::clip_max(white.red += contrastWhite, 1.); white.green = Tools::clip_max(white.green += contrastWhite, 1.); white.blue = Tools::clip_max(white.blue += contrastWhite, 1.); t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("background_layer"), rect->width, rect->height); if (g) { /* Circles */ for(int i = 5; i > 0; i--) { //inner shadow jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &white); jgraphics_arc(g, long(x->f_center.x)+0.5, long(x->f_center.y)+0.5, (double)i * x->f_rayonCircle, 0., CICM_2PI); jgraphics_stroke(g); jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &black); jgraphics_arc(g, long(x->f_center.x)-0.5, long(x->f_center.y)-0.5, (double)i * x->f_rayonCircle, 0., CICM_2PI); jgraphics_stroke(g); } jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center.x, x->f_center.y); jgraphics_set_matrix(g, &transform); double coso, sino, angle, x1, y1, x2, y2, rad1, rad2; rad1 = 1. / 6. * x->f_rayonGlobal; rad2 = 5. / 6. * x->f_rayonGlobal; for(int i = 0; i < (x->f_order * 2 + 2); i++) { jgraphics_set_source_jrgba(g, &white); angle = ( (double)i/(x->f_order * 2 + 2) * CICM_2PI ) - ( 0.5/(x->f_order * 2 + 2) * CICM_2PI ); coso = cos(angle); sino = sin(angle); x1 = rad1 * coso; y1 = rad1 * sino; x2 = rad2 * coso; y2 = rad2 * sino; if(Tools::isInsideDeg(angle / CICM_2PI * 360., 45, 225)) { jgraphics_move_to(g, x1 - 0.5, y1 - 0.5); jgraphics_line_to(g, x2 - 0.5, y2 - 0.5); } else { jgraphics_move_to(g, x1 + 0.5, y1 + 0.5); jgraphics_line_to(g, x2 + 0.5, y2 + 0.5); } jgraphics_stroke(g); jgraphics_set_source_jrgba(g, &black); jgraphics_move_to(g, x1, y1); jgraphics_line_to(g, x2, y2); jgraphics_stroke(g); } jbox_end_layer((t_object*)x, view, gensym("background_layer")); } jbox_paint_layer((t_object *)x, view, gensym("background_layer"), 0., 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_background(t_scope *x, t_object *view, t_rect *rect) { int i; double y1, y2, rotateAngle; t_jmatrix transform; t_jrgba black, white; double contrastBlack = 0.12; double contrastWhite = 0.08; black = white = x->f_colorBackground; black.red = Tools::clip_min(black.red -= contrastBlack); black.green = Tools::clip_min(black.green -= contrastBlack); black.blue = Tools::clip_min(black.blue -= contrastBlack); white.red = Tools::clip_max(white.red += contrastWhite, 1.); white.green = Tools::clip_max(white.green += contrastWhite, 1.); white.blue = Tools::clip_max(white.blue += contrastWhite, 1.); t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("background_layer"), rect->width, rect->height); if (g) { /* Background */ /* jgraphics_set_source_jrgba(g, &x->f_colorBackground); jgraphics_rectangle_rounded(g, 0., 0., rect->width, rect->height, 6, 6); jgraphics_fill(g); */ /* Circles */ for(i = 5; i > 0; i--) { //inner shadow jgraphics_set_line_width(g, 2); jgraphics_set_source_jrgba(g, &white); jgraphics_arc(g, x->f_center.x+0.5, x->f_center.y+0.5, (double)i * x->f_rayonCircle, 0., CICM_2PI); jgraphics_stroke(g); jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &black); jgraphics_arc(g, x->f_center.x, x->f_center.y, (double)i * x->f_rayonCircle, 0., CICM_2PI); jgraphics_stroke(g); } /* Axes */ jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center.x, x->f_center.y); jgraphics_set_matrix(g, &transform); jgraphics_set_source_jrgba(g, &black); //for(i = 0; i < 12; i++) for(i = 0; i < (x->f_order * 2 + 2) ; i++) { rotateAngle = ( (double)i/(x->f_order * 2 + 2) * CICM_2PI ) - ( 0.5/(x->f_order * 2 + 2) * CICM_2PI ); jgraphics_rotate(g, rotateAngle); y1 = 1. / 6. * x->f_rayonGlobal; y2 = 5. / 6. * x->f_rayonGlobal; if ( (rotateAngle <= CICM_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, &white); jgraphics_stroke(g); jgraphics_move_to(g, 0, y1); jgraphics_line_to(g, 0, y2); jgraphics_set_source_jrgba(g, &black); 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_background(t_hoa_scope *x, t_object *view, t_rect *rect) { int i; double y1, y2, rotateAngle; t_jmatrix transform; t_jrgba black, white; black = white = x->f_color_bg; black.red = clip_min(black.red - contrast_black, 0.); black.green = clip_min(black.green - contrast_black, 0.); black.blue = clip_min(black.blue - contrast_black, 0.); white.red = clip_max(white.red + contrast_white, 1.); white.green = clip_max(white.green + contrast_white, 1.); white.blue = clip_max(white.blue + contrast_white, 1.); t_jgraphics *g = jbox_start_layer((t_object *)x, view, hoa_sym_background_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); for(i = 0; i < (x->f_order * 2 + 2) ; i++) { rotateAngle = ((double)i / (x->f_order * 2 + 2) * HOA_2PI ) - (0.5 / (x->f_order * 2 + 2) * HOA_2PI); jgraphics_rotate(g, rotateAngle); y1 = x->f_radius / 5.; y2 = x->f_radius; if(rotateAngle > HOA_PI2 && rotateAngle < HOA_PI + HOA_PI2) { jgraphics_move_to(g, -1, long(y1)); jgraphics_line_to(g, -1, long(y2)); } else { jgraphics_move_to(g, 1, long(y1)); jgraphics_line_to(g, 1, long(y2)); } jgraphics_set_line_width(g, 2); jgraphics_set_source_jrgba(g, &white); jgraphics_stroke(g); jgraphics_move_to(g, 0, y1); jgraphics_line_to(g, 0, y2); jgraphics_set_source_jrgba(g, &black); jgraphics_set_line_width(g, 1); jgraphics_stroke(g); jgraphics_rotate(g, -rotateAngle); } jgraphics_matrix_init(&transform, 1, 0, 0, 1, x->f_center, x->f_center); jgraphics_set_matrix(g, &transform); for(i = 5; i > 0; i--) { jgraphics_set_line_width(g, 2); jgraphics_set_source_jrgba(g, &white); jgraphics_arc(g, 1, 1, (double)i / 5. * x->f_radius, 0., HOA_2PI); jgraphics_stroke(g); jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &black); jgraphics_arc(g, 0, 0, (double)i / 5.* x->f_radius, 0., HOA_2PI); jgraphics_stroke(g); } jbox_end_layer((t_object*)x, view, hoa_sym_background_layer); } jbox_paint_layer((t_object *)x, view, hoa_sym_background_layer, 0., 0.); }
void hoa_space_draw_background(t_hoa_space *x, t_object *view, t_rect *rect) { t_jgraphics *g = jbox_start_layer((t_object *)x, view, gensym("background_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); t_jrgba black = jrgba_addContrast(x->f_color_inner_circle, -0.12); t_jrgba white = jrgba_addContrast(x->f_color_inner_circle, 0.08); jgraphics_set_source_jrgba(g, &x->f_color_inner_circle); jgraphics_arc(g, 0., 0., x->f_radius_ext_circle, 0.f, JGRAPHICS_2PI); jgraphics_fill(g); for(int i = NUMBER_OF_CIRCLES; i > 0; i--) { jgraphics_set_line_width(g, 2); jgraphics_set_source_jrgba(g, &white); jgraphics_arc(g, -0.5, -0.5, (double)i * x->f_radius_circle, 0.f, JGRAPHICS_2PI); jgraphics_stroke(g); jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &black); jgraphics_arc(g, 0, 0, (double)i * x->f_radius_circle, 0.f, JGRAPHICS_2PI); jgraphics_stroke(g); } double coso, sino, angle, x1, y1, x2, y2, rad1, rad2, offset; offset = CICM_PI / (double)x->f_number_of_microphones; rad1 = 1. / (double)NUMBER_OF_CIRCLES * x->f_radius_ext_circle; rad2 = x->f_radius_ext_circle; for(int i = 0; i < x->f_number_of_microphones; i++) { jgraphics_set_source_jrgba(g, &white); angle = i * CICM_2PI / (double)x->f_number_of_microphones + offset + CICM_PI2; coso = cosf(angle); sino = sinf(angle); x1 = rad1 * coso; y1 = rad1 * sino; x2 = rad2 * coso; y2 = rad2 * sino; if(Tools::isInsideDeg(angle / CICM_2PI * 360., 45, 225)) { jgraphics_move_to(g, x1 - 0.5, y1 - 0.5); jgraphics_line_to(g, x2 - 0.5, y2 - 0.5); } else { jgraphics_move_to(g, x1 + 0.5, y1 + 0.5); jgraphics_line_to(g, x2 + 0.5, y2 + 0.5); } jgraphics_stroke(g); jgraphics_set_source_jrgba(g, &black); jgraphics_move_to(g, x1, y1); jgraphics_line_to(g, x2, y2); jgraphics_stroke(g); } jbox_end_layer((t_object*)x, view, gensym("background_layer")); } jbox_paint_layer((t_object *)x, view, gensym("background_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.); }
void draw_leds(t_meter *x, t_object *view, t_rect *rect) { t_jgraphics *g = jbox_start_layer((t_object *)x, view, hoa_sym_leds_layer, rect->width, rect->height); if (g) { int i, j, nbLed, tepidLimit, warmLimit, hotLimit; long nLoudSpeak = x->f_meter->getNumberOfPlanewaves(); double deg1, deg2, rotateAngle, ledContainerSize, ledMargin, ledOffset, meter_dB, min_dB_to_display, channelWidth; double tmpdeg1, tmpdeg2, tmprad; t_jrgba ledColor; t_jmatrix transform; deg1 = HOA_PI2; nbLed = x->f_numleds+1; ledContainerSize = x->f_rayonExt - x->f_rayonInt - 4; ledOffset = ledContainerSize / nbLed; ledMargin = ledOffset * 0.50; hotLimit = x->f_numleds - x->f_nhotleds; warmLimit = hotLimit - x->f_nwarmleds; tepidLimit = warmLimit - x->f_ntepidleds; min_dB_to_display = -1 * ( (x->f_numleds * x->f_dbperled) - (x->f_dbperled * 0.5) ); jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center, x->f_center); jgraphics_set_matrix(g, &transform); jgraphics_set_line_cap(g, JGRAPHICS_LINE_CAP_BUTT); for(i = 0; i < nLoudSpeak; i++) { // dB (negatif) de -240 à 0; meter_dB = x->f_meter->getPlanewaveEnergy(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)); if ( meter_dB > min_dB_to_display ) // si on est en dessous pas la peine de dessiner { // leds : jgraphics_set_line_width(g, ledMargin); for(j=0; j<nbLed-1; j++) { if ( ( j < nbLed-1 ) && ( meter_dB > min_dB_to_display + (x->f_dbperled * j) ) ) { if ( j < tepidLimit ) ledColor = x->f_color_cold; else if ( j < warmLimit ) ledColor = x->f_color_tepid; else if ( j < hotLimit ) ledColor = x->f_color_warm; else ledColor = x->f_color_hot; jgraphics_set_source_jrgba(g, &ledColor); jgraphics_set_line_width(g, ledMargin); if (nLoudSpeak > 1) { if ( nLoudSpeak < 24 && (channelWidth > 14.5 )) { tmpdeg1 = 0, tmpdeg2 = 0, tmprad = 0; if (x->f_direction == 0) // inside { tmpdeg1 = deg1 + (0.01 * (j+4) * x->f_metersize); tmpdeg2 = deg2 - (0.01 * (j+4) * x->f_metersize); tmprad = x->f_rayonExt - (j*ledOffset) - ledMargin - 2; } else // outside { tmpdeg1 = deg1 + (0.01 * (nbLed+3-(j)) * x->f_metersize); tmpdeg2 = deg2 - (0.01 * (nbLed+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 { 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); } else { break; } } } if(x->f_meter->getPlanewaveOverLed(i)) { jgraphics_set_source_jrgba(g, &x->f_color_over); jgraphics_set_line_width(g, ledMargin); if (nLoudSpeak > 1) { if ( nLoudSpeak < 24 && (channelWidth > 14.5 )) { double tmpdeg1 = 0, tmpdeg2 = 0, tmprad = 0; if (x->f_direction == 0) // inside { tmpdeg1 = deg1 + (0.01 * (nbLed+1) * x->f_metersize); tmpdeg2 = deg2 - (0.01 * (nbLed+1) * x->f_metersize); tmprad = x->f_rayonInt + ledMargin + 1; } else // outside { tmpdeg1 = deg1+(0.008 * 3 * x->f_metersize); tmpdeg2 = deg2-(0.008 * 3 * x->f_metersize); tmprad = x->f_rayonExt - ledMargin - 1; } if (tmpdeg1 < tmpdeg2) jgraphics_arc(g, 0, 0, tmprad, tmpdeg1, tmpdeg2); else jgraphics_arc_negative(g, 0, 0, tmprad, tmpdeg1, tmpdeg2); } else { if (x->f_direction == 0) // inside jgraphics_arc_negative(g, 0, 0, x->f_rayonInt + ledMargin + 1, deg2, deg1); else // outside jgraphics_arc_negative(g, 0, 0, x->f_rayonExt - ledMargin - 1, deg2, deg1); } } else { if (x->f_direction == 0) jgraphics_arc(g, 0, 0, x->f_rayonInt + ledMargin, 0, HOA_2PI); else jgraphics_arc(g, 0, 0, x->f_rayonExt - ledMargin, 0, HOA_2PI); } jgraphics_stroke(g); } jgraphics_rotate(g, degToRad(-rotateAngle)); } jbox_end_layer((t_object*)x, view, hoa_sym_leds_layer); } jbox_paint_layer((t_object *)x, view, hoa_sym_leds_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.); }
void draw_harmonics(t_hoa_3d_scope *x, t_object *view, t_rect *rect) { t_jgraphics *g = jbox_start_layer((t_object *)x, view, hoa_sym_harmonics_layer, rect->width, rect->height); if (g) { char pathLength; t_jmatrix transform; t_jrgba color_pos; t_jrgba color_neg; t_jrgba black = rgba_addContrast(x->f_color_bg, -contrast_black); t_jrgba white = rgba_addContrast(x->f_color_bg, contrast_white); jgraphics_rotate(g, HOA_PI); jgraphics_set_line_width(g, 1); jgraphics_matrix_init(&transform, 1, 0, 0, -1, x->f_center, x->f_center); jgraphics_set_matrix(g, &transform); for(ulong j = 0; j < x->f_scope->getNumberOfRows() * 0.5; j++) { pathLength = 0; double constrast = (j - x->f_scope->getNumberOfRows() * 0.5) / (double)x->f_scope->getNumberOfRows(); color_pos = rgba_addContrast(x->f_color_ph, constrast); color_neg = rgba_addContrast(x->f_color_nh, constrast); jgraphics_set_source_jrgba(g, &color_pos); double elev = x->f_scope->getPointElevation(j); for(int i = 0; i < x->f_scope->getNumberOfColumns(); i++) { double azim = x->f_scope->getPointAzimuth(i); double value = x->f_scope->getPointValue(j, i); if(value >= 0) { value *= x->f_radius; if(!pathLength) { jgraphics_move_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); pathLength++; } else { jgraphics_line_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); } } } jgraphics_close_path(g); if(pathLength) jgraphics_fill(g); pathLength = 0; jgraphics_set_source_jrgba(g, &color_neg); for(int i = 0; i < x->f_scope->getNumberOfColumns(); i++) { double azim = x->f_scope->getPointAzimuth(i); double value = x->f_scope->getPointValue(j, i); if(value < 0) { value *= -x->f_radius; if(!pathLength) { jgraphics_move_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); pathLength++; } else { jgraphics_line_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); } } } jgraphics_close_path(g); if(pathLength) jgraphics_fill(g); } double angle, x1, x2, y1, y2, cosa, sina; for(int i = 0; i < (x->f_order * 2 + 2) ; i++) { angle = ((double)(i - 0.5) / (x->f_order * 2 + 2) * HOA_2PI); cosa = cos(angle); sina = sin(angle); x1 = cosa * x->f_radius * 0.2; y1 = sina * x->f_radius * 0.2; x2 = cosa * x->f_radius; y2 = sina * x->f_radius; jgraphics_move_to(g, x1, y1); jgraphics_line_to(g, x2, y2); jgraphics_set_line_width(g, 3); jgraphics_set_source_jrgba(g, &white); jgraphics_stroke(g); jgraphics_set_source_jrgba(g, &black); jgraphics_set_line_width(g, 1); jgraphics_stroke(g); } for(int i = 5; i > 0; i--) { jgraphics_set_line_width(g, 3); jgraphics_set_source_jrgba(g, &white); jgraphics_arc(g, 0, 0, (double)i * 0.2 * x->f_radius, 0., HOA_2PI); jgraphics_stroke(g); jgraphics_set_line_width(g, 1); jgraphics_set_source_jrgba(g, &black); jgraphics_stroke(g); } for(ulong j = (ulong)(x->f_scope->getNumberOfRows() * 0.5); j < x->f_scope->getNumberOfRows(); j++) { // positive harmonics pathLength = 0; double constrast = (j - x->f_scope->getNumberOfRows() * 0.5) / (double)x->f_scope->getNumberOfRows(); color_pos = rgba_addContrast(x->f_color_ph, constrast); color_neg = rgba_addContrast(x->f_color_nh, constrast); jgraphics_set_source_jrgba(g, &color_pos); double elev = x->f_scope->getPointElevation(j); for(int i = 0; i < x->f_scope->getNumberOfColumns(); i++) { double azim = x->f_scope->getPointAzimuth(i); double value = x->f_scope->getPointValue(j, i); if(value >= 0) { value *= x->f_radius; if(!pathLength) { jgraphics_move_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); pathLength++; } else { jgraphics_line_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); } } } jgraphics_close_path(g); if(pathLength) jgraphics_fill(g); pathLength = 0; // negative harmonics jgraphics_set_source_jrgba(g, &color_neg); for(int i = 0; i < x->f_scope->getNumberOfColumns(); i++) { double azim = x->f_scope->getPointAzimuth(i); double value = x->f_scope->getPointValue(j, i); if(value < 0) { value *= -x->f_radius; if(!pathLength) { jgraphics_move_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); pathLength++; } else { jgraphics_line_to(g, Math<double>::abscissa(value, azim,elev), Math<double>::ordinate(value, azim, elev)); } } } jgraphics_close_path(g); if(pathLength) jgraphics_fill(g); } jbox_end_layer((t_object*)x, view, hoa_sym_harmonics_layer); } jbox_paint_layer((t_object *)x, view, hoa_sym_harmonics_layer, 0., 0.); }