/*! \brief ADD \param gs surface (geosurf) \param pt */ int _viewcell_tri_interp(geosurf * gs, Point3 pt) { typbuff *buf; buf = gs_get_att_typbuff(gs, ATT_TOPO, 0); return (viewcell_tri_interp(gs, buf, pt, 0)); }
/*! \brief ADD \param gs surface (geosurf) \param bgn begin point \param end end point \param f first \param l last */ void interp_first_last(geosurf * gs, float *bgn, float *end, Point3 f, Point3 l) { f[X] = bgn[X]; f[Y] = bgn[Y]; l[X] = end[X]; l[Y] = end[Y]; if (Flat) { f[Z] = l[Z] = gs->att[ATT_TOPO].constant; } else { viewcell_tri_interp(gs, Ebuf, f, 0); viewcell_tri_interp(gs, Ebuf, l, 0); } return; }
/*! \brief ADD Need to think about translations - If user translates surface, sites should automatically go with it, but translating sites should translate it relative to surface on which it's displayed Handling mask checking here \todo prevent scaling by 0 \param gp site (geosite) \param gs surface (geosurf) \param do_fast (unused) \return 0 \return 1 */ int gpd_2dsite(geosite * gp, geosurf * gs, int do_fast) { float site[3], konst; float size; int src, check, marker, color; geopoint *gpt; typbuff *buf; GLdouble modelMatrix[16], projMatrix[16]; GLint viewport[4]; GLint window[4]; if (GS_check_cancel()) { return (0); } if (gs) { gs_update_curmask(gs); src = gs_get_att_src(gs, ATT_TOPO); if (src == CONST_ATT) { konst = gs->att[ATT_TOPO].constant; } else { buf = gs_get_att_typbuff(gs, ATT_TOPO, 0); } /* Get viewport parameters for view check */ gsd_getwindow(window, viewport, modelMatrix, projMatrix); gsd_pushmatrix(); gsd_do_scale(1); gsd_translate(gs->x_trans, gs->y_trans, gs->z_trans); gsd_linewidth(gp->width); check = 0; color = gp->color; marker = gp->marker; size = gp->size; for (gpt = gp->points; gpt; gpt = gpt->next) { if (!(++check % CHK_FREQ)) { if (GS_check_cancel()) { gsd_linewidth(1); gsd_popmatrix(); return (0); } } site[X] = gpt->p3[X] + gp->x_trans - gs->ox; site[Y] = gpt->p3[Y] + gp->y_trans - gs->oy; if (gs_point_is_masked(gs, site)) { continue; } /* TODO: set other dynamic attributes */ if (gp->attr_mode & ST_ATT_COLOR) { color = gpt->iattr; } if (src == MAP_ATT) { if (viewcell_tri_interp(gs, buf, site, 1)) { /* returns 0 if outside or masked */ site[Z] += gp->z_trans; if (gsd_checkpoint (site, window, viewport, modelMatrix, projMatrix)) continue; else /* ACS_MODIFY_OneLine site_attr management - was: gpd_obj(gs, color, size, marker, site); */ gpd_obj_site_attr(gs, gp, gpt, site); } } else if (src == CONST_ATT) { if (gs_point_in_region(gs, site, NULL)) { site[Z] = konst + gp->z_trans; if (gsd_checkpoint (site, window, viewport, modelMatrix, projMatrix)) continue; else /* ACS_MODIFY_OneLine site_attr management - was: gpd_obj(NULL, color, size, marker, site); */ gpd_obj_site_attr(NULL, gp, gpt, site); } } } gsd_linewidth(1); gsd_popmatrix(); } return (1); }