From 0549127f3066a1451b7f0b5496e294ffd6761aad Mon Sep 17 00:00:00 2001 From: Alvin Penner Date: Sun, 9 Nov 2014 14:06:26 -0500 Subject: add option to read dxf input scale from file (Bug 1388851) Fixed bugs: - https://launchpad.net/bugs/1388851 (bzr r13692) --- share/extensions/dxf_input.inx | 12 +++++++++--- share/extensions/dxf_input.py | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) (limited to 'share') diff --git a/share/extensions/dxf_input.inx b/share/extensions/dxf_input.inx index d51a07c39..4488774a3 100644 --- a/share/extensions/dxf_input.inx +++ b/share/extensions/dxf_input.inx @@ -6,8 +6,12 @@ inkex.py - true - 1.0 + + + + + + 1.0 0.0 0.0 false @@ -22,9 +26,11 @@ <_param name="inputhelp" type="description" xml:space="preserve">- AutoCAD Release 13 and newer. -- assume dxf drawing is in mm. +- for manual scaling, assume dxf drawing is in mm. - assume svg drawing is in pixels, at 96 dpi. - scale factor and origin apply only to manual scaling. +- 'Automatic scaling' will fit the width of an A4 page. +- 'Read from file' uses the variable $MEASUREMENT. - layers are preserved only on File->Open, not Import. - limited support for BLOCKS, use AutoCAD Explode Blocks instead, if needed. diff --git a/share/extensions/dxf_input.py b/share/extensions/dxf_input.py index 972895cb8..f0a1296f1 100755 --- a/share/extensions/dxf_input.py +++ b/share/extensions/dxf_input.py @@ -344,7 +344,7 @@ colors = { 1: '#FF0000', 2: '#FFFF00', 3: '#00FF00', 4: '#00FFFF', 5: ' 250: '#333333', 251: '#505050', 252: '#696969', 253: '#828282', 254: '#BEBEBE', 255: '#FFFFFF'} parser = inkex.optparse.OptionParser(usage="usage: %prog [options] SVGfile", option_class=inkex.InkOption) -parser.add_option("--auto", action="store", type="inkbool", dest="auto", default=True) +parser.add_option("--scalemethod", action="store", type="string", dest="scalemethod", default="manual") parser.add_option("--scale", action="store", type="string", dest="scale", default="1.0") parser.add_option("--xmin", action="store", type="string", dest="xmin", default="0.0") parser.add_option("--ymin", action="store", type="string", dest="ymin", default="0.0") @@ -366,6 +366,7 @@ inkex.etree.SubElement(pattern, 'path', {'d': 'M4 0 l-4,4', 'stroke': '#000000', stream = open(args[0], 'r') xmax = xmin = ymin = 0.0 height = 297.0*96.0/25.4 # default A4 height in pixels +measurement = 0 # default inches line = get_line() polylines = 0 flag = 0 # (0, 1, 2, 3) = (none, LAYER, LTYPE, DIMTXT) @@ -376,7 +377,10 @@ DIMTXT = {} # store DIMENSION text sizes while line[0] and line[1] != 'BLOCKS': line = get_line() - if options.auto: + if options.scalemethod == 'file': + if line[1] == '$MEASUREMENT': + measurement = get_group('70') + elif options.scalemethod == 'auto': if line[1] == '$EXTMIN': xmin = get_group('10') ymin = get_group('20') @@ -406,7 +410,11 @@ while line[0] and line[1] != 'BLOCKS': if line[0] == '0' and line[1] == 'ENDTAB': flag = 0 -if options.auto: +if options.scalemethod == 'file': + scale = 25.4 # default inches + if measurement == 1.0: + scale = 1.0 # use mm +elif options.scalemethod == 'auto': scale = 1.0 if xmax > xmin: scale = 210.0/(xmax - xmin) # scale to A4 width @@ -414,7 +422,7 @@ else: scale = float(options.scale) # manual scale factor xmin = float(options.xmin) ymin = float(options.ymin) -desc.text = '%s - scale = %f, origin = (%f, %f), auto = %s' % (unicode(args[0], options.input_encode), scale, xmin, ymin, options.auto) +desc.text = '%s - scale = %f, origin = (%f, %f), method = %s' % (unicode(args[0], options.input_encode), scale, xmin, ymin, options.scalemethod) scale *= 96.0/25.4 # convert from mm to pixels if not layer_nodes.has_key('0'): -- cgit v1.2.3 From 3b8481a788dc641039219ba93514794fd2551b20 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 9 Nov 2014 21:23:51 +0100 Subject: From bug #1389723 Roadmap for 0.92: (this bug) ================= TODO Non-pixel units are allowed but everything in a document should use the same units including guides and grids. TODO (Guides and grids need code to do this.) DONE An extension that saves a document in pixels should be added to allow backwards compatability with 0.91. It should be possible to avoid overwriting Inkscape version until any necessary conversion is done. If a conversion appears to be needed, a pop-up can ask the author if it should be done. Roadmap for 0.91: (bug #1387864) ================= TODO: Everything should use only pixels as is (mostly) done in 0.48 (including templates). TODO: The ability to switch document units should be disabled (it's broken in several ways). TODO: Font size should be stored in pixels. DONE: Some templates in 0.48 templates do use 'mm' so there does need to be a script to convert files based on those templates to 96dpi. (bzr r13693) --- share/extensions/dpiswitcher.py | 73 +++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 29 deletions(-) (limited to 'share') diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py index b4630ae4c..d35a46597 100644 --- a/share/extensions/dpiswitcher.py +++ b/share/extensions/dpiswitcher.py @@ -35,7 +35,8 @@ class DPISwitcher(inkex.Effect): type="string", dest="switcher", default="0", help="Select the DPI switch you want") self.factor = 90.0/96.0 - self.unit = "px" + self.units = "px" + self.unitExponent = 1.0 def scaleRoot(self, svg): widthNumber = re.sub("[a-zA-Z]", "", svg.get('width')) @@ -43,13 +44,17 @@ class DPISwitcher(inkex.Effect): if svg.get('viewBox'): widthNumber = svg.get('viewBox').split(" ")[2] heightNumber = svg.get('viewBox').split(" ")[3] - widthDoc = str(float(widthNumber) * self.factor) - heightDoc = str(float(heightNumber) * self.factor) + widthDoc = str(float(widthNumber) * self.factor * self.unitExponent) + heightDoc = str(float(heightNumber) * self.factor * self.unitExponent) if svg.get('height'): svg.set('height', heightDoc) if svg.get('width'): svg.set('width', widthDoc) svg.set('viewBox',"0 0 " + widthDoc + " " + heightDoc) + self.scaleGuides(svg) + self.scaleGrid(svg) + if self.options.switcher == "1": + self.factor = self.factor * self.unitExponent xpathStr = '//svg:rect | //svg:image | //svg:path | //svg:circle | //svg:ellipse | //svg:text' elements = svg.xpath(xpathStr, namespaces=inkex.NSS) for element in elements: @@ -77,30 +82,34 @@ class DPISwitcher(inkex.Effect): if "translate" in str(element.get('transform')): result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) element.set('transform', result) - self.scaleGuides(svg) - self.scaleGrid(svg) - - def scaleGrid(self, svg): - xpathStr = '//inkscape:grid' - grids = svg.xpath(xpathStr, namespaces=inkex.NSS) - for grid in grids: - empspacingNumber = float(grid.get("empspacing")) * self.factor - spacingxNumber = float(grid.get("spacingx").replace("px", "")) * self.factor - spacingyNumber = float(grid.get("spacingy").replace("px", "")) * self.factor - originxNumber = float(grid.get("originx").replace("px", "")) * self.factor - originyNumber = float(grid.get("originy").replace("px", "")) * self.factor - grid.set("empspacing", str(empspacingNumber)) - grid.set("spacingx", str(spacingxNumber) + "px") - grid.set("spacingy", str(spacingyNumber) + "px") - grid.set("originx", str(originxNumber) + "px") - grid.set("originy", str(originyNumber) + "px") - + def scaleGuides(self, svg): xpathStr = '//sodipodi:guide' guides = svg.xpath(xpathStr, namespaces=inkex.NSS) for guide in guides: point = string.split(guide.get("position"), ",") - guide.set("position", str(float(point[0].strip()) * self.factor) + "," + str(float(point[1].strip()) * self.factor)) + guide.set("position", str(float(point[0].strip()) * self.factor ) + "," + str(float(point[1].strip()) * self.factor )) + + def scaleGrid(self, svg): + xpathStr = '//inkscape:grid' + grids = svg.xpath(xpathStr, namespaces=inkex.NSS) + for grid in grids: + if self.options.switcher == "0": + self.unitExponent = 1.0/(self.factor/self.__uuconv[grid.get("units")]) + self.factor = self.factor * self.unitExponent + grid.set("units", "px") + if grid.get("spacingx"): + spacingx = str(float(re.sub("[a-zA-Z]", "", grid.get("spacingx"))) * self.factor) + "px" + grid.set("spacingx", str(spacingx)) + if grid.get("spacingy"): + spacingy = str(float(re.sub("[a-zA-Z]", "", grid.get("spacingy"))) * self.factor) + "px" + grid.set("spacingy", str(spacingy)) + if grid.get("originx"): + originx = str(float(re.sub("[a-zA-Z]", "", grid.get("originx"))) * self.factor) + "px" + grid.set("originx", str(originx)) + if grid.get("originy"): + originy = str(float(re.sub("[a-zA-Z]", "", grid.get("originy"))) * self.factor) + "px" + grid.set("originy", str(originy)) #a dictionary of unit to user unit conversion factors __uuconv = {'in':96.0, 'pt':1.33333333333, 'px':1.0, 'mm':3.77952755913, 'cm':37.7952755913, @@ -132,15 +141,21 @@ class DPISwitcher(inkex.Effect): sys.stdout = sys.stderr svg = self.document.getroot() namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) - self.unit = namedview.get(inkex.addNS('document-units', 'inkscape')) - if self.unit and self.unit <> "px": - unitExponent = 0.0 + namedview.set(inkex.addNS('document-units', 'inkscape'), "px") + self.units = re.sub("[0-9]*\.?[0-9]", "", svg.get('width')) + if self.units and self.units <> "px": if self.options.switcher == "0": - unitExponent = 1.0/(self.factor/self.__uuconv[self.unit]) + self.unitExponent = 1.0/(self.factor/self.__uuconv[self.units]) else: - unitExponent = 1.0/(self.factor/self.__uuconvLegazy[self.unit]) - namedview.set(inkex.addNS('document-units', 'inkscape'), "px") - self.factor = self.factor * unitExponent + self.unitExponent = 1.0/(self.factor/self.__uuconvLegazy[self.units]) + ''' + else: + self.scaleGuides(svg) + self.unitExponent = 1.0 + self.scaleGrid(svg) + sys.stdout = saveout + return + ''' self.scaleRoot(svg); sys.stdout = saveout -- cgit v1.2.3 From d973faeac0f9dc8a0b100362ca93c79241b569af Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 9 Nov 2014 22:04:21 +0100 Subject: fixed a bug pointed by su_v about transformations (bzr r13694) --- share/extensions/dpiswitcher.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'share') diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py index d35a46597..57ca4f731 100644 --- a/share/extensions/dpiswitcher.py +++ b/share/extensions/dpiswitcher.py @@ -68,6 +68,18 @@ class DPISwitcher(inkex.Effect): if "scale" in str(element.get('transform')): result = re.sub(r".*?((scale).*?\))", self.scaleElement, str(element.get('transform'))) element.set('transform', result) + if "matrix" in str(element.get('transform')): + result = re.sub(r".*?((matrix).*?\))", self.translateMatrixElement, str(element.get('transform'))) + element.set('transform', result) + if "translate" in str(element.get('transform')): + result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) + element.set('transform', result) + if "matrix" in str(element.get('transform')): + result = re.sub(r".*?((matrix).*?\))", self.skewMatrixElement, str(element.get('transform'))) + element.set('transform', result) + if "skew" in str(element.get('transform')): + result = re.sub(r".*?((translate).*?\))", self.skewElement, str(element.get('transform'))) + element.set('transform', result) if "scale" not in str(element.get('transform')) and "matrix" not in str(element.get('transform')): element.set('transform', str(element.get('transform')) + "scale(" + str(self.factor) + ", " + str(self.factor) + ")") else: @@ -134,6 +146,14 @@ class DPISwitcher(inkex.Effect): translateMatrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","").split(",") return "matrix(" + translateMatrixVal[0] + "," + translateMatrixVal[1] + "," + translateMatrixVal[2] + "," + translateMatrixVal[3] + "," + str(float(translateMatrixVal[4]) * self.factor) + "," + str(float(translateMatrixVal[5]) * self.factor) + ")" + def skewElement(self, m): + skeweVal = m.group(1).replace("skew","").replace(" ","").replace("(","").replace(")","").split(",") + return "skew(" + str(float(skewVal[0]) * self.factor) + "," + str(float(skewVal[1]) * self.factor) + ")" + + def skewMatrixElement(self, m): + skewMatrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","").split(",") + return "matrix(" + skewMatrixVal[0] + "," + str(float(skewMatrixVal[1]) * self.factor) + "," + str(float(skewMatrixVal[4]) * self.factor) + "," + skewMatrixVal[3] + "," + skewMatrixVal[4] + "," + skewMatrixVal[5]+ ")" + def effect(self): if self.options.switcher == "0": self.factor = 96.0/90.0 -- cgit v1.2.3 From 7f6a9bd0980238ee25285bd23b060f6310b04ee4 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 9 Nov 2014 23:04:22 +0100 Subject: Allow shorteners transforms in DPI switcher.A bit of refactor. (bzr r13695) --- share/extensions/dpiswitcher.py | 73 ++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 27 deletions(-) (limited to 'share') diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py index 57ca4f731..051a72ee1 100644 --- a/share/extensions/dpiswitcher.py +++ b/share/extensions/dpiswitcher.py @@ -63,20 +63,14 @@ class DPISwitcher(inkex.Effect): continue if element.get('transform'): if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.scaleMatrixElement, str(element.get('transform'))) + result = re.sub(r".*?((matrix).*?\))", self.matrixElement, str(element.get('transform'))) element.set('transform', result) if "scale" in str(element.get('transform')): result = re.sub(r".*?((scale).*?\))", self.scaleElement, str(element.get('transform'))) element.set('transform', result) - if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.translateMatrixElement, str(element.get('transform'))) - element.set('transform', result) if "translate" in str(element.get('transform')): result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) element.set('transform', result) - if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.skewMatrixElement, str(element.get('transform'))) - element.set('transform', result) if "skew" in str(element.get('transform')): result = re.sub(r".*?((translate).*?\))", self.skewElement, str(element.get('transform'))) element.set('transform', result) @@ -88,12 +82,15 @@ class DPISwitcher(inkex.Effect): elements = svg.xpath(xpathStr, namespaces=inkex.NSS) for element in elements: if element.get('transform'): - if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.translateMatrixElement, str(element.get('transform'))) - element.set('transform', result) if "translate" in str(element.get('transform')): result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) element.set('transform', result) + if "matrix" in str(element.get('transform')): + result = re.sub(r".*?((matrix).*?\))", self.matrixElementNoScale, str(element.get('transform'))) + element.set('transform', result) + if "skew" in str(element.get('transform')): + result = re.sub(r".*?((translate).*?\))", self.skewElement, str(element.get('transform'))) + element.set('transform', result) def scaleGuides(self, svg): xpathStr = '//sodipodi:guide' @@ -131,28 +128,50 @@ class DPISwitcher(inkex.Effect): 'km':3543307.0866, 'pc':15.0, 'yd':3240 , 'ft':1080} def scaleElement(self, m): - scaleVal = m.group(1).replace("scale","").replace(" ","").replace("(","").replace(")","").split(",") - return "scale(" + str(float(scaleVal[0]) * self.factor) + "," + str(float(scaleVal[1]) * self.factor) + ")" + scaleVal = m.group(1).replace("scale","").replace(" ","").replace("(","").replace(")","") + total = scaleVal.count(',') + if total == 1: + scaleVal = scaleVal.split(",") + return "scale(" + str(float(scaleVal[0]) * self.factor) + "," + str(float(scaleVal[1]) * self.factor) + ")" + else: + return "scale(" + str(float(scaleVal) * self.factor) + ")" - def scaleMatrixElement(self, m): - scaleMatrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","").split(",") - return "matrix(" + str(float(scaleMatrixVal[0]) * self.factor) + "," + scaleMatrixVal[1] + "," + scaleMatrixVal[2] + "," + str(float(scaleMatrixVal[3]) * self.factor) + "," + scaleMatrixVal[4] + "," + scaleMatrixVal[5] + ")" def translateElement(self, m): - translateVal = m.group(1).replace("translate","").replace(" ","").replace("(","").replace(")","").split(",") - return "translate(" + str(float(translateVal[0]) * self.factor) + "," + str(float(translateVal[1]) * self.factor) + ")" - - def translateMatrixElement(self, m): - translateMatrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","").split(",") - return "matrix(" + translateMatrixVal[0] + "," + translateMatrixVal[1] + "," + translateMatrixVal[2] + "," + translateMatrixVal[3] + "," + str(float(translateMatrixVal[4]) * self.factor) + "," + str(float(translateMatrixVal[5]) * self.factor) + ")" + translateVal = m.group(1).replace("translate","").replace(" ","").replace("(","").replace(")","") + total = translateVal.count(',') + if total == 1: + translateVal = translateVal.split(",") + return "translate(" + str(float(translateVal[0]) * self.factor) + "," + str(float(translateVal[1]) * self.factor) + ")" + else: + return "translate(" + str(float(translateVal) * self.factor) + ")" def skewElement(self, m): - skeweVal = m.group(1).replace("skew","").replace(" ","").replace("(","").replace(")","").split(",") - return "skew(" + str(float(skewVal[0]) * self.factor) + "," + str(float(skewVal[1]) * self.factor) + ")" - - def skewMatrixElement(self, m): - skewMatrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","").split(",") - return "matrix(" + skewMatrixVal[0] + "," + str(float(skewMatrixVal[1]) * self.factor) + "," + str(float(skewMatrixVal[4]) * self.factor) + "," + skewMatrixVal[3] + "," + skewMatrixVal[4] + "," + skewMatrixVal[5]+ ")" + skeweVal = m.group(1).replace("skew","").replace(" ","").replace("(","").replace(")","") + total = skewVal.count(',') + if total == 1: + skeweVal = skewVal.split(",") + return "skew(" + str(float(skewVal[0]) * self.factor) + "," + str(float(skewVal[1]) * self.factor) + ")" + else: + return "skew(" + str(float(skewVal) * self.factor) + ")" + + def matrixElement(self, m): + matrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","") + total = matrixVal.count(',') + matrixVal = matrixVal.split(",") + if total > 2: + return "matrix(" + str(float(matrixVal[0]) * self.factor) + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + "," + str(float(matrixVal[3]) * self.factor) + "," + str(float(matrixVal[4]) * self.factor) + "," + str(float(matrixVal[5]) * self.factor) + ")" + else: + return "matrix(" + str(float(matrixVal[0]) * self.factor) + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" + + def matrixElementNoScale(self, m): + matrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","") + total = matrixVal.count(',') + matrixVal = matrixVal.split(",") + if total > 2: + return "matrix(" + matrixVal[0] + "," + str(float(matrixVal[1]) * self.factor) + "," + matrixVal[2] + "," + str(float(matrixVal[3]) * self.factor) + "," + str(float(matrixVal[4]) * self.factor) + "," + str(float(matrixVal[5]) * self.factor) + ")" + else: + return "matrix(" + matrixVal[0] + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" def effect(self): if self.options.switcher == "0": -- cgit v1.2.3 From cd6113d3cc7e7f3468b488ee5fb6c28f9576e3b9 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 9 Nov 2014 23:51:30 +0100 Subject: improve regex from DPI Switcher (bzr r13696) --- share/extensions/dpiswitcher.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'share') diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py index 051a72ee1..a1a7a1a52 100644 --- a/share/extensions/dpiswitcher.py +++ b/share/extensions/dpiswitcher.py @@ -63,16 +63,16 @@ class DPISwitcher(inkex.Effect): continue if element.get('transform'): if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.matrixElement, str(element.get('transform'))) + result = re.sub(r".*?matrix( \(|\()(.*?)\)", self.matrixElement, str(element.get('transform'))) element.set('transform', result) if "scale" in str(element.get('transform')): - result = re.sub(r".*?((scale).*?\))", self.scaleElement, str(element.get('transform'))) + result = re.sub(r".*?scale( \(|\()(.*?)\)", self.scaleElement, str(element.get('transform'))) element.set('transform', result) if "translate" in str(element.get('transform')): - result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) + result = re.sub(r".*?translate( \(|\()(.*?)\)", self.translateElement, str(element.get('transform'))) element.set('transform', result) if "skew" in str(element.get('transform')): - result = re.sub(r".*?((translate).*?\))", self.skewElement, str(element.get('transform'))) + result = re.sub(r".*?skew( \(|\()(.*?)\)", self.skewElement, str(element.get('transform'))) element.set('transform', result) if "scale" not in str(element.get('transform')) and "matrix" not in str(element.get('transform')): element.set('transform', str(element.get('transform')) + "scale(" + str(self.factor) + ", " + str(self.factor) + ")") @@ -82,14 +82,14 @@ class DPISwitcher(inkex.Effect): elements = svg.xpath(xpathStr, namespaces=inkex.NSS) for element in elements: if element.get('transform'): - if "translate" in str(element.get('transform')): - result = re.sub(r".*?((translate).*?\))", self.translateElement, str(element.get('transform'))) - element.set('transform', result) if "matrix" in str(element.get('transform')): - result = re.sub(r".*?((matrix).*?\))", self.matrixElementNoScale, str(element.get('transform'))) + result = re.sub(r".*?matrix( \(|\()(.*?)\)", self.matrixGroupElement, str(element.get('transform'))) + element.set('transform', result) + if "translate" in str(element.get('transform')): + result = re.sub(r".*?translate( \(|\()(.*?)\)", self.translateElement, str(element.get('transform'))) element.set('transform', result) if "skew" in str(element.get('transform')): - result = re.sub(r".*?((translate).*?\))", self.skewElement, str(element.get('transform'))) + result = re.sub(r".*?skew( \(|\()(.*?)\)", self.skewElement, str(element.get('transform'))) element.set('transform', result) def scaleGuides(self, svg): @@ -128,7 +128,7 @@ class DPISwitcher(inkex.Effect): 'km':3543307.0866, 'pc':15.0, 'yd':3240 , 'ft':1080} def scaleElement(self, m): - scaleVal = m.group(1).replace("scale","").replace(" ","").replace("(","").replace(")","") + scaleVal = m.group(2).replace(" ","") total = scaleVal.count(',') if total == 1: scaleVal = scaleVal.split(",") @@ -138,7 +138,7 @@ class DPISwitcher(inkex.Effect): def translateElement(self, m): - translateVal = m.group(1).replace("translate","").replace(" ","").replace("(","").replace(")","") + translateVal = m.group(2).replace(" ","") total = translateVal.count(',') if total == 1: translateVal = translateVal.split(",") @@ -147,7 +147,7 @@ class DPISwitcher(inkex.Effect): return "translate(" + str(float(translateVal) * self.factor) + ")" def skewElement(self, m): - skeweVal = m.group(1).replace("skew","").replace(" ","").replace("(","").replace(")","") + skeweVal = m.group(2).replace(" ","") total = skewVal.count(',') if total == 1: skeweVal = skewVal.split(",") @@ -156,7 +156,7 @@ class DPISwitcher(inkex.Effect): return "skew(" + str(float(skewVal) * self.factor) + ")" def matrixElement(self, m): - matrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","") + matrixVal = m.group(2).replace(" ","") total = matrixVal.count(',') matrixVal = matrixVal.split(",") if total > 2: @@ -164,8 +164,8 @@ class DPISwitcher(inkex.Effect): else: return "matrix(" + str(float(matrixVal[0]) * self.factor) + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" - def matrixElementNoScale(self, m): - matrixVal = m.group(1).replace("matrix","").replace(" ","").replace("(","").replace(")","") + def matrixGroupElement(self, m): + matrixVal = m.group(2).replace(" ","") total = matrixVal.count(',') matrixVal = matrixVal.split(",") if total > 2: -- cgit v1.2.3 From a213372bccdad1d36a559e97482f4ce3ddcdc133 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 10 Nov 2014 21:46:54 +0100 Subject: Add a extra info page pointed by suv in bug page (bzr r13701) --- share/extensions/dpiswitcher.inx | 12 +++++-- share/extensions/dpiswitcher.py | 68 ++++++++++++++++++++++++++++++---------- 2 files changed, 61 insertions(+), 19 deletions(-) (limited to 'share') diff --git a/share/extensions/dpiswitcher.inx b/share/extensions/dpiswitcher.inx index 145fd9357..a4f487c97 100644 --- a/share/extensions/dpiswitcher.inx +++ b/share/extensions/dpiswitcher.inx @@ -5,10 +5,18 @@ org.inkscape.dpiswitcher dpiswitcher.py inkex.py - + + + <_item value="0">DPI Switch from 90 to 96 <_item value="1">DPI Switch from 96 to 90 - + + + + <_param name="d" type="description">Choose this tab if you would like to see page info previously to apply DPI Switcher. + + + all diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py index a1a7a1a52..b110c259f 100644 --- a/share/extensions/dpiswitcher.py +++ b/share/extensions/dpiswitcher.py @@ -34,6 +34,9 @@ class DPISwitcher(inkex.Effect): self.OptionParser.add_option("--switcher", action="store", type="string", dest="switcher", default="0", help="Select the DPI switch you want") + self.OptionParser.add_option("--action", action="store", + type="string", dest="action", + default=None, help="") self.factor = 90.0/96.0 self.units = "px" self.unitExponent = 1.0 @@ -174,28 +177,59 @@ class DPISwitcher(inkex.Effect): return "matrix(" + matrixVal[0] + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" def effect(self): - if self.options.switcher == "0": - self.factor = 96.0/90.0 + action = self.options.action.strip("\"") # TODO Is this a bug? (Extra " characters) saveout = sys.stdout sys.stdout = sys.stderr svg = self.document.getroot() - namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) - namedview.set(inkex.addNS('document-units', 'inkscape'), "px") - self.units = re.sub("[0-9]*\.?[0-9]", "", svg.get('width')) - if self.units and self.units <> "px": + if action == "page_info": + print ":::SVG document related info:::" + width = svg.get('width') + if width: + print "width: " + width + height = svg.get('height') + if height: + print "height: " + height + viewBox = svg.get('viewBox') + if viewBox: + print "viewBox: " + viewBox + namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) + docunits= namedview.get(inkex.addNS('document-units', 'inkscape')) + if docunits: + print "document-units: " + docunits + units = namedview.get('units') + if units: + print "units: " + units + xpathStr = '//sodipodi:guide' + guides = svg.xpath(xpathStr, namespaces=inkex.NSS) + xpathStr = '//inkscape:grid' + if guides: + numberGuides = len(guides) + print "Document has " + str(numberGuides) + " guides" + grids = svg.xpath(xpathStr, namespaces=inkex.NSS) + i = 1 + for grid in grids: + print "Grid number " + str(i) + ": Units: " + grid.get("units") + i = i+1 + else: if self.options.switcher == "0": - self.unitExponent = 1.0/(self.factor/self.__uuconv[self.units]) + self.factor = 96.0/90.0 + namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) + namedview.set(inkex.addNS('document-units', 'inkscape'), "px") + self.units = re.sub("[0-9]*\.?[0-9]", "", svg.get('width')) + if self.units and self.units <> "px": + if self.options.switcher == "0": + self.unitExponent = 1.0/(self.factor/self.__uuconv[self.units]) + else: + self.unitExponent = 1.0/(self.factor/self.__uuconvLegazy[self.units]) + ''' else: - self.unitExponent = 1.0/(self.factor/self.__uuconvLegazy[self.units]) - ''' - else: - self.scaleGuides(svg) - self.unitExponent = 1.0 - self.scaleGrid(svg) - sys.stdout = saveout - return - ''' - self.scaleRoot(svg); + self.scaleGuides(svg) + self.unitExponent = 1.0 + self.scaleGrid(svg) + sys.stdout = saveout + return + ''' + self.scaleRoot(svg); sys.stdout = saveout effect = DPISwitcher() -- cgit v1.2.3