def paint(self, di):
        gc = di.gc
        tx = di.tx

        trans = [tx(p) for p in self.points]
        points = [(t.x, t.y) for t in trans]
        gtk.draw_polygon(di.area, gc, gtk.FALSE, points)
Esempio n. 2
0
    def paint(self, di):
        gc = di.gc
        tx = di.tx

        trans = [tx(p) for p in self.points]
        points = [(t.x, t.y) for t in trans]
        gtk.draw_polygon(di.area, gc, gtk.FALSE, points)
    def paint(self, di):
        gc = di.gc
        colormap = di.colormap
        tx = di.tx

        trans = [tx(p) for p in self.polygon.points]

        bounds = self.polygon.getBounds()
        if max(bounds.width, bounds.height) * di.canvas.scale > 30000:
            # gtk doesn't like getting coordinates bigger than 32767.
            # Those cause an illogical error message
            # "TypeError: sequence member not a 2-tuple"
            for p in trans:
                if p.x > 30000:
                    p.x = 30000
                elif p.x < -30000:
                    p.x = -30000
                if p.y > 30000:
                    p.y = 30000
                elif p.y < -30000:
                    p.y = -30000

        points = [(t.x, t.y) for t in trans]

        nofill = 1
        if self.style.textured and di.canvas.textured:
            if self.style.texture.scalable:
                gc.tile = self.style.texture.image[di.scale * 64]
            else:
                gc.tile = self.style.texture.image[1]
            # !@# Should align the texture
            gc.fill = GDK.TILED
            nofill = 0
        elif self.style.filled and di.canvas.filled:
            gc.foreground = colormap.alloc(*gcolor(self.style.color))
            nofill = 0
        if not nofill:
            gtk.draw_polygon(di.area, gc, gtk.TRUE, points)
            gc.fill = GDK.SOLID

        if self.edgeStyles is None:
            df = self.style.defaultEdgeStyle
            if df.style != LineStyle.STYLE_HIDDEN or nofill:
                gc.foreground = colormap.alloc(*gcolor(df.color))
                gtk.draw_polygon(di.area, gc, gtk.FALSE, points)
                # !@# dashed lines, width missing here
        else:
            si = 0
            cs = self.edgeStyles[0]
            for i in range(1, len(points)):
                if self.edgeStyles[i] == cs:
                    continue
                lstyle = cs or self.style.defaultEdgeStyle
                if lstyle.style != LineStyle.STYLE_HIDDEN or nofill:
                    gc.foreground = colormap.alloc(*gcolor(lstyle.color))
                    gtk.draw_lines(di.area, gc, points[si:i + 1])
                si = i
                cs = self.edgeStyles[i]
            points2 = points[si:]
            points2.append(points[0])
            lstyle = cs or self.style.defaultEdgeStyle
            if lstyle.style != LineStyle.STYLE_HIDDEN or nofill:
                gc.foreground = colormap.alloc(*gcolor(lstyle.color))
                gtk.draw_lines(di.area, gc, points2)

        if di.canvas.showPoints:
            for p in points:
                gtk.draw_rectangle(di.area, di.white_gc, gtk.FALSE, p[0] - 1,
                                   p[1] - 1, 2, 2)
Esempio n. 4
0
    def paint(self, di):
        gc = di.gc
        colormap = di.colormap
        tx = di.tx

        trans = [tx(p) for p in self.polygon.points]

        bounds = self.polygon.getBounds()
        if max(bounds.width, bounds.height) * di.canvas.scale > 30000:
            # gtk doesn't like getting coordinates bigger than 32767.
            # Those cause an illogical error message
            # "TypeError: sequence member not a 2-tuple"
            for p in trans:
                if p.x > 30000:
                    p.x = 30000
                elif p.x < -30000:
                    p.x = -30000
                if p.y > 30000:
                    p.y = 30000
                elif p.y < -30000:
                    p.y = -30000

        points = [(t.x, t.y) for t in trans]

        nofill = 1
        if self.style.textured and di.canvas.textured:
            if self.style.texture.scalable:
                gc.tile = self.style.texture.image[di.scale * 64]
            else:
                gc.tile = self.style.texture.image[1]
            # !@# Should align the texture
            gc.fill = GDK.TILED
            nofill = 0
        elif self.style.filled and di.canvas.filled:
            gc.foreground = colormap.alloc(*gcolor(self.style.color))
            nofill = 0
        if not nofill:
            gtk.draw_polygon(di.area, gc, gtk.TRUE, points)
            gc.fill = GDK.SOLID

        if self.edgeStyles is None:
            df = self.style.defaultEdgeStyle
            if df.style != LineStyle.STYLE_HIDDEN or nofill:
                gc.foreground = colormap.alloc(*gcolor(df.color))
                gtk.draw_polygon(di.area, gc, gtk.FALSE, points)
                # !@# dashed lines, width missing here
        else:
            si = 0
            cs = self.edgeStyles[0]
            for i in range(1, len(points)):
                if self.edgeStyles[i] == cs:
                    continue
                lstyle = cs or self.style.defaultEdgeStyle
                if lstyle.style != LineStyle.STYLE_HIDDEN or nofill:
                    gc.foreground = colormap.alloc(*gcolor(lstyle.color))
                    gtk.draw_lines(di.area, gc, points[si:i+1])
                si = i
                cs = self.edgeStyles[i]
            points2 = points[si:]
            points2.append(points[0])
            lstyle = cs or self.style.defaultEdgeStyle
            if lstyle.style != LineStyle.STYLE_HIDDEN or nofill:
                gc.foreground = colormap.alloc(*gcolor(lstyle.color))
                gtk.draw_lines(di.area, gc, points2)

        if di.canvas.showPoints:
            for p in points:
                gtk.draw_rectangle(di.area, di.white_gc, gtk.FALSE,
                                   p[0] - 1, p[1] - 1, 2, 2)