Example Code for api check entity

From DocR23

Jump to: navigation, search

The following sample code shows the use the ACIS Checker via api_check_entity and how to process the results from that function.

// Create a list of entities to be checked 
ENTITY_LIST entities_to_check;
...
 
// Fill in the list of entities to check 
...
 
// Set the check level to at least 30, to activate the 
// surface checks which we are looking for in this example. 
check_level.set(30);
 
// Check each entity in turn 
for(int index = 0; index<entities.count(); ++index) {
    // Get the next entity to be checked from the list 
    ENTITY* entity_to_check = entities_to_check[index];
 
    // Initialize the list of errors to null. 
    insanity_list* errors = 0;
 
    // Perform the check on the entity. 
    outcome result = api_check_entity(entity_to_check, errors);
 
    // Test that the check was performed successfully before analyzing the results 
    if(result.ok()) {
        insanity_list* this_list = errors;
 
        // Loop over all insanities found for the entity 
        for(; this_list; this_list = this_list->next()) {
            insanity_data* data = this_list->data();
 
            // For this example, we are looking for faces that 
            // have illegal surfaces with either "irregular" or 
            // "bad degeneracy" errors. Therefore we do not worry 
            // about any insanities that are not of "error" type. 
            if(data && data->get_type() == ERROR_TYPE) {
 
                // Now pick out the particular errors that we are looking for. 
                int insane_id = data->get_insane_id();
                if (IRREG_SURF == insane_id) {
 
                    // Report that the entity has an irregular surface. 
                    // We print a slightly different message depending on  
                    // whether the entity with the bad surface is the one 
                    // we checked, or one of its children. 
                    if (data->get_ent()== entity_to_check) {
                        printf("Surface of entity 0x%x is irregular.", entity_to_check);
                    }
                    else {
                        printf("Surface of entity 0x%x (owning entity 0x%x) is irregular.",
                        data->get_ent(), entity_to_check);
                    }
 
                    // Now check whether the irregularity is due to 
                    // extreme curvature on the surface. 
                    if (data->get_sub_category() == HIGH_CURVATURE) {
 
                        // It is true. Report it.                    
                        printf(" Surface has high curvature");
 
                        // Check if the data includes a parameter 
                        // position indicating the region of high curvature. 
                        // get_par_pos() sets uv and returns TRUE if 
                        // a parameter position is stored. 
                        SPApar_pos uv;
                        if (data->get_par_pos(uv)) {
                            // It does. Report this as well.                         
                            printf(" around (%g, g).", uv.u, uv.v);
                        }
                    }
                    printf("\n");
                }
                else if (SURF_BAD_DEGEN == insane_id) {
 
                    // Report that the entity has a surface with a bad 
                    // degeneracy. We print a slightly different message 
                    // depending on whether the entity with the bad surface 
                    // is the one we checked, or one of its children. 
                    if(data->get_ent() == entity_to_check) {
                        printf("Surface of entity 0x%x has a bad degeneracy.\n", entity_to_check);
                    }
                    else {
                        printf("Surface of entity 0x%x (owning entity 0x%x) has a bad degeneracy.\n",
                        data->get_ent(), entity_to_check);
                    }
                }
                else {
                    // We are not interested in this error type. Ignore it. 
                }
            }
        }
    }
    else {
        // Handle failure of api_check_entity()    
    }
 
    // Discard the returned error data for this entity. 
    ACIS_DELETE errors;
}
Personal tools