当前位置: 首页>>代码示例>>Python>>正文


Python StateTracker.getCTM方法代码示例

本文整理汇总了Python中reportlab.graphics.renderbase.StateTracker.getCTM方法的典型用法代码示例。如果您正苦于以下问题:Python StateTracker.getCTM方法的具体用法?Python StateTracker.getCTM怎么用?Python StateTracker.getCTM使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在reportlab.graphics.renderbase.StateTracker的用法示例。


在下文中一共展示了StateTracker.getCTM方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: _SVGRenderer

# 需要导入模块: from reportlab.graphics.renderbase import StateTracker [as 别名]
# 或者: from reportlab.graphics.renderbase.StateTracker import getCTM [as 别名]
class _SVGRenderer(Renderer):
    """This draws onto an SVG document.
    """

    def __init__(self):
        self._tracker = StateTracker()
        self.verbose = 0

    def drawNode(self, node):
        """This is the recursive method called for each node in the tree.
        """

        if self.verbose:
            print "### begin _SVGRenderer.drawNode"

        self._canvas.comment("begin node %s" % ` node `)
        color = self._canvas._color
        if not (isinstance(node, Path) and node.isClipPath):
            pass  # self._canvas.saveState()

        # apply state changes
        deltas = getStateDelta(node)
        self._tracker.push(deltas)
        self.applyStateChanges(deltas, {})

        # draw the object, or recurse
        self.drawNodeDispatcher(node)

        rDeltas = self._tracker.pop()
        if not (isinstance(node, Path) and node.isClipPath):
            pass  # self._canvas.restoreState()
        self._canvas.comment("end node %s" % ` node `)
        self._canvas._color = color

        # restore things we might have lost (without actually doing anything).
        for k, v in rDeltas.items():
            if self._restores.has_key(k):
                setattr(self._canvas, self._restores[k], v)

        if self.verbose:
            print "### end _SVGRenderer.drawNode"

    _restores = {
        "strokeColor": "_strokeColor",
        "strokeWidth": "_lineWidth",
        "strokeLineCap": "_lineCap",
        "strokeLineJoin": "_lineJoin",
        "fillColor": "_fillColor",
        "fontName": "_font",
        "fontSize": "_fontSize",
    }

    def drawGroup(self, group):
        if self.verbose:
            print "### begin _SVGRenderer.drawGroup"

        currGroup = self._canvas.startGroup()
        a, b, c, d, e, f = self._tracker.getCTM()
        for childNode in group.getContents():
            if isinstance(childNode, UserNode):
                node2 = childNode.provideNode()
            else:
                node2 = childNode
            self.drawNode(node2)
        self._canvas.transform(a, b, c, d, e, f)
        self._canvas.endGroup(currGroup)

        if self.verbose:
            print "### end _SVGRenderer.drawGroup"

    def drawRect(self, rect):
        if rect.rx == rect.ry == 0:
            # plain old rectangle
            self._canvas.rect(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height)
        else:
            # cheat and assume ry = rx; better to generalize
            # pdfgen roundRect function.  TODO
            self._canvas.roundRect(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height, rect.rx, rect.ry)

    def drawString(self, stringObj):
        if self._canvas._fillColor:
            S = self._tracker.getState()
            text_anchor, x, y, text = S["textAnchor"], stringObj.x, stringObj.y, stringObj.text
            if not text_anchor in ["start", "inherited"]:
                font, fontSize = S["fontName"], S["fontSize"]
                textLen = stringWidth(text, font, fontSize)
                if text_anchor == "end":
                    x = x - textLen
                elif text_anchor == "middle":
                    x = x - textLen / 2
                else:
                    raise ValueError, "bad value for text_anchor " + str(text_anchor)
            self._canvas.drawString(text, x, y)

    def drawLine(self, line):
        if self._canvas._strokeColor:
            self._canvas.line(line.x1, line.y1, line.x2, line.y2)

    def drawCircle(self, circle):
        self._canvas.circle(circle.cx, circle.cy, circle.r)
#.........这里部分代码省略.........
开发者ID:jwheare,项目名称:digest,代码行数:103,代码来源:renderSVG.py


注:本文中的reportlab.graphics.renderbase.StateTracker.getCTM方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。