def readdxf(infile): infile = infile.readlines() file_index = 0 block_record = [] block_record_start_flag = False block_record_id_flag = False block_record_end_flag = False while block_record_end_flag == False: infile[file_index] = infile[file_index].strip() if infile[file_index] == 'BLOCK_RECORD': block_record_start_flag = True bloc = Block_Record() elif infile[file_index] == '5': block_record_id_flag = True elif block_record_start_flag == True and block_record_id_flag == True: bloc.name = infile[file_index] #l = copy.copy(bloc) block_record.append(bloc) #when using outside of class, you can append directly without the danger of overwriting block_record_start_flag = False block_record_id_flag = False elif infile[file_index] == 'ENDTAB': if infile[file_index+2].strip() == 'ENDSEC': block_record_start_flag = False block_record_id_flag = False block_record_end_flag = True file_index += 1 block_start_flag = False return block_record
def readdxf(infile): infile = infile.readlines() file_index = 0 block_record = [] block_record_start_flag = False block_record_id_flag = False block_record_end_flag = False #block record collection program start #goes through dxf file and collects the unique ids of the blocks while block_record_end_flag == False: infile[file_index] = infile[file_index].strip() if infile[file_index] == 'BLOCK_RECORD': block_record_start_flag = True bloc_rec = Block_Record() elif infile[file_index] == '5': block_record_id_flag = True elif block_record_start_flag == True and block_record_id_flag == True: bloc_rec.name = infile[file_index] #l = copy.copy(bloc_rec) block_record.append(bloc_rec) #when using outside of class, you can append directly without the danger of overwriting block_record_start_flag = False block_record_id_flag = False elif infile[file_index] == 'ENDTAB': if infile[file_index+2].strip() == 'ENDSEC': block_record_start_flag = False block_record_id_flag = False block_record_end_flag = True file_index += 1 #block record collection program end block_list = [] block_section_end_flag = False #block collection program start while block_section_end_flag == False: block_id_flag = False block_acbdblockbegin_flag = False block_end_flag = False line_flag = False polyline_flag = False infile[file_index] = infile[file_index].strip() if infile[file_index] == 'BLOCK': block_start_flag = True bloc = Block() elif block_start_flag == True and infile[file_index] == '330': block_id_flag = True elif block_start_flag == True and block_id_flag == True: bloc.id = infile[file_index] block_id_flag = False elif infile[file_index] == 'AcDbBlockBegin' and block_start_flag == True: acbdblockbegin_flag = True elif infile[file_index] == '2' and acbdblockbegin_flag == True and block_start_flag == True: bloc.name = infile[file_index+1].strip() elif infile[file_index] == 'AcDbLine' and acbdblockbegin_flag == True and block_start_flag == True: line_flag = True elif line_flag == True and acbdblockbegin_flag == True and block_start_flag == True: if infile[file_index] == '10' and infile[file_index+2].strip() == '20': lin = Line(bloc.name) lin.x_start = entities[index+1].strip() lin.y_start = entities[index+3].strip() lin.x_end = entities[index+7].strip() lin.y_end = entities[index+9].strip() bloc.object_list['line'].append(lin) line_flag = False elif infile[file_index] == 'AcDbPolyline' and acbdblockbegin_flag == True and block_start_flag == True: polyline_flag = True elif polyline_flag == True and acbdblockbegin_flag == True and block_start_flag == True: if infile[file_index] == '10' and infile[file_index+2].strip() == '20': poly = Polyline(bloc.name) x_coordinates = entities[file_index+1:file_index+14:4].strip() y_coordinates = entities[file_index+3:file_index+16:4].strip() x_coordinates = [float(item) for item in self.x_coordinates] y_coordinates = [float(item) for item in self.y_coordinates] poly.x_bl = min(self.x_coordinates) poly.y_bl = min(self.y_coordinates) poly.x_tr = max(self.x_coordinates) poly.y_tr = max(self.y_coordinates) bloc.object_list['poly'].append(poly) polyline_flag = False elif infile[file_index] == 'AcDbBlockEnd' and acbdblockbegin_flag == True and block_start_flag == True: acbdblockbegin_flag = False block_start_flag = False block_list.append(bloc) elif infile[file_index] == 'ENDSEC': block_section_end_flag = True block_id_flag = False file_index += 1