HIDDEN void create_boxes(genptr_t callBackData, int x, int y, int z, const char *UNUSED(a), fastf_t fill) { fastf_t min[3], max[3]; struct bu_vls *vp; char bufx[50], bufy[50], bufz[50]; char *nameDestination; struct voxelizeData *dataValues = (struct voxelizeData *)callBackData; sprintf(bufx, "%d", x); sprintf(bufy, "%d", y); sprintf(bufz, "%d", z); if(dataValues->threshold <= fill) { vp = bu_vls_vlsinit(); bu_vls_strcat(vp, dataValues->newname); bu_vls_strcat(vp, ".x"); bu_vls_strcat(vp, bufx); bu_vls_strcat(vp, "y"); bu_vls_strcat(vp, bufy); bu_vls_strcat(vp, "z"); bu_vls_strcat(vp, bufz); bu_vls_strcat(vp, ".s"); min[0] = (dataValues->bbMin)[0] + (x * (dataValues->sizeVoxel)[0]); min[1] = (dataValues->bbMin)[1] + (y * (dataValues->sizeVoxel)[1]); min[2] = (dataValues->bbMin)[2] + (z * (dataValues->sizeVoxel)[2]); max[0] = (dataValues->bbMin)[0] + ( (x + 1.0) * (dataValues->sizeVoxel)[0]); max[1] = (dataValues->bbMin)[1] + ( (y + 1.0) * (dataValues->sizeVoxel)[1]); max[2] = (dataValues->bbMin)[2] + ( (z + 1.0) * (dataValues->sizeVoxel)[2]); nameDestination = bu_vls_strgrab(vp); mk_rpp(dataValues->wdbp,nameDestination, min, max); mk_addmember(nameDestination, &dataValues->content.l, 0, WMOP_UNION); } }
static struct name_conv_list * Add_new_name(char *name, unsigned int obj, int type) { struct name_conv_list *ptr; if ( debug ) bu_log( "Add_new_name( %s, x%x, %d )\n", name, obj, type ); if ( type != ASSEMBLY_TYPE && type != PART_TYPE && type != CUT_SOLID_TYPE ) { bu_exit(EXIT_FAILURE, "Bad type for name (%s) in Add_new_name\n", name ); } /* Add a new name */ ptr = (struct name_conv_list *)bu_calloc( 1, sizeof( struct name_conv_list ), "Add_new_name: prev->next" ); ptr->next = (struct name_conv_list *)NULL; ptr->brlcad_name = bu_strdup( name ); ptr->obj = obj; if ( do_regex && type != CUT_SOLID_TYPE ) { regmatch_t pmatch; if ( regexec( ®_cmp, ptr->brlcad_name, 1, &pmatch, 0 ) == 0 ) { /* got a match */ bu_strlcpy( &ptr->brlcad_name[pmatch.rm_so], &ptr->brlcad_name[pmatch.rm_eo], MAX_LINE_SIZE ); } if ( debug ) bu_log( "\tafter reg_ex, name is %s\n", ptr->brlcad_name ); } else if ( type == CUT_SOLID_TYPE ) { bu_free( (char *)ptr->brlcad_name, "brlcad_name" ); ptr->brlcad_name = NULL; } ptr->solid_use_no = 0; ptr->comb_use_no = 0; if ( type != CUT_SOLID_TYPE ) { /* make sure brlcad_name is unique */ char *tmp; tmp = ptr->brlcad_name; ptr->brlcad_name = bu_strdup( Build_unique_name( ptr->brlcad_name ) ); bu_free( (char *)tmp, "brlcad_name" ); } if ( type == ASSEMBLY_TYPE ) { ptr->solid_name = NULL; return( ptr ); } else if ( type == PART_TYPE ) { struct bu_vls vls; bu_vls_init( &vls ); bu_vls_strcpy( &vls, "s." ); bu_vls_strcat( &vls, ptr->brlcad_name ); ptr->solid_name = bu_vls_strgrab( &vls ); } else { struct bu_vls vls; bu_vls_init( &vls ); bu_vls_strcpy( &vls, "s." ); bu_vls_strcat( &vls, ptr->brlcad_name ); ptr->solid_name = bu_vls_strgrab( &vls ); } /* make sure solid name is unique */ ptr->solid_name = bu_strdup( Build_unique_name( ptr->solid_name ) ); return( ptr ); }
void Make_brlcad_names( struct obj_info *part ) { struct bu_vls vls = BU_VLS_INIT_ZERO; int count=0; char *tmp_name, *ptr; Tcl_HashEntry *hash_entry=NULL; if ( use_part_name_hash ) { hash_entry = Tcl_FindHashEntry( &htbl, part->obj_name ); if ( !hash_entry ) { /* try without any name extension */ if ( (ptr=strrchr( part->obj_name, '_' )) != NULL ) { bu_vls_strncpy( &vls, part->obj_name, (ptr - part->obj_name) ); hash_entry = Tcl_FindHashEntry( &htbl, bu_vls_addr( &vls ) ); } } if ( !hash_entry ) { /* try without any name extension */ if ( (ptr=strchr( part->obj_name, '_' )) != NULL ) { bu_vls_strncpy( &vls, part->obj_name, (ptr - part->obj_name) ); hash_entry = Tcl_FindHashEntry( &htbl, bu_vls_addr( &vls ) ); } } if ( !hash_entry ) { /* try adding "-011" */ if ( (ptr=strchr( part->obj_name, '-' )) != NULL ) { bu_vls_strncpy( &vls, part->obj_name, (ptr - part->obj_name) ); bu_vls_strcat( &vls, "-011" ); hash_entry = Tcl_FindHashEntry( &htbl, bu_vls_addr( &vls ) ); } } if ( !hash_entry ) { name_not_converted++; } } bu_vls_free( &vls ); if ( hash_entry ) { tmp_name = bu_strdup( (char *)Tcl_GetHashValue( hash_entry ) ); } else { if ( use_part_name_hash ) { bu_log( "\tWarning: no name found for part %s\n", part->obj_name ); } /* make a copy of object name, then make it a legal BRL-CAD name */ if ( strlen( part->obj_name ) < 1 ) { tmp_name = bu_strdup( "s.1" ); } else { tmp_name = bu_strdup( part->obj_name ); ptr = tmp_name; while ( *ptr != '\0' ) { if ( !(isalnum( (int)*ptr ) || *ptr == '-')) { *ptr = '_'; } ptr++; } } } if ( part->obj_type == PART_TYPE ) { /* find a unique solid name */ bu_vls_printf( &vls, "s.%s", tmp_name ); if ( max_name_len ) { bu_vls_trunc( &vls, max_name_len ); } while ( db_lookup( fd_out->dbip, bu_vls_addr( &vls ), LOOKUP_QUIET ) != RT_DIR_NULL) { count++; if ( max_name_len ) { int digits = 1; int val = 10; while ( count >= val ) { digits++; val *= 10; } bu_vls_trunc( &vls, 0 ); bu_vls_printf( &vls, "s.%s", tmp_name ); bu_vls_trunc( &vls, max_name_len - digits - 1 ); bu_vls_printf( &vls, ".%d", count ); } else { bu_vls_trunc( &vls, 0 ); bu_vls_printf( &vls, "s.%s.%d", tmp_name, count ); } } part->brlcad_solid = bu_vls_strgrab( &vls ); } else { part->brlcad_solid = NULL; } /* find a unique non-primitive name */ bu_vls_printf( &vls, "%s", tmp_name ); if ( max_name_len ) { bu_vls_trunc( &vls, max_name_len ); } while ( db_lookup( fd_out->dbip, bu_vls_addr( &vls ), LOOKUP_QUIET) != RT_DIR_NULL ) { count++; if ( max_name_len ) { int digits = 1; int val = 10; while ( count >= val ) { digits++; val *= 10; } bu_vls_trunc( &vls, 0 ); bu_vls_printf( &vls, "%s", tmp_name ); bu_vls_trunc( &vls, max_name_len - digits - 1 ); bu_vls_printf( &vls, ".%d", count ); } else { bu_vls_trunc( &vls, 0 ); bu_vls_printf( &vls, "%s.%d", tmp_name, count ); } } part->brlcad_comb = bu_vls_strgrab( &vls ); switch ( part->obj_type ) { case UNKNOWN_TYPE: bu_log( "ERROR: Unknown object type for %s\n", part->obj_name ); break; case PART_TYPE: if ( use_part_name_hash ) { DO_INDENT bu_log( "part %s changed name to (%s)\n", part->obj_name, part->brlcad_comb ); } else { DO_INDENT bu_log( "part %s\n", part->brlcad_comb ); } break; case ASSEMBLY_TYPE: if ( use_part_name_hash ) { DO_INDENT bu_log( "assembly %s changed name to (%s)\n", part->obj_name, part->brlcad_comb ); } else { DO_INDENT bu_log( "assembly %s\n", part->brlcad_comb ); } break; } bu_free( tmp_name, "tmp_name" ); }
/** * find a new unique name given a list of previously used names, and * the type of naming mode that described what type of affix to use. */ static char * get_new_name(const char *name, struct db_i *dbip, Tcl_HashTable *name_tbl, Tcl_HashTable *used_names_tbl, struct ged_concat_data *cc_data) { struct bu_vls new_name = BU_VLS_INIT_ZERO; Tcl_HashEntry *ptr = NULL; char *aname = NULL; char *ret_name = NULL; int int_new=0; long num=0; RT_CK_DBI(dbip); BU_ASSERT(name_tbl); BU_ASSERT(used_names_tbl); BU_ASSERT(cc_data); if (!name) { bu_log("WARNING: encountered NULL name, renaming to \"UNKNOWN\"\n"); name = "UNKNOWN"; } ptr = Tcl_CreateHashEntry(name_tbl, name, &int_new); if (!int_new) { return (char *)Tcl_GetHashValue(ptr); } do { /* iterate until we find an object name that is not in * use, trying to accommodate the user's requested affix * naming mode. */ bu_vls_trunc(&new_name, 0); if (cc_data->copy_mode & NO_AFFIX) { if (num > 0 && cc_data->copy_mode & CUSTOM_PREFIX) { /* auto-increment prefix */ bu_vls_printf(&new_name, "%ld_", num); } bu_vls_strcat(&new_name, name); if (num > 0 && cc_data->copy_mode & CUSTOM_SUFFIX) { /* auto-increment suffix */ bu_vls_printf(&new_name, "_%ld", num); } } else if (cc_data->copy_mode & CUSTOM_SUFFIX) { /* use custom suffix */ bu_vls_strcpy(&new_name, name); if (num > 0) { bu_vls_printf(&new_name, "_%ld_", num); } bu_vls_vlscat(&new_name, &cc_data->affix); } else if (cc_data->copy_mode & CUSTOM_PREFIX) { /* use custom prefix */ bu_vls_vlscat(&new_name, &cc_data->affix); if (num > 0) { bu_vls_printf(&new_name, "_%ld_", num); } bu_vls_strcat(&new_name, name); } else if (cc_data->copy_mode & AUTO_SUFFIX) { /* use auto-incrementing suffix */ bu_vls_strcat(&new_name, name); bu_vls_printf(&new_name, "_%ld", num); } else if (cc_data->copy_mode & AUTO_PREFIX) { /* use auto-incrementing prefix */ bu_vls_printf(&new_name, "%ld_", num); bu_vls_strcat(&new_name, name); } else { /* no custom suffix/prefix specified, use prefix */ if (num > 0) { bu_vls_printf(&new_name, "_%ld", num); } bu_vls_strcpy(&new_name, name); } /* make sure it fits for v4 */ if (db_version(cc_data->old_dbip) < 5) { if (bu_vls_strlen(&new_name) > _GED_V4_MAXNAME) { bu_log("ERROR: generated new name [%s] is too long (%zu > %d)\n", bu_vls_addr(&new_name), bu_vls_strlen(&new_name), _GED_V4_MAXNAME); } return NULL; } aname = bu_vls_addr(&new_name); num++; } while (db_lookup(dbip, aname, LOOKUP_QUIET) != RT_DIR_NULL || Tcl_FindHashEntry(used_names_tbl, aname) != NULL); /* if they didn't get what they asked for, warn them */ if (num > 1) { if (cc_data->copy_mode & NO_AFFIX) { bu_log("WARNING: unable to import [%s] without an affix, imported as [%s]\n", name, bu_vls_addr(&new_name)); } else if (cc_data->copy_mode & CUSTOM_SUFFIX) { bu_log("WARNING: unable to import [%s] as [%s%s], imported as [%s]\n", name, name, bu_vls_addr(&cc_data->affix), bu_vls_addr(&new_name)); } else if (cc_data->copy_mode & CUSTOM_PREFIX) { bu_log("WARNING: unable to import [%s] as [%s%s], imported as [%s]\n", name, bu_vls_addr(&cc_data->affix), name, bu_vls_addr(&new_name)); } } /* we should now have a unique name. store it in the hash */ ret_name = bu_vls_strgrab(&new_name); Tcl_SetHashValue(ptr, (ClientData)ret_name); (void)Tcl_CreateHashEntry(used_names_tbl, ret_name, &int_new); bu_vls_free(&new_name); return ret_name; }