/* In loop, * update fs. * For example, if user clicks mouse at (p.x,p.y) to pick a single new focus, * int closest_fine_node; * find_closest_active_node(hierarchy, p.x, p.y, &closest_fine_node); * fs->num_foci = 1; * fs->foci_nodes[0] = closest_fine_node; * fs->x_foci[0] = hierarchy->geom_graphs[cur_level][closest_fine_node].x_coord; * fs->y_foci[0] = hierarchy->geom_graphs[cur_level][closest_fine_node].y_coord; * set_active_levels(hierarchy, fs->foci_nodes, fs->num_foci); * positionAllItems(hierarchy, fs, parms) */ void changetopfishfocus(topview * t, float *x, float *y, float *z, int num_foci) { focus_t *fs = t->fs; int i; int closest_fine_node; int cur_level = 0; Hierarchy *hp = t->h; refresh_old_values(t); fs->num_foci = num_foci; for (i = 0; i < num_foci; i++) { find_closest_active_node(hp, x[i], y[i], &closest_fine_node); fs->foci_nodes[i] = closest_fine_node; fs->x_foci[i] = hp->geom_graphs[cur_level][closest_fine_node].x_coord; fs->y_foci[i] = hp->geom_graphs[cur_level][closest_fine_node].y_coord; } set_active_levels(hp, fs->foci_nodes, fs->num_foci, &(t->parms.level)); view->Topview->parms.repos.width =(int) (view->bdxRight-view->bdxLeft); view->Topview->parms.repos.height =(int) (view->bdyTop-view->bdyBottom); positionAllItems(hp, fs, &(t->parms.repos)); t->animate=1; if(t->animate) { view->active_frame=0; g_timer_start(view->timer); } }
void infotopfisheye(topview * t, float *x, float *y, float *z) { Hierarchy *hp = t->fisheyeParams.h; int closest_fine_node; find_closest_active_node(hp, *x, *y, &closest_fine_node); /* hp->geom_graphs[0][closest_fine_node].x_coord; hp->geom_graphs[0][closest_fine_node].y_coord;*/ }
void changetopfishfocus(topview * t, float *x, float *y, float *z, int num_foci) { gvcolor_t cl; focus_t *fs = t->fisheyeParams.fs; int i; int closest_fine_node; int cur_level = 0; Hierarchy *hp = t->fisheyeParams.h; refresh_old_values(t); fs->num_foci = num_foci; for (i = 0; i < num_foci; i++) { find_closest_active_node(hp, x[i], y[i], &closest_fine_node); fs->foci_nodes[i] = closest_fine_node; fs->x_foci[i] = hp->geom_graphs[cur_level][closest_fine_node].x_coord; fs->y_foci[i] = hp->geom_graphs[cur_level][closest_fine_node].y_coord; } view->Topview->fisheyeParams.repos.width = (int) (view->bdxRight - view->bdxLeft); view->Topview->fisheyeParams.repos.height = (int) (view->bdyTop - view->bdyBottom); colorxlate(get_attribute_value ("topologicalfisheyefinestcolor", view, view->g[view->activeGraph]), &cl, RGBA_DOUBLE); view->Topview->fisheyeParams.srcColor.R = (float) cl.u.RGBA[0]; view->Topview->fisheyeParams.srcColor.G = (float) cl.u.RGBA[1]; view->Topview->fisheyeParams.srcColor.B = (float) cl.u.RGBA[2]; colorxlate(get_attribute_value ("topologicalfisheyecoarsestcolor", view, view->g[view->activeGraph]), &cl, RGBA_DOUBLE); view->Topview->fisheyeParams.tarColor.R = (float) cl.u.RGBA[0]; view->Topview->fisheyeParams.tarColor.G = (float) cl.u.RGBA[1]; view->Topview->fisheyeParams.tarColor.B = (float) cl.u.RGBA[2]; sscanf(agget (view->g[view->activeGraph], "topologicalfisheyedistortionfactor"), "%lf", &view->Topview->fisheyeParams.repos.distortion); sscanf(agget (view->g[view->activeGraph], "topologicalfisheyefinenodes"), "%d", &view->Topview->fisheyeParams.level.num_fine_nodes); sscanf(agget (view->g[view->activeGraph], "topologicalfisheyecoarseningfactor"), "%lf", &view->Topview->fisheyeParams.level.coarsening_rate); sscanf(agget (view->g[view->activeGraph], "topologicalfisheyedist2limit"), "%d", &view->Topview->fisheyeParams.hier.dist2_limit); sscanf(agget(view->g[view->activeGraph], "topologicalfisheyeanimate"), "%d", &view->Topview->fisheyeParams.animate); set_active_levels(hp, fs->foci_nodes, fs->num_foci, &(t->fisheyeParams.level)); positionAllItems(hp, fs, &(t->fisheyeParams.repos)); view->Topview->fisheyeParams.animate = 1; if (t->fisheyeParams.animate) { view->active_frame = 0; g_timer_start(view->timer); } }