void rt_label_vlist_verts(struct bn_vlblock *vbp, struct bu_list *src, fastf_t *mat, double sz, double mm2local) { struct bn_vlist *vp; struct bu_list *vhead; char label[256]; vhead = bn_vlblock_find(vbp, 255, 255, 255); /* white */ for (BU_LIST_FOR(vp, bn_vlist, src)) { register int i; register int nused = vp->nused; register int *cmd = vp->cmd; register point_t *pt = vp->pt; for (i = 0; i < nused; i++, cmd++, pt++) { /* default coordinates label */ /* XXX Skip polygon markers? */ sprintf(label, " %g, %g, %g", (*pt)[0]*mm2local, (*pt)[1]*mm2local, (*pt)[2]*mm2local); bn_vlist_3string(vhead, vbp->free_vlist_hd, label, (*pt), mat, sz); } } }
void rt_label_vidx_verts(struct bn_vlblock *vbp, struct bu_list *v_list, fastf_t *mat, double sz, double UNUSED(mm2local)) { struct bu_list* vhead; struct vtxlabel* curr_vl; char label[256]; vhead = bn_vlblock_find(vbp, 255, 255, 255); /* white */ for( BU_LIST_FOR(curr_vl, vtxlabel, v_list) ) { sprintf(label, " %lu", curr_vl->index ); bn_vlist_3string(vhead, vbp->free_vlist_hd, label, curr_vl->coord, mat, sz); } }
void rt_label_vlist_faces(struct bn_vlblock* vbp, struct bu_list* f_list, fastf_t *mat, double sz, double UNUSED(mm2local) ) { struct bu_list* vhead; struct face* curr_f; char label[256]; point_t avg_pt; vhead = bn_vlblock_find(vbp, 255, 255, 255); /* white */ for( BU_LIST_FOR(curr_f, face, f_list) ) { avg_pt[0] = (curr_f->min_pt[0] + curr_f->max_pt[0]) / 2; avg_pt[1] = (curr_f->min_pt[1] + curr_f->max_pt[1]) / 2; avg_pt[2] = (curr_f->min_pt[2] + curr_f->max_pt[2]) / 2; sprintf(label, " %d", (int)curr_f->index ); bn_vlist_3string(vhead, vbp->free_vlist_hd, label, avg_pt, mat, sz); } }
int rt_process_uplot_value(register struct bu_list **vhead, struct bn_vlblock *vbp, FILE *fp, register int c, double char_size, int mode) { mat_t mat; const struct uplot *up; #define CARG_LEN 256 #define ARG_LEN 6 char carg[CARG_LEN]; fastf_t arg[ARG_LEN]; vect_t a, b; point_t last_pos; static point_t lpnt; /* last point of a move/draw series */ static int moved = 0; /* moved since color change */ memset(carg, 0, sizeof(char)*CARG_LEN); memset(arg, 0, sizeof(fastf_t)*ARG_LEN); #undef ARG_LEN #undef CARG_LEN /* look it up */ if (c < 'A' || c > 'z') { up = &rt_uplot_error; } else { up = &rt_uplot_letters[ c - 'A' ]; } if (up->targ == TBAD) { fprintf(stderr, "Lee : Bad command '%c' (0x%02x)\n", c, c); return -1; } if (up->narg > 0) { if (mode == PL_OUTPUT_MODE_BINARY) rt_uplot_get_args(fp, up, carg, arg); else rt_uplot_get_text_args(fp, up, carg, arg); } switch (c) { case 's': case 'w': case 'S': case 'W': /* Space commands, do nothing. */ break; case 'm': case 'o': /* 2-D move */ arg[Z] = 0; BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_MOVE); VMOVE(lpnt, arg); moved = 1; break; case 'M': case 'O': /* 3-D move */ BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_MOVE); VMOVE(lpnt, arg); moved = 1; break; case 'n': case 'q': /* * If no move command was issued since the last color * change, insert one now using the last point from a * move/draw. */ if (!moved) { BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, lpnt, BN_VLIST_LINE_MOVE); moved = 1; } /* 2-D draw */ arg[Z] = 0; BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_DRAW); VMOVE(lpnt, arg); break; case 'N': case 'Q': /* * If no move command was issued since the last color * change, insert one now using the last point from a * move/draw. */ if (!moved) { BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, lpnt, BN_VLIST_LINE_MOVE); moved = 1; } /* 3-D draw */ BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_DRAW); VMOVE(lpnt, arg); break; case 'l': case 'v': /* 2-D line */ VSET(a, arg[0], arg[1], 0.0); VSET(b, arg[2], arg[3], 0.0); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, a, BN_VLIST_LINE_MOVE); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, b, BN_VLIST_LINE_DRAW); break; case 'L': case 'V': /* 3-D line */ VSET(a, arg[0], arg[1], arg[2]); VSET(b, arg[3], arg[4], arg[5]); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, a, BN_VLIST_LINE_MOVE); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, b, BN_VLIST_LINE_DRAW); break; case 'p': case 'x': /* 2-D point */ arg[Z] = 0; BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_MOVE); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_DRAW); break; case 'P': case 'X': /* 3-D point */ BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_MOVE); BN_ADD_VLIST(vbp->free_vlist_hd, *vhead, arg, BN_VLIST_LINE_DRAW); break; case 'C': /* Color */ *vhead = rt_vlblock_find(vbp, carg[0], carg[1], carg[2]); moved = 0; break; case 't': /* Text string */ MAT_IDN(mat); if (BU_LIST_NON_EMPTY(*vhead)) { struct bn_vlist *vlp; /* Use coordinates of last op */ vlp = BU_LIST_LAST(bn_vlist, *vhead); VMOVE(last_pos, vlp->pt[vlp->nused-1]); } else { VSETALL(last_pos, 0); } bn_vlist_3string(*vhead, vbp->free_vlist_hd, carg, last_pos, mat, char_size); break; } return 0; }