Changeset 692

Show
Ignore:
Timestamp:
09/06/03 02:08:42 (5 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBRapier/RBRapier/Formats/SVG/RapierRenderItems.py

    r691 r692  
    499499 
    500500    transform = None 
     501    position = None 
    501502    default_transform = Transform() 
    502503    style = None 
     
    514515 
    515516    def SetPosition(self, position): 
    516         if self.transform is None: 
    517             self.transform = Transform() 
    518         self.transform.translate(*position) 
     517        self.position = position 
    519518 
    520519    def SetTransform(self, transform): 
     
    540539        elif self.style is not None: 
    541540            style = style + self.style 
     541 
    542542        if transform is None: 
    543543            if self.transform is None: 
    544                 transform = self.default_transform.copy() 
     544                transformout = self.default_transform.copy() 
    545545            else: 
    546                 transform = self.transform.copy() 
     546                transformout = self.transform.copy() 
    547547        elif self.transform is not None: 
    548             transform = transform * self.transform 
    549         return style, transform 
     548            transformout = transform * self.transform 
     549        else:  
     550            transformout = transform 
     551 
     552        if self.position is not None: 
     553            if transformout is transform: 
     554                transformout = transform.copy() 
     555            transformout.translate(*self.position) 
     556        return style, transformout 
    550557 
    551558    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    646653    dimensions = (None, None) 
    647654    alignment = ('xmid', 'ymid', 'meet') 
    648     position = (None, None) 
     655    position = None 
    649656 
    650657    def _GetStyleAndTransform(self, style=None, transform=None): 
     
    657664 
    658665            transform = Transform() 
    659             if self.position != (None, None)
     666            if self.position is not None
    660667                ux, uy = self.position 
    661668            else: ux, uy = 0., 0. 
     
    670677            uw, uh = transform.GetViewport() 
    671678 
    672             if self.position != (None, None)
     679            if self.position is not None
    673680                ux, uy = self.position 
    674681            if self.dimensions != (None, None): 
     
    786793    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    787794 
    788     position = (0,0) 
    789795    dimensions = (1,1) 
    790796 
     
    795801    def Compile(self, style, transform, target): 
    796802        style, transform = self._GetStyleAndTransform(style, transform) 
    797         x,y = self.position 
     803        x,y = 0., 0. 
    798804        w,h = self.dimensions 
    799805 
     
    816822    #~ SVG Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    817823 
    818     def SetPosition(self, position): 
    819         self.position = position 
    820824    def SetDimensions(self, width, height): 
    821825        self.dimensions = width, height 
     
    870874 
    871875class Polyline(RenderItem): 
    872     tesselator = SVGTesselator(normal=(0,0,1)) 
    873  
    874876    def Compile(self, style, transform, target): 
    875877        if len(self.points) < 2: return  
     
    881883            if windingrule is None: windingrule = FillRuleLookup[None] 
    882884 
    883             self.tesselator.open(windingrule=windingrule) 
    884             glmodedatalist = self.tesselator.tessellate([self.points]) 
    885             self.tesselator.close() 
     885            tesselator = SVGTesselator(normal=(0,0,1)) 
     886            tesselator.open(windingrule=windingrule) 
     887            glmodedatalist = tesselator.tessellate([self.points]) 
     888            tesselator.close() 
    886889            for glmode, fillpoints in glmodedatalist: 
    887890                fillpoints = transform.TransformPoints(fillpoints) 
     
    905908 
    906909class Polygon(Polyline): 
    907     tesselator = SVGTesselator(normal=(0,0,1)) 
    908  
    909910    def Compile(self, style, transform, target): 
    910911        if len(self.points) < 2: return  
     
    913914        windingrule = FillRuleLookup.get(style.get('fill-rule')) 
    914915        if windingrule is None: windingrule = FillRuleLookup[None] 
     916        tesselator = SVGTesselator(normal=(0,0,1)) 
     917        tesselator.open(windingrule=windingrule) 
    915918 
    916919        fillcolor = style.GetFillColor() 
    917920        if fillcolor is not None: 
    918             self.tesselator.open(windingrule=windingrule) 
    919             glmodedatalist = self.tesselator.tessellate([self.points]) 
    920             self.tesselator.close() 
     921            glmodedatalist = tesselator.tessellate([self.points]) 
    921922            for glmode, fillpoints in glmodedatalist: 
    922923                fillpoints = transform.TransformPoints(fillpoints) 
     
    927928        strokecolor = style.GetStrokeColor() 
    928929        if strokecolor is not None: 
    929             self.tesselator.open(windingrule=windingrule) 
    930             glmodedatalist = self.tesselator.tessellate([self.points]) 
    931             self.tesselator.close() 
     930            glmodedatalist = tesselator.tessellate([self.points]) 
    932931            for glmode, strokepoints in glmodedatalist: 
    933932                strokepoints = transform.TransformPoints(strokepoints) 
     
    935934                stroke.Add(glmode, range(len(strokepoints))) 
    936935                stroke.Commit(target) 
     936        tesselator.close() 
    937937 
    938938    def SetPoints(self, points): 
     
    946946 
    947947class Path(RenderItem): 
    948     tesselator = SVGTesselator(normal=(0,0,1)) 
    949  
    950948    def Compile(self, style, transform, target): 
    951949        contours = SVGPathConnector.fromSVGPath(self.path).GetContours() 
     
    963961                if windingrule is None: windingrule = FillRuleLookup[None] 
    964962 
    965                 self.tesselator.open(windingrule=windingrule) 
    966                 glmodedatalist = self.tesselator.tessellate(contourlist) 
    967                 self.tesselator.close() 
     963                tesselator = SVGTesselator(normal=(0,0,1)) 
     964                tesselator.open(windingrule=windingrule) 
     965                glmodedatalist = tesselator.tessellate(contourlist) 
     966                tesselator.close() 
    968967                for glmode, fillpoints in glmodedatalist: 
    969968                    fillpoints = transform.TransformPoints(fillpoints) 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Curves.py

    r665 r692  
    2828        return self._steps 
    2929    def SetSteps(self, steps): 
    30         self._steps = steps 
     30        if steps != self._steps: 
     31            self._steps = steps 
     32            self._Invalidate() 
    3133 
    3234    def asCurve(self): 
     
    3537    def __iter__(self): 
    3638        return iter(self.asCurve()) 
     39 
     40    def _Invalidate(self): 
     41        pass 
    3742 
    3843#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4752 
    4853    def _CreateUVector(self): 
    49         steps = self.GetSteps()-1 
     54        return self._BuildUVector(Numeric.arrayrange(0., 1., 1./(self.GetSteps()-1), self.NumericType), True) 
     55 
     56    def _BuildUVector(self, u, addend=False): 
     57        result = [u, Numeric.ones(len(u), self.NumericType)] 
    5058        count = self.GetPolyDimension()+1 
    51         stepsize = 1./steps 
    52         u = Numeric.arrayrange(0., 1., stepsize, self.NumericType) 
    53         result = [u, Numeric.ones(steps, self.NumericType)] 
    5459        for i in xrange(2, count): 
    5560            result.insert(0, u*result[0]) 
    56         result = Numeric.concatenate((result, Numeric.ones((count, 1), self.NumericType)), 1) 
     61        if addend: 
     62            result = Numeric.concatenate((result, Numeric.ones((count, 1), self.NumericType)), 1) 
    5763        return Numeric.transpose(result) 
    5864 
     
    6975        return self.points 
    7076 
     77    def CurveFromUVector(self, uvector): 
     78        Ubezier = Numeric.dot(uvector, self.GetBezierMatrix()) 
     79        return Numeric.dot(Ubezier, self.GetControlPoints()) 
     80 
     81    def CurveAtPoints(self, *points): 
     82        uvector = self._BuildUVector(Numeric.asarray(points, self.NumericType)) 
     83        return self.CurveFromUVector(uvector) 
     84 
     85    def CurveRange(self, start=0., stop=1., stepsize=None): 
     86        stepsize = stepsize or 1./(self.GetSteps()-1) 
     87        uvector = self._BuildUVector(Numeric.arrayrange(start, stop, stepsize, self.NumericType)) 
     88        return self.CurveFromUVector(uvector) 
     89 
    7190    def asCurve(self): 
    72         Ubezier = Numeric.dot(self.GetUVector(), self.GetBezierMatrix()) 
    73         return Numeric.dot(Ubezier, self.GetControlPoints()) 
     91        return self.CurveFromUVector(self.GetUVector()) 
    7492 
    7593    def GetPolyDimension(self): 
     
    7795    def GetBezierMatrix(self): 
    7896        raise NotImplementedError 
     97 
     98    def _Invalidate(self): 
     99        try: delattr(self, '_uvector') 
     100        except AttributeError: pass 
    79101 
    80102#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    284306    _FindAngle = classmethod(_FindAngle) 
    285307 
     308    def _Invalidate(self): 
     309        try: delattr(self, '_sweepvector') 
     310        except AttributeError: pass 
     311 
  • trunk/RBRapier/RBRapier/Tools/Projections.py

    r691 r692  
    123123        return self.Height / self.Width 
    124124    def SetAspectRatio(self, value, byWidth=None): 
    125         if byWidth is None: 
    126             byWidth = value < 1 
    127         if byWidth: 
    128             self.Width = self.Height / float(value) 
    129         else: 
    130             self.Height = self.Width * float(value) 
     125        self.SetDimensionsAspectRatio(self.Width, self.Height, value) 
     126        #if byWidth is None: 
     127        #    byWidth = value < 1 
     128        #if byWidth: 
     129        #    self.Width = self.Height / float(value) 
     130        #else: 
     131        #    self.Height = self.Width * float(value) 
    131132    AspectRatio = property(GetAspectRatio, SetAspectRatio) 
    132133 
     
    146147        return width, height 
    147148 
    148     def _asTuple(self): 
     149    def GetTuple(self): 
    149150        return self.Left, self.Right, self.Bottom, self.Top, self.Near, self.Far 
    150     def _fromTuple(self, value): 
     151    def SetTuple(self, value): 
    151152        self.Left, self.Right, self.Bottom, self.Top, self.Near, self.Far = value 
    152     asTuple = property(_asTuple, _fromTuple) 
     153    asTuple = property(GetTuple, SetTuple) 
    153154 
    154155#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~