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))
Beispiel #3
0
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))
Beispiel #4
0
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)
Beispiel #6
0
#!/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)
Beispiel #7
0
 def setUp(self):
     self.acad = Autocad(True)
     self.doc = self.acad.app.Documents.Add()
     print('Current', self.doc.Name)
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)