int r_face( /* convert a face */ int ac, char **av ) { static int nfaces; int myi = invert; char *mat; register int i; register C_VERTEX *cv; FVECT v; /* check argument count and type */ if (ac < 4) return(MG_EARGC); if ((mat = material()) == NULL) /* get material */ return(MG_EBADMAT); if (ac <= 5) { /* check for smoothing */ C_VERTEX *cva[5]; for (i = 1; i < ac; i++) { if ((cva[i-1] = c_getvert(av[i])) == NULL) return(MG_EUNDEF); if (is0vect(cva[i-1]->n)) break; } if (i < ac) i = ISFLAT; else i = flat_tri(cva[0]->p, cva[1]->p, cva[2]->p, cva[0]->n, cva[1]->n, cva[2]->n); if (i == DEGEN) return(MG_OK); /* degenerate (error?) */ if (i == RVBENT) { myi = !myi; i = ISBENT; } else if (i == RVFLAT) { myi = !myi; i = ISFLAT; } if (i == ISBENT) { /* smoothed triangles */ do_tri(mat, cva[0], cva[1], cva[2], myi); if (ac == 5) do_tri(mat, cva[2], cva[3], cva[0], myi); return(MG_OK); } } /* spit out unsmoothed primitive */ printf("\n%s polygon %sf%d\n", mat, object(), ++nfaces); printf("0\n0\n%d\n", 3*(ac-1)); for (i = 1; i < ac; i++) { /* get, transform, print each vertex */ if ((cv = c_getvert(av[myi ? ac-i : i])) == NULL) return(MG_EUNDEF); xf_xfmpoint(v, cv->p); putv(v); } return(MG_OK); }
int main() { do_rect(); do_square(); do_tri(); do_circle(); do_trap(); return 0; }
int ged_importFg4Section(struct ged *gedp, int argc, const char *argv[]) { char *cp; char *line; char *lines; int eosFlag = 0; static const char *usage = "obj section"; GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); GED_CHECK_READ_ONLY(gedp, GED_ERROR); GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); /* must be wanting help */ if (argc == 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_HELP; } if (argc != 3) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } grid_size = GRID_BLOCK; grid_pts = (point_t *)bu_malloc(grid_size * sizeof(point_t) , "importFg4Section: grid_pts"); lines = strdup(argv[2]); cp = line = lines; FIND_NEWLINE(cp, eosFlag); bu_strlcpy(field, line+8, sizeof(field)); group_id = atoi(field); bu_strlcpy(field, line+16, sizeof(field)); comp_id = atoi(field); region_id = group_id * 1000 + comp_id; if (comp_id > 999) { bu_log("Illegal component id number %d, changed to 999\n", comp_id); comp_id = 999; } bu_strlcpy(field, line+24, sizeof(field)); mode = atoi(field); if (mode != 1 && mode != 2) { bu_log("Illegal mode (%d) for group %d component %d, using volume mode\n", mode, group_id, comp_id); mode = 2; } while (!eosFlag) { ++cp; line = cp; FIND_NEWLINE(cp, eosFlag); if (!bu_strncmp(line, "GRID", 4)) do_grid(line); else if (!bu_strncmp(line, "CTRI", 4)) do_tri(line); else if (!bu_strncmp(line, "CQUAD", 4)) do_quad(line); } make_bot_object(argv[1], gedp->ged_wdbp); free((void *)lines); bu_free((void *)grid_pts, "importFg4Section: grid_pts"); /* free memory associated with globals */ bu_free((void *)faces, "importFg4Section: faces"); bu_free((void *)thickness, "importFg4Section: thickness"); bu_free((void *)facemode, "importFg4Section: facemode"); faces = NULL; thickness = NULL; facemode = NULL; return TCL_OK; }
int wdb_importFg4Section_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, int argc, char **argv) { char *cp; char *line; char *lines; int eosFlag = 0; if (argc != 3) { struct bu_vls vls; bu_vls_init(&vls); bu_vls_printf(&vls, "helplib_alias wdb_importFg4Section %s", argv[0]); Tcl_Eval(interp, bu_vls_addr(&vls)); bu_vls_free(&vls); return TCL_ERROR; } grid_size = GRID_BLOCK; grid_pts = (point_t *)bu_malloc(grid_size * sizeof(point_t) , "importFg4Section: grid_pts"); lines = strdup(argv[2]); cp = line = lines; FIND_NEWLINE(cp, eosFlag); bu_strlcpy(field, line+8, sizeof(field)); group_id = atoi(field); bu_strlcpy(field, line+16, sizeof(field)); comp_id = atoi(field); region_id = group_id * 1000 + comp_id; if (comp_id > 999) { bu_log( "Illegal component id number %d, changed to 999\n", comp_id ); comp_id = 999; } bu_strlcpy(field, line+24, sizeof(field)); mode = atoi(field); if (mode != 1 && mode != 2) { bu_log("Illegal mode (%d) for group %d component %d, using volume mode\n", mode, group_id, comp_id); mode = 2; } while (!eosFlag) { ++cp; line = cp; FIND_NEWLINE(cp, eosFlag); if (!strncmp(line, "GRID", 4)) do_grid(line); else if (!strncmp(line, "CTRI", 4)) do_tri(line); else if (!strncmp(line, "CQUAD", 4)) do_quad(line); } make_bot_object(argv[1], wdbp); free((void *)lines); bu_free((void *)grid_pts, "importFg4Section: grid_pts"); /* free memory associated with globals */ bu_free((void *)faces, "importFg4Section: faces"); bu_free((void *)thickness, "importFg4Section: thickness"); bu_free((void *)facemode, "importFg4Section: facemode"); faces = NULL; thickness = NULL; facemode = NULL; return TCL_OK; }