/*! \brief Draw point set \param id point set id */ void GP_draw_site(int id) { geosurf *gs; geosite *gp; int i; float n, yo, xo, e; gp = gp_get_site(id); GS_get_region(&n, &yo, &xo, &e); /* kind of sloppy - maybe site files should have an origin, too */ if (gp) { if (gp->use_z && gp->has_z) { gpd_3dsite(gp, xo, yo, 0); } else { for (i = 0; i < gp->n_surfs; i++) { gs = gs_get_surf(gp->drape_surf_id[i]); if (gs) { gpd_2dsite(gp, gs, 0); G_debug(5, "Drawing site %d on Surf %d", id, gp->drape_surf_id[i]); } } } } return; }
/*! \brief Remove geosurf struct from list \param id surface id */ void gs_delete_surf(int id) { geosurf *fs; G_debug(5, "gs_delete_surf"); fs = gs_get_surf(id); if (fs) { gs_free_surf(fs); } return; }
/*! \brief Draw vector set (fast mode) \todo Seems to be broken, nothing is drawn \param vid vector set id */ void GV_draw_fastvect(int vid) { geosurf *gs; geovect *gv; int i; gv = gv_get_vect(vid); if (gv) { for (i = 0; i < gv->n_surfs; i++) { gs = gs_get_surf(gv->drape_surf_id[i]); if (gs) { gvd_vect(gv, gs, 1); } } } return; }
int Nviz_set_cplane_here(nv_data *data, int cplane, float sx, float sy) { float x, y, z, len, los[2][3]; float dx, dy, dz; float n, s, w, e; Point3 realto, dir; int id; geosurf *gs; if (GS_get_selected_point_on_surface(sx, sy, &id, &x, &y, &z)) { gs = gs_get_surf(id); if (gs) { realto[X] = x - gs->ox + gs->x_trans; realto[Y] = y - gs->oy + gs->y_trans; realto[Z] = z + gs->z_trans; } else return 0; } else { if (gsd_get_los(los, (short)sx, (short)sy)) { len = GS_distance(Gv.from_to[FROM], Gv.real_to); GS_v3dir(los[FROM], los[TO], dir); GS_v3mult(dir, len); realto[X] = Gv.from_to[FROM][X] + dir[X]; realto[Y] = Gv.from_to[FROM][Y] + dir[Y]; realto[Z] = Gv.from_to[FROM][Z] + dir[Z]; } else return 0; } Nviz_get_cplane_translation(data, cplane, &dx, &dy, &dz); GS_get_region(&n, &s, &w, &e); dx = realto[X] - (e - w) / 2.; dy = realto[Y] - (n - s) / 2.; Nviz_set_cplane_translation(data, cplane, dx, dy, dz); return 1; }
/*! \brief Update drape surfaces Call after surface is deleted */ void gv_update_drapesurfs(void) { geovect *gv; int i, j; for (gv = Vect_top; gv; gv = gv->next) { if (gv->n_surfs) { for (i = 0; i < gv->n_surfs; i++) { if (gv->drape_surf_id[i]) { if (NULL == gs_get_surf(gv->drape_surf_id[i])) { for (j = i; j < gv->n_surfs - 1; j++) { gv->drape_surf_id[j] = gv->drape_surf_id[j + 1]; } gv->n_surfs = gv->n_surfs - 1; } } } } } }
/*! \brief Update drape surfaces Call after surface is deleted */ void gp_update_drapesurfs(void) { geosite *gp; int i, j; for (gp = Site_top; gp; gp = gp->next) { if (gp->n_surfs) { for (i = 0; i < gp->n_surfs; i++) { if (gp->drape_surf_id[i]) { if (NULL == gs_get_surf(gp->drape_surf_id[i])) { for (j = i; j < gp->n_surfs - 1; j++) { gp->drape_surf_id[j] = gp->drape_surf_id[j + 1]; } gp->n_surfs = gp->n_surfs - 1; } } } } } return; }