# first we need to find our main stamp with name 'f4' block = acad.find_one('blockreference', layout.Block, lambda x: 'f4' in x.EffectiveName) if not block: continue block_pos = APoint(block.InsertionPoint) # approximate position of drawing name name_pos = block_pos + APoint(-90, 12) for mt in acad.iter_objects("mtext", layout.Block): if name_pos.distance_to(mt.InsertionPoint) < 5.0: text = mt.TextString yield text.replace(" \\P", " ").replace("\\P", " ") break print def main(): filename = sys.argv[1] if sys.argv[1:] else 'names.txt' output = codecs.open(filename, "w", encoding='utf-8') acad = Autocad() for doc in acad.app.Documents: print(doc.Name) output.write(u'%s\n' % ('-' * 50)) output.write(u" %s\n" % doc.Name) output.write(u'%s\n' % ('-' * 50)) for drawing_name in iter_drawings_names(acad, doc): output.write(u'%s\n' % drawing_name) if __name__ == "__main__": with utils.timing(): main()
continue total_modules = 0 row = -1 while row < table.Rows: row += 1 item_str = mtext_to_string(table.GetText(row, 2)) item_str = item_str.replace(u'четырехполюсный', u'4-х')\ .replace(u'трехполюсный', u'3-х')\ .replace(u'двухполюсный', u'2-х')\ .replace(u'однополюсный', u'1-но') m = re.match('.*(\d)-([xх]|но).*', item_str) if m: n_modules = int(m.group(1)) quantity = int(mtext_to_string(table.GetText(row, 3))) row += 1 # skip next row else: m = re.match('(\d)[PР].*', item_str) if not m: continue n_modules = int(m.group(1)) quantity = int(mtext_to_string(table.GetText(row - 1, 3))) total_modules += n_modules * quantity print('%-20s| %s' % (layout.Name, total_modules)) if __name__ == "__main__": with timing(): main() input(u'\nPress enter to exit...')