Changeset 677
- Timestamp:
- 09/02/03 19:04:49 (5 years ago)
- Files:
-
- trunk/RBRapier/RBRapier/Formats/SVG/RapierRenderItems.py (modified) (10 diffs)
- trunk/RBRapier/RBRapier/Formats/SVG/SVGSkin/use.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Formats/SVG/SVGSkinner.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBRapier/RBRapier/Formats/SVG/RapierRenderItems.py
r675 r677 85 85 86 86 class Transform(Transformations2d.Composite): 87 viewport = (0., 0., 0., 0.) 88 def GetViewport(self): 89 return self.viewport 90 def SetViewport(self, pos, size): 91 self.viewport = pos[0], pos[1], size[0], size[1] 92 87 93 def __mul__(self, other): 88 94 if isinstance(other, Transform): … … 100 106 result = self.__class__() 101 107 result.collection = self.collection[:] 108 result.viewport = self.viewport[:] 102 109 return result 103 110 … … 489 496 self.style = Style(style) 490 497 498 def IsGroupRendered(self): 499 return True 500 491 501 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 492 502 … … 526 536 for child in children: 527 537 if isinstance(child, RenderItem): 528 self.renderChildren.append(child) 529 else: 530 self.otherChildren.append(child) 538 if child.IsGroupRendered(): 539 self.renderChildren.append(child) 540 continue 541 self.otherChildren.append(child) 531 542 532 543 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 533 544 534 545 class UseRenderItem(RenderItem): 546 dimensions = (0.,0.) 547 position = (0.,0.) 548 535 549 def Compile(self, style=None, transform=None, target=None): 536 550 style, transform = self._GetStyleAndTransform(style, transform) 537 551 self.useitem.Compile(style, transform, target) 538 552 539 #~ SVG Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 553 def _GetStyleAndTransform(self, style=None, transform=None): 554 style, transform = RenderItem._GetStyleAndTransform(self, style, transform) 555 transform.SetViewport(self.position, self.dimensions) 556 return style, transform 557 558 #~ SVG Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 559 560 def SetPosition(self, position): 561 self.position = position 562 def SetDimensions(self, width, height): 563 self.dimensions = width, height 540 564 541 565 def SetUseItem(self, useitem): … … 548 572 dimensions = (None, None) 549 573 alignment = ('xmid', 'ymid', 'meet') 550 position = ( 0, 0)574 position = (None, None) 551 575 552 576 def _GetStyleAndTransform(self, style=None, transform=None): 553 vx, vy, vw, vh = self.viewbox554 uw, uh = self.dimensions555 uw = uw or 2. # 1 - -1556 uh = uh or 2. # 1 - -1557 558 577 if transform is None: 559 578 # This implies that the default OpenGL portal is setup and the … … 564 583 565 584 transform = Transform() 566 transform.matrix(2./uw, 0., -1., 0., -2./uh, 1.) 585 transform.scale(1., -1.) 586 ux, uy, uw, uh = -1., -1., 2., 2. 587 else: 588 transform = transform.copy() 589 ux, uy, uw, uh = transform.GetViewport() 590 591 if self.position != (None, None): 592 ux, uy = self.position 593 if self.dimensions != (None, None): 594 uw, uh = self.dimensions 595 596 vx, vy, vw, vh = self.viewbox or (0, 0, 0, 0) 597 uw, uh = uw or vw, uh or vh 567 598 568 599 if vw > 0. and vh > 0.: … … 570 601 vy = vy or 0. 571 602 572 transform = transform.copy()573 603 xalign, yalign, aligntype = [s and s.lower() or s for s in self.alignment] 574 604 nw = float(vw)/uw … … 594 624 sx, sy = uw/vw, uh/vh 595 625 596 if xalign == 'xmin': tx = vx597 elif xalign == 'xmid': tx = vx - 0.5*(uw/sx-vw)598 elif xalign == 'xmax': tx = vx - (uw/sx-vw)599 else: tx = vx - 0.5*(uw/sx-vw)600 601 if yalign == 'ymin': ty = vy602 elif yalign == 'ymid': ty = vy - 0.5*(uh/sy-vh)603 elif yalign == 'ymax': ty = vy - (uh/sy-vh)604 else: ty = vy - 0.5*(uh/sy-vh)605 606 transform.matrix(sx, 0., sx*-tx, 0., sy, sy*-ty)626 if xalign == 'xmin': tx = ux - sx*vx + 0. 627 elif xalign == 'xmid': tx = ux - sx*vx + 0.5*(uw-vw*sx) 628 elif xalign == 'xmax': tx = ux - sx*vx + (uw-vw*sx) 629 else: tx = ux - sx*vx + 0.5*(uw-vw*sx) 630 631 if yalign == 'ymin': ty = uy - sy*vy + 0. 632 elif yalign == 'ymid': ty = uy - sy*vy + 0.5*(uh-vh*sy) 633 elif yalign == 'ymax': ty = uy - sy*vy + (uh-vh*sy) 634 else: ty = uy - sy*vy + 0.5*(uh-vh*sy) 635 636 transform.matrix(sx, 0., tx, 0., sy, ty) 607 637 608 638 return GroupRenderItem._GetStyleAndTransform(self, style, transform) … … 617 647 def SetAlignment(self, xalign, yalign, alignstyle): 618 648 self.alignment = xalign, yalign, alignstyle 649 650 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 651 652 class SymbolGroup(ContainerGroupRenderItem): 653 def IsGroupRendered(self): 654 return False 655 656 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 619 657 620 658 class SVGGroupRenderItem(ContainerGroupRenderItem): … … 891 929 'circle': Circle, 892 930 893 #'use': UseRenderItem,894 #'symbol': ContainerGroupRenderItem,931 'use': UseRenderItem, 932 'symbol': SymbolGroup, 895 933 #'pattern': None, 896 934 #'marker': None, trunk/RBRapier/RBRapier/Formats/SVG/SVGSkin/use.py
r657 r677 36 36 StyledSVGItem.InterpretSettings(self, settings) 37 37 38 width = settings.get('width', None) 39 if width is not None: 40 width = self._asCoord(width) 41 if width < 0 and width is not None: 42 raise ValueError, '"width" attribute can not be negative"' 43 height = settings.get('height', None) 44 if height is not None: 45 height = self._asCoord(height) 46 if height < 0 and height is not None: 47 raise ValueError, '"height" attribute can not be negative"' 48 self.object.SetDimensions(width, height) 49 38 50 xlink = settings[('http://www.w3.org/1999/xlink', 'href')] 39 51 try: trunk/RBRapier/RBRapier/Formats/SVG/SVGSkinner.py
r657 r677 35 35 ## Long names 36 36 ('http://www.w3.org/2000/svg',): EF.CachedTryList([ 37 EF.NodeImport('RBRapier.Formats.SVG New.SVGSkin'),38 EF.StaticImport('RBRapier.Formats.SVG New.SVGSkin.UnknownElement', 'UnknownElement'),37 EF.NodeImport('RBRapier.Formats.SVG.SVGSkin'), 38 EF.StaticImport('RBRapier.Formats.SVG.SVGSkin.UnknownElement', 'UnknownElement'), 39 39 ]), 40 40
