def main(): acad = Autocad() layout = acad.doc.ActiveLayout table = acad.find_one('table', layout.Block) if not table: return print_table_info(table, 3)
def main(): acad = Autocad() print(u'Примерный подсчет занимаемого места') print('%-20s| %s' % (u'Имя щита', u'Общее число модулей')) for layout in acad.iter_layouts(): table = acad.find_one('table', layout.Block, lambda x: x.Columns == 5) if not table: 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))
def main(): acad = Autocad() objects = None if 'i' in sys.argv[1:]: objects = acad.get_selection('Select objects') lamps = defaultdict(int) for lamp in iter_lamps(acad, objects): lamps[lamp.mark] += int(lamp.number) print('-' * 79) for mark, number in sorted(lamps.items()): print('%-20s | %s' % (mark, number))
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)
def main(): parser = optparse.OptionParser() parser.add_option('-f', '--format', choices=available_write_formats(), dest='format', metavar='FMT', default='xls', help=u"Формат файла (%s) по умолчанию - %%default" % ', '.join(available_write_formats())) parser.add_option('-m', '--model', dest='include_model', default=False, action='store_true', help=u"Включить пространство Модели в область поиска") options, args = parser.parse_args() acad = Autocad() filename = args[0] if args else u"exported_%s.%s" % (acad.doc.Name, options.format) output_table = Table() extract_tables_from_dwg(acad, output_table, not options.include_model) output_table.save(filename, options.format)
#!/usr/bin/env python # -*- coding: utf-8 -*- from pyzwcad.pyautocad import Autocad, APoint acad = Autocad(create_if_not_exists=True) acad.prompt("Hello, Autocad from Python\n") print(acad.doc.Name) p1 = APoint(0, 0) p2 = APoint(50, 25) for i in range(5): text = acad.model.AddText(u'Hi %s!' % i, p1, 2.5) acad.model.AddLine(p1, p2) acad.model.AddCircle(p1, 10) p1.y += 10 for obj in acad.iter_objects(): print(obj.ObjectName) for text in acad.iter_objects('Text'): print(text.TextString, text.InsertionPoint) for obj in acad.iter_objects(['Text', 'Line']): print(obj.ObjectName) def text_contains_3(text_obj): return '3' in text_obj.TextString text = acad.find_one('Text', predicate=text_contains_3)
def setUp(self): self.acad = Autocad(True) self.doc = self.acad.app.Documents.Add() print('Current', self.doc.Name)
class ApiTestCase(unittest.TestCase): def setUp(self): self.acad = Autocad(True) self.doc = self.acad.app.Documents.Add() print('Current', self.doc.Name) def tearDown(self): self.doc.Close(False) pass def test_points_arguments(self): model = self.acad.model p1 = APoint(0, 0, 0) for i in range(10): model.AddCircle(p1 * i, i + 1) p1 += i for circle in self.acad.iter_objects('circle'): cp = APoint(circle.Center) model.AddCircle(-cp, circle.Radius) def test_types(self): model = self.acad.model p1 = APoint(0, 0, 0) p2 = APoint(10, 10, 0) p3 = tuple(p + 10 for p in p2) model.AddLine(p1, p2) model.AddLine(p2, APoint(p3)) lines = list(self.acad.iter_objects()) self.assertEqual(len(lines), 2) self.assertEqual(lines[0].StartPoint, p1) self.assertEqual(lines[0].EndPoint, p2) self.assertEqual(lines[1].StartPoint, p2) self.assertEqual(lines[1].EndPoint, p3) # 在中望CAD中,该调用可以正常返回 # with self.assertRaises(COMError): # model.AddLine(aDouble(0, 0), APoint(0, 0, 0)) def test_text(self): model = self.acad.model text1 = u'Русский текст' text2 = u'With paragraph \PYes' t1 = model.AddText(text1, APoint(0, 0, 0), 10) t2 = model.AddText(text2, APoint(10, 10, 0), 10) self.assertEqual(type(t1.TextString), unicode) self.assertEqual(t1.TextString, text1) self.assertEqual(t2.InsertionPoint, (10, 10, 0)) self.assertNotEqual(t2.InsertionPoint, (10, 10, 1)) def test_multitext(self): model = self.acad.model text1 = 'Line1\nLine2\nLine3\\' text2 = 'Line1\\PLine2\\PLine3\\P' t1 = model.AddMText(APoint(0, 0, 0), 10, text1) t2 = model.AddMText(APoint(10, 10, 0), 10, text2) self.assertEqual(t1.TextString, text1) self.assertEqual(t2.TextString, text2) def test_iter_objects(self): model = self.acad.model p1 = APoint(0, 0, 0) p2 = APoint(10, 10, 0) n_lines = 10 n_texts = 15 for i in range(n_lines): model.AddLine(p1, p2) for i in range(n_texts): model.AddMText(p2, 10, u'Dummy') lines_count = len(list(self.acad.iter_objects('Line'))) texts_count = len(list(self.acad.iter_objects('MText'))) all_count = len(list(self.acad.iter_objects(['MText', 'Line']))) self.assertEqual(lines_count, n_lines) self.assertEqual(texts_count, n_texts) self.assertEqual(all_count, n_lines + n_texts) def test_find_objects(self): p1 = APoint(0, 0) model = self.acad.model for i in range(5): model.AddText(u'test %s' % i, p1, 2.5) def text_contains_3(text_obj): return '3' in text_obj.TextString text = self.acad.find_one('Text', predicate=text_contains_3) self.assertEqual(text.TextString, 'test 3') def test_some_constants_available(self): self.assertTrue(ACAD.acAlignmentRight)
def main(): acad = Autocad() parser = optparse.OptionParser( usage=u'%prog [опции] [файл для результатов]') parser.add_option('-f', '--format', choices=available_write_formats(), dest='format', metavar='FORMAT', default='xls', help=u"Формат файла (%s) по умолчанию - %%default" % ', '.join(available_write_formats())) parser.add_option('-k', '--known', dest='known_targets', metavar='FILE', default='', action='store', help=u'Файл с заполненым полем "Конец" и очередностью ' u' записей. По умолчанию берется из существующего файла') parser.add_option('-q', '--quiet', action='callback', callback=lambda *x: logging.disable(logging.WARNING), help=u'"Тихий" режим (не печатать в консоль)') parser.add_option('-s', '--single', dest='single_doc', action='store_true', default=False, help=u'Собрать данные только из текущего документа ' u'(Собирает из всех по умолчанию)') parser.add_option( '-c', '--no-known', dest='dont_use_known', action='store_true', default=False, help=u'Не использовать данные об очередности и поле "Конец"') options, args = parser.parse_args() output_file = args[0] if args else u"cables_from_%s.%s" % (acad.doc.Name, options.format) if not options.known_targets and not options.dont_use_known: options.known_targets = output_file known_targets = get_known_targets(options.known_targets) output_table = Table() if options.single_doc: documents = [acad.doc] else: documents = acad.app.Documents for doc in documents: try: cables = get_cables(acad, doc.Modelspace, known_targets) sorted_cables = sort_cables_by_targets(cables, known_targets) for row in sorted_cables: output_table.writerow([s for s in row]) except Exception: logger.exception('Error while processing %s', doc.Name) output_table.save(output_file, options.format)
def main(): filename = sys.argv[1] if sys.argv[1:] else 'cables_list.xls' acad = Autocad() data = list(read_cables_from_table(filename)) add_cables_list_to_autocad(acad.doc.ActiveLayout.Block, data)