def uniqueId(self, old_id, make_new_id=True): self._deprecated( 'uniqueId', _('{} is now a method in the SvgDocumentElement class. ' ' Use `self.svg.get_unique_id(old_id)` instead.')) return self.svg.get_unique_id(old_id)
def getDocumentWidth(self): self._deprecated( 'getDocumentWidth', _('{} is now a property of the SvgDocumentElement class. ' 'Use `self.svg.width` instead.')) return self.svg.get('width')
def selected(self): self._deprecated( 'selected', _('{} is now a dict in the svg. Use `self.svg.selected`.')) return self.svg.selected
def effect(self): if np is None: raise inkex.AbortExtension( _("Failed to import the numpy or numpy.linalg modules." " These modules are required by this extension. Please install them." " On a Debian-like system this can be done with the command, " "sudo apt-get install python-numpy.")) if len(self.svg.selection) != 2: raise inkex.AbortExtension( _("This extension requires two selected objects.")) obj, envelope = self.svg.selection if isinstance(obj, (inkex.PathElement, inkex.Group)): if isinstance(envelope, inkex.PathElement): path = envelope.path.transform( envelope.composed_transform()).to_superpath() if len(path) < 1 or len(path[0]) < 4: raise inkex.AbortExtension( _("This extension requires that the second path be four nodes long." )) dip = np.zeros((4, 2), dtype=FLOAT) for i in range(4): dip[i][0] = path[0][i][1][0] dip[i][1] = path[0][i][1][1] # Get bounding box plus any extra composed transform of parents. bbox = obj.bounding_box(obj.getparent().composed_transform()) sip = np.array( [[bbox.left, bbox.bottom], [bbox.left, bbox.top], [bbox.right, bbox.top], [bbox.right, bbox.bottom]], dtype=FLOAT) else: if isinstance(envelope, inkex.Group): raise inkex.AbortExtension( _("The second selected object is a group, not a" " path.\nTry using Object->Ungroup.")) raise inkex.AbortExtension( _("The second selected object is not a path.\nTry using" " the procedure Path->Object to Path.")) else: raise inkex.AbortExtension( _("The first selected object is neither a path nor a group.\nTry using" " the procedure Path->Object to Path.")) solmatrix = np.zeros((8, 8), dtype=FLOAT) free_term = np.zeros(8, dtype=FLOAT) for i in (0, 1, 2, 3): solmatrix[i][0] = sip[i][0] solmatrix[i][1] = sip[i][1] solmatrix[i][2] = 1 solmatrix[i][6] = -dip[i][0] * sip[i][0] solmatrix[i][7] = -dip[i][0] * sip[i][1] solmatrix[i + 4][3] = sip[i][0] solmatrix[i + 4][4] = sip[i][1] solmatrix[i + 4][5] = 1 solmatrix[i + 4][6] = -dip[i][1] * sip[i][0] solmatrix[i + 4][7] = -dip[i][1] * sip[i][1] free_term[i] = dip[i][0] free_term[i + 4] = dip[i][1] res = lin.solve(solmatrix, free_term) projmatrix = np.array( [[res[0], res[1], res[2]], [res[3], res[4], res[5]], [res[6], res[7], 1.0]], dtype=FLOAT) self.process_object(obj, projmatrix)
def addDocumentUnit(self, value): self._deprecated( 'addDocumentUnit', _('{} is now a method in the SvgDocumentElement class. ' 'Use `self.svg.add_unit(value)` instead.')) return self.svg.add_unit(value)
def current_layer(self): self._deprecated( 'current_layer', _('{} is now a method in the svg. Use `self.svg.get_current_layer()` instead.' )) return self.svg.get_current_layer()
def xpathSingle(self, xpath): self._deprecated( 'xpathSingle', _('{} is now a new method in the SvgDocumentElement class. ' 'Use `self.svg.getElement(path)` instead.')) return self.svg.getElement(xpath)
def unittouu(self, string): self._deprecated( 'unittouu', _('{} is now a method in the SvgDocumentElement class. ' 'Use `self.svg.unittouu(str)` instead.')) return self.svg.unittouu(string)
def getselected(self): self._deprecated('getselected', _('{} has been removed'))
def getElementById(self, eid): self._deprecated('getElementById',\ _('{} is now a method in the SvgDocumentElement class. Use `self.svg.getElementById(eid)` instead.')) return self.svg.getElementById(eid)
def selected(self): self._deprecated( 'selected', _('{} is now a dict in the SvgDocumentElement class. Use `self.svg.selected`.' )) return dict([(elem.get('id'), elem) for elem in self.svg.selected])
def view_center(self): self._deprecated('view_center',\ _('{} is now a method in the SvgDocumentElement class. Use `self.svg.get_center_position()` instead.')) return self.svg.namedview.center
def current_layer(self): self._deprecated('current_layer',\ _('{} is now a method in the SvgDocumentElement class. Use `self.svg.get_current_layer()` instead.')) return self.svg.get_current_layer()
def getDocumentHeight(self): self._deprecated( 'getDocumentHeight', _('{} is now a property of the SvgDocumentElement class. ' 'Use `self.svg.height` instead.')) return self.svg.get('height')
def getParentNode(self, node): self._deprecated('getParentNode',\ _('{} is no longer in use. Use the lxml `.getparent()` method instead.')) return node.getparent()
def getDocumentUnit(self): self._deprecated( 'getDocumentUnit', _('{} is now a property of the SvgDocumentElement class. ' 'Use `self.svg.unit` instead.')) return self.svg.unit
def getNamedView(self): self._deprecated('getNamedView',\ _('{} is now a property of the SvgDocumentElement class. ' 'Use `self.svg.namedview` to access this element.')) return self.svg.namedview
def uutounit(self, val, unit): self._deprecated( 'uutounit', _('{} is now a method in the SvgDocumentElement class. ' 'Use `self.svg.uutounit(value, unit)` instead.')) return self.svg.uutounit(val, unit)
def createGuide(self, posX, posY, angle): from .elements import Guide self._deprecated('createGuide',\ _('{} is now a method of the namedview element object. ' 'Use `self.svg.namedview.add(Guide().move_to(x, y, a))` instead.')) return self.svg.namedview.add(Guide().move_to(posX, posY, angle))
def effect(self): self._deprecated( 'effect', _('{} method is now a required method. It should ' 'be created on {cls}, even if it does nothing.'))
def args(self): self._deprecated('args', _('self.args[-1] is now self.options.input_file.')) return self._args
def view_center(self): self._deprecated( 'view_center', _('{} is now a method in the svg. Use `self.svg.namedview.center` instead.' )) return self.svg.namedview.center
def svg_file(self): self._deprecated('svg_file', _('self.svg_file is now self.options.input_file.')) return self.options.input_file
def getdocids(self): self._deprecated( 'getdocids', _('Use `self.svg.get_ids()` instead of {} and `doc_ids`.')) self._doc_ids = None self.svg.ids.clear()
def save(self, stream): pngs = OrderedDict() valid = False for node in self.svg.xpath("/svg:svg/*[name()='g' or @style][@id]"): if not len(node): # pylint: disable=len-as-condition # Ignore empty layers continue valid = True node_id = node.get('id') name = node.get("inkscape:label", node_id) pngs[name] = take_snapshot(self.document, dirname=self.tempdir, name=name, dpi=int(self.options.dpi), export_id=node_id, export_id_only=True, export_area_page=True, export_background_opacity=int( bool(self.options.background))) if not valid: inkex.errormsg( _('This extension requires at least one non empty layer.')) return xcf = os.path.join(self.tempdir, "{}.xcf".format(self.docname)) script_fu = """ (tracing 1) (define (png-to-layer img png_filename layer_name) (let* ( (png (car (file-png-load RUN-NONINTERACTIVE png_filename png_filename))) (png_layer (car (gimp-image-get-active-layer png))) (xcf_layer (car (gimp-layer-new-from-drawable png_layer img))) ) (gimp-image-add-layer img xcf_layer -1) (gimp-drawable-set-name xcf_layer layer_name) ) ) (let* ( (img (car (gimp-image-new 200 200 RGB))) ) (gimp-image-set-resolution img {dpi} {dpi}) (gimp-image-undo-disable img) (for-each (lambda (names) (png-to-layer img (car names) (cdr names)) ) (map cons '("{files}") '("{names}")) ) (gimp-image-resize-to-layers img) """.format(dpi=self.options.dpi, files='" "'.join(pngs.values()), names='" "'.join(list(pngs))) if self.options.guides: for dim, guides in self.get_guides(): script_fu += """ (for-each (lambda ({d}Guide) (gimp-image-add-{d}guide img {d}Guide) ) '({g}) )""".format(d=dim, g=guides) # Grid if self.options.grid: for fu_let in self.get_grid(): script_fu += "\n" + fu_let + "\n" script_fu += """ (gimp-image-undo-enable img) (gimp-file-save RUN-NONINTERACTIVE img (car (gimp-image-get-active-layer img)) "{xcf}" "{xcf}")) (gimp-quit 0) """.format(xcf=xcf) call('gimp', "-b", "-", i=True, batch_interpreter="plug-in-script-fu-eval", stdin=script_fu) with open(xcf, 'rb') as fhl: stream.write(fhl.read())