def test_bounding_box(self): """Elements can have bounding boxes""" elem = self.svg.getElementById('D') self.assertEqual(tuple(elem.bounding_box()), ((60.0, 100.0), (130.0, 170.00))) self.assertTrue(elem.bounding_box().center.is_close((80.0, 150.0))) self.assertEqual(tuple(TextElement(x='10', y='5').bounding_box()), ((10, 10), (5, 5))) group = Group(elem) self.assertEqual(elem.bounding_box(), group.bounding_box())
def test_tostring(self): """Elements can be printed as strings""" self.assertEqual(Group().tostring(), b'<g/>') elem = Group(id='bar') path = elem.add(Tspan(id='foo')) elem.transform.add_translate(50, 50) path.style['fill'] = 'red' self.assertEqual(elem.tostring(), \ b'<g transform="translate(50, 50)"><tspan id="foo" style="fill:red"/></g>')
def test_add(self): """Can add single or multiple elements with passthrough""" elem = self.svg.getElementById('D') group = elem.add(Group(id='foo')) self.assertEqual(group.get('id'), 'foo') groups = elem.add(Group(id='f1'), Group(id='f2')) self.assertEqual(len(groups), 2) self.assertEqual(groups[0].get('id'), 'f1') self.assertEqual(groups[1].get('id'), 'f2')
def test_chained_multiple_attrs(self): """Set multiple attributes at a time""" group = Group().update( attr1='A', attr2='B' ).update( attr3='C', attr4='D' ) self.assertEqual(group.get('attr1'), 'A') self.assertEqual(group.get('attr2'), 'B') self.assertEqual(group.get('attr3'), 'C') self.assertEqual(group.get('attr4'), 'D') # remove attributes, setting them to None group.update( attr1=None, attr4=None ) self.assertEqual(group.get('attr1'), None) self.assertEqual(group.get('attr2'), 'B') self.assertEqual(group.get('attr3'), 'C') self.assertEqual(group.get('attr4'), None) self.assertEqual(group.pop('attr2'), 'B') self.assertEqual(group.pop('attr3'), 'C')
def test_set_wrapped_attribute(self): """Remove wrapped attribute using .set()""" group = Group().update( transform=Transform(scale=2) ) self.assertEqual(group.transform.matrix[0][0], 2) self.assertEqual(group.transform.matrix[1][1], 2) group.update( transform=None ) self.assertEqual(group.transform, Transform())
def test_reference_count(self): """ Test inkex.element.BaseElement-derived object type is preserved on adding to group See https://gitlab.com/inkscape/extensions/-/issues/81 for details """ grp = Group() for _ in range(10): rect = Rectangle() grp.add(rect) for elem in grp: self.assertEqual(type(elem), Rectangle)
def effect(self): # create locked background layer layer = self.svg.add(Group.new('Background', id='bglayer')) layer.set('inkscape:groupmode', 'layer') layer.set('sodipodi:insensitive', 'true') # append background rectangle to layer layer.append(self.myrect())
def effect(self): #get rectangles prewiew_rects = self.myrect() #create locked preview layer layer = self.svg.add(Group.new('Preview Layer', id='previewlayer')) layer.set('inkscape:groupmode', 'layer') layer.set('sodipodi:insensitive', 'true') # append rectangles to layer layer.append(prewiew_rects[0]) layer.append(prewiew_rects[1]) layer.append(prewiew_rects[2]) layer.append(prewiew_rects[3])
def test_pop_regular_attribute(self): """Remove wrapped attribute using .pop()""" group = Group() self.assertEqual(group.get('attr1'), None) group.update( attr1="42" ) self.assertEqual(group.pop('attr1'), "42") self.assertEqual(group.pop('attr1'), None)
def test_pop_wrapped_attribute(self): """Remove wrapped attribute using .pop()""" group = Group() self.assertEqual(group.pop('transform'), Transform()) group.update( transform=Transform(scale=2) ) self.assertEqual(group.pop('transform'), Transform(scale=2)) self.assertEqual(group.pop('transform'), Transform()) self.assertRaises(AttributeError, getattr, group, 'foo')
def effect(self): with open(self.options.file_name, 'rb') as fhl: data = fhl.read() extDocument = load_svg(data) layers = extDocument.findall(inkex.addNS('g', 'svg')) layers2add = [] for layer in layers: if hasattr(layer, 'groupmode') and layer.groupmode == 'layer': if self.options.mode == IMPORT_MODE.VISIBLE.value: if (not hasattr(layer, 'style') ) or layer.style != 'display:none': layers2add.append(layer) elif self.options.mode == IMPORT_MODE.NOT_VISIBLE.value: if hasattr(layer, 'style') and layer.style == 'display:none': layers2add.append(layer) else: # all layers2add.append(deepcopy(layer)) root = self.document.getroot() if len(self.options.parent) > 0: g = Group.create(self.options.parent, True) root.append(g) g.set_random_id() root = g if self.options.with_defs == 'true': defs = extDocument.findall(inkex.addNS('defs', 'svg')) for d in defs: root.append(deepcopy(d)) d.set_random_id() for layer in layers2add: layer.label = self.options.prefix + layer.label root.append(layer) layer.set_random_id() return self.document
def test_creation(self): """Create elements with attributes""" group = Group().update(inkscape__label='Foo') self.assertEqual(group.get('inkscape:label'), 'Foo') group = Group().update(inkscape__label='Bar') self.assertEqual(group.label, 'Bar')