

#include <stdio.h>
#include <stdlib.h>
#include <uf.h>
#include <uf_brep.h>
#include <uf_obj.h>
#include <uf_object_types.h>
#include <uf_part.h>

/* 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; i<tree_depth; i++)  printf ("   ");
        switch (child_topology->type)
        {
        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
*************************************************************************/


