#include #include #include #include #include #include #include /* Recursive routine to print an indented topology tree.*/ print_topology_tree ( UF_BREP_topology_t *parent_topology, int child_ndx, UF_BREP_topology_t *child_topology, int tree_depth ) { int i,unique_id,grand_child_ndx; tag_t ug_tag; for (i=0; itype) { case UF_BREP_SOLID_TOPO: printf ("Solid"); break; case UF_BREP_SHEET_TOPO: printf ("Sheet"); break; case UF_BREP_TRIMSURF_TOPO: printf ("Trimsurf"); break; case UF_BREP_SHELL_TOPO: printf ("Shell"); break; case UF_BREP_FACE_TOPO: printf ("Face"); break; case UF_BREP_LOOP_TOPO: printf ("Loop"); break; case UF_BREP_FIN_TOPO: printf ("Fin"); break; case UF_BREP_EDGE_TOPO: printf ("Edge"); break; case UF_BREP_VERTEX_TOPO: printf ("Vertex"); break; } UF_BREP_ask_identifier(child_topology,&unique_id); printf(": UGtag=%d, id=%d\n", child_topology->tag, unique_id); for (grand_child_ndx=0; grand_child_ndx < child_topology->num_children; grand_child_ndx++) print_topology_tree( child_topology, grand_child_ndx, child_topology->children[grand_child_ndx].child, tree_depth+1); } main() { tag_t body; UF_BREP_topology_p_t topo; tag_t part; UF_PART_load_status_t part_status; UF_BREP_geometry_t geometry; UF_BREP_state_p_t states; int nstates; int ntopo; UF_BREP_topology_p_t tdx; /* topology element */ int cdx; /* child index */ UF_initialize(); UF_PART_open("tetrahedron.prt",&part,&part_status); /* * At this point, some means is employed to determine which body * to treat. We assume the variable body has been set as a result * of this process. */ UF_BREP_ask_topology(body,0,&topo,&nstates,&states); print_topology_tree(NULL,0,topo,0); UF_BREP_release_topology(&topo); UF_terminate(); } /************************************************************************* The program might produce the following topology tree listing: Solid: UGtag=375, id=206 Shell: UGtag=0, id=209 Face: UGtag=382, id=261 Loop: UGtag=0, id=225 Fin: UGtag=0, id=224 Edge: UGtag=400, id=227 Vertex: UGtag=0, id=223 Vertex: UGtag=0, id=221 Fin: UGtag=0, id=216 Edge: UGtag=398, id=236 Vertex: UGtag=0, id=215 Vertex: UGtag=0, id=223 Fin: UGtag=0, id=226 Edge: UGtag=397, id=238 Vertex: UGtag=0, id=221 Vertex: UGtag=0, id=215 Face: UGtag=381, id=256 Loop: UGtag=0, id=229 Fin: UGtag=0, id=222 Edge: UGtag=400, id=227 Vertex: UGtag=0, id=223 Vertex: UGtag=0, id=221 Fin: UGtag=0, id=230 Edge: UGtag=396, id=247 Vertex: UGtag=0, id=217 Vertex: UGtag=0, id=221 Fin: UGtag=0, id=228 Edge: UGtag=395, id=232 Vertex: UGtag=0, id=223 Vertex: UGtag=0, id=217 Face: UGtag=380, id=253 Loop: UGtag=0, id=250 Fin: UGtag=0, id=249 Edge: UGtag=396, id=247 Vertex: UGtag=0, id=217 Vertex: UGtag=0, id=221 Fin: UGtag=0, id=251 Edge: UGtag=397, id=238 Vertex: UGtag=0, id=221 Vertex: UGtag=0, id=215 Fin: UGtag=0, id=252 Edge: UGtag=399, id=214 Vertex: UGtag=0, id=217 Vertex: UGtag=0, id=215 Face: UGtag=379, id=255 Loop: UGtag=0, id=234 Fin: UGtag=0, id=233 Edge: UGtag=398, id=236 Vertex: UGtag=0, id=215 Vertex: UGtag=0, id=223 Fin: UGtag=0, id=231 Edge: UGtag=395, id=232 Vertex: UGtag=0, id=223 Vertex: UGtag=0, id=217 Fin: UGtag=0, id=235 Edge: UGtag=399, id=214 Vertex: UGtag=0, id=217 Vertex: UGtag=0, id=215 *************************************************************************/