示例#1
0
    def effect(self):
        self.vx = math.cos(math.radians(
            self.options.angle)) * self.options.magnitude
        self.vy = math.sin(math.radians(
            self.options.angle)) * self.options.magnitude
        for id, node in self.selected.iteritems():
            if node.tag == inkex.addNS('path', 'svg'):
                group = inkex.etree.SubElement(node.getparent(),
                                               inkex.addNS('g', 'svg'))
                self.facegroup = inkex.etree.SubElement(
                    group, inkex.addNS('g', 'svg'))
                group.append(node)

                t = node.get('transform')
                if t:
                    group.set('transform', t)
                    node.set('transform', '')

                s = node.get('style')
                self.facegroup.set('style', s)

                p = simplepath.parsePath(node.get('d'))
                for cmd, params in p:
                    tees = []
                    if cmd == 'C':
                        bez = (last, params[:2], params[2:4], params[-2:])
                        tees = [
                            t for t in bezmisc.beziertatslope(
                                bez, (self.vy, self.vx)) if 0 < t < 1
                        ]
                        tees.sort()

                    segments = []
                    if len(tees) == 0 and cmd in ['L', 'C']:
                        segments.append([cmd, params[:]])
                    elif len(tees) == 1:
                        one, two = bezmisc.beziersplitatt(bez, tees[0])
                        segments.append([cmd, list(one[1] + one[2] + one[3])])
                        segments.append([cmd, list(two[1] + two[2] + two[3])])
                    elif len(tees) == 2:
                        one, two = bezmisc.beziersplitatt(bez, tees[0])
                        two, three = bezmisc.beziersplitatt(two, tees[1])
                        segments.append([cmd, list(one[1] + one[2] + one[3])])
                        segments.append([cmd, list(two[1] + two[2] + two[3])])
                        segments.append(
                            [cmd, list(three[1] + three[2] + three[3])])

                    for seg in segments:
                        self.makeface(last, seg)
                        last = seg[1][-2:]

                    if cmd == 'M':
                        subPathStart = params[-2:]
                    if cmd == 'Z':
                        last = subPathStart
                    else:
                        last = params[-2:]
示例#2
0
    def effect(self):
        self.vx = math.cos(math.radians(self.options.angle))*self.options.magnitude
        self.vy = math.sin(math.radians(self.options.angle))*self.options.magnitude
        for id, node in self.selected.iteritems():
            if node.tagName == 'path':
                group = self.document.createElement('svg:g')
                self.facegroup = self.document.createElement('svg:g')
                node.parentNode.appendChild(group)
                group.appendChild(self.facegroup)
                group.appendChild(node)
                
                try:
                    t = node.attributes.getNamedItem('transform').value
                    group.setAttribute('transform', t)
                    node.attributes.getNamedItem('transform').value=""
                except AttributeError:
                    pass

                s = node.attributes.getNamedItem('style').value
                self.facegroup.setAttribute('style', s)

                p = simplepath.parsePath(node.attributes.getNamedItem('d').value)
                for cmd,params in p:
                    tees = []
                    if cmd == 'C':
                        bez = (last,params[:2],params[2:4],params[-2:])
                        tees = [t for t in bezmisc.beziertatslope(bez,(self.vy,self.vx)) if 0<t<1]
                        tees.sort()

                    segments = []
                    if len(tees) == 0 and cmd in ['L','C']:
                            segments.append([cmd,params[:]])
                    elif len(tees) == 1:
                            one,two = bezmisc.beziersplitatt(bez,tees[0])
                            segments.append([cmd,list(one[1]+one[2]+one[3])])
                            segments.append([cmd,list(two[1]+two[2]+two[3])])
                    elif len(tees) == 2:
                            one,two = bezmisc.beziersplitatt(bez,tees[0])
                            two,three = bezmisc.beziersplitatt(two,tees[1])
                            segments.append([cmd,list(one[1]+one[2]+one[3])])
                            segments.append([cmd,list(two[1]+two[2]+two[3])])
                            segments.append([cmd,list(three[1]+three[2]+three[3])])

                    for seg in segments:
                        self.makeface(last,seg)
                        last = seg[1][-2:]
                    
                    if cmd == 'M':
                        subPathStart = params[-2:]
                    if cmd == 'Z':
                        last = subPathStart
                    else:
                        last = params[-2:]
示例#3
0
    def effect(self):
        self.vx = math.cos(math.radians(self.options.angle))*self.options.magnitude
        self.vy = math.sin(math.radians(self.options.angle))*self.options.magnitude
        for id, node in self.selected.iteritems():
            if node.tag == inkex.addNS('path','svg'):
                group = inkex.etree.SubElement(node.getparent(),inkex.addNS('g','svg'))
                self.facegroup = inkex.etree.SubElement(group, inkex.addNS('g','svg'))
                group.append(node)
                
                t = node.get('transform')
                if t:
                    group.set('transform', t)
                    node.set('transform','')
                    
                s = node.get('style')
                self.facegroup.set('style', s)

                p = simplepath.parsePath(node.get('d'))
                for cmd,params in p:
                    tees = []
                    if cmd == 'C':
                        bez = (last,params[:2],params[2:4],params[-2:])
                        tees = [t for t in bezmisc.beziertatslope(bez,(self.vy,self.vx)) if 0<t<1]
                        tees.sort()

                    segments = []
                    if len(tees) == 0 and cmd in ['L','C']:
                            segments.append([cmd,params[:]])
                    elif len(tees) == 1:
                            one,two = bezmisc.beziersplitatt(bez,tees[0])
                            segments.append([cmd,list(one[1]+one[2]+one[3])])
                            segments.append([cmd,list(two[1]+two[2]+two[3])])
                    elif len(tees) == 2:
                            one,two = bezmisc.beziersplitatt(bez,tees[0])
                            two,three = bezmisc.beziersplitatt(two,tees[1])
                            segments.append([cmd,list(one[1]+one[2]+one[3])])
                            segments.append([cmd,list(two[1]+two[2]+two[3])])
                            segments.append([cmd,list(three[1]+three[2]+three[3])])

                    for seg in segments:
                        self.makeface(last,seg)
                        last = seg[1][-2:]
                    
                    if cmd == 'M':
                        subPathStart = params[-2:]
                    if cmd == 'Z':
                        last = subPathStart
                    else:
                        last = params[-2:]