Changeset 634
- Timestamp:
- 07/16/03 02:13:14 (5 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/SubObs/Event.py (modified) (2 diffs)
- trunk/RBFoundation/RBFoundation/SubObs/LogicRules/ListCollection.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/Renderers/Rapier.py (modified) (17 diffs)
- trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/Renderers/RapierObjects.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Common.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Groups.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Styled.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/SequenceMgr.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Renderer/View/Transformations.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Tools/Projections.py (modified) (5 diffs)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/pycrust.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/pycrust_filling.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/pycrust_shell.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxTools/GLViewSetup.py (modified) (3 diffs)
- trunk/RBSkinning/RBSkinning/wxTools/wxMSWindowsUtils.py (added)
- trunk/RBSkinning/demo/wxPythonSkin/docking/docking_grow.py (modified) (1 diff)
- trunk/RBSkinning/demo/wxPythonSkin/docking/docking_inplace.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/SubObs/Event.py
r597 r634 47 47 from LogicRules import ListCollection 48 48 49 class EventSubjectWeakList(EventSubjectBase, ListCollection.ListCollection, BaseCollection.WeakWrapCallableMixin): pass 50 class EventSubjectStrongList(EventSubjectBase, ListCollection.ListCollection, BaseCollection.StrongWrapCallableMixin): pass 49 class EventSubjectWeakList(EventSubjectBase, ListCollection.ListCollection, BaseCollection.WeakWrapCallableMixin): 50 prepend = True 51 class EventSubjectStrongList(EventSubjectBase, ListCollection.ListCollection, BaseCollection.StrongWrapCallableMixin): 52 prepend = True 51 53 EventSubjectList = EventSubjectWeakList 52 54 EventSubject = EventSubjectWeakList # Set the default … … 58 60 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 59 61 60 class ObjectEventSubjectWeakList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.WeakWrapCallableMixin): pass 61 class ObjectEventSubjectStrongList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.StrongWrapCallableMixin): pass 62 class ObjectEventSubjectWeakList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.WeakWrapCallableMixin): 63 prepend = True 64 class ObjectEventSubjectStrongList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.StrongWrapCallableMixin): 65 prepend = True 62 66 ObjectEventSubjectList = ObjectEventSubjectWeakList 63 67 ObjectEventSubject = ObjectEventSubjectWeakList # Set the default trunk/RBFoundation/RBFoundation/SubObs/LogicRules/ListCollection.py
r620 r634 37 37 38 38 _collection_class = list 39 insertidx = 039 prepend = False 40 40 41 41 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 45 45 def Add(self, Callback, *data): 46 46 wr = self._WrapCallable(Callback) 47 if self.insertidx is None: 47 if self.prepend: 48 self.collection.insert(0, data + (wr,)) 49 else: 48 50 self.collection.append(data + (wr,)) 49 else:50 self.collection.insert(self.insertidx, data + (wr,))51 51 52 52 def Remove(self, Callback): trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/Renderers/Rapier.py
r631 r634 24 24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 25 25 26 import warnings27 26 from OpenGL import GL 28 27 … … 39 38 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 40 39 41 class RapierPathFactory(Abstract.AbstractPathFactory): 42 __slots__ = 'pos', 'pathlist' 43 44 def BeginPath(self, pathstr): 45 self.pathlist = [] 46 self.pos = 0., 0. 47 48 def AddPathElement(self, name, *args): 49 name, relative = self.command_table[name] 50 getattr(self, name.lower())(relative, *args) 51 52 def EndPath(self, pathstr): 53 pass 54 55 def move(self, relative, x, y): 56 if relative: 57 dx, dy = self.pos 58 x += dx 59 y += dy 60 self.pathlist.append([(x,y)]) 61 self.pos = x,y 62 63 def closepath(self, relative): 64 lastpath = self.pathlist[-1] 65 self.pos = lastpath[0] 66 lastpath.append(self.pos) 67 68 def line(self, relative, x, y): 69 if relative: 70 dx, dy = self.pos 71 x += dx 72 y += dy 73 self.pathlist[-1].append((x,y)) 74 self.pos = x,y 75 76 def hline(self, relative, x): 77 dx, y = self.pos 78 if relative: 79 x += dx 80 self.pathlist[-1].append((x,y)) 81 self.pos = x,y 82 83 def vline(self, relative, y): 84 x, dy = self.pos 85 if relative: 86 y += dy 87 self.pathlist[-1].append((x,y)) 88 self.pos = x,y 89 90 def cubicbezier(self, relative, x1, y1, x2, y2, x, y): 91 if relative: 92 dx, dy = self.x, self.y 93 x1 += dx 94 y1 += dy 95 x2 += dx 96 y2 += dy 97 x += dx 98 y += dy 99 warnings.warn( "TODO: path.cubicbezier") 100 self.pathlist[-1].append((x,y)) 101 self.pos = x,y 102 103 def smoothcurve(self, relative, x2, y2, x, y): 104 if relative: 105 dx, dy = self.pos 106 x2 += dx 107 y2 += dy 108 x += dx 109 y += dy 110 warnings.warn( "TODO: path.smoothcurve") 111 self.pathlist[-1].append((x,y)) 112 self.pos = x,y 113 114 def quadraticbezier(self, relative, x1, y1, x, y): 115 if relative: 116 dx, dy = self.pos 117 x1 += dx 118 y1 += dy 119 x += dx 120 y += dy 121 warnings.warn( "TODO: path.quadraticbezier") 122 self.pathlist[-1].append((x,y)) 123 self.pos = x,y 124 125 def smoothquadraticbezier(self, relative, x, y): 126 if relative: 127 dx, dy = self.pos 128 x += dx 129 y += dy 130 warnings.warn( "TODO: path.smoothquadraticbezier") 131 self.pathlist[-1].append((x,y)) 132 self.pos = x,y 133 134 def ellipticarc(self, relative, rx, ry, xrotation, largeArcFlag, sweepFlag, x, y): 135 if relative: 136 dx, dy = self.pos 137 x += dx 138 y += dy 139 warnings.warn( "TODO: path.ellipticarc") 140 self.pathlist[-1].append((x,y)) 141 self.pos = x,y 142 143 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 144 145 class RapierTransformFactory(object): 146 def __init__(self, xform): 147 pass 148 149 def BeginTransform(self, transformstr): 150 pass 151 def AddTransformElement(self, name, *args): 152 pass 153 def EndTransform(self, transformstr): 154 pass 155 156 def translate(self, x=0.0, y=0.0): 157 warnings.warn( "TODO: transform.translate") 158 def scale(self, x=1., y=None): 159 warnings.warn( "TODO: transform.scale") 160 def rotate(self, angle=0.0, x=0, y=0): 161 warnings.warn( "TODO: transform.rotate") 162 def skewx(self, angle=0.0): 163 warnings.warn( "TODO: transform.skewx") 164 def skewy(self, angle=0.0): 165 warnings.warn( "TODO: transform.skewy") 166 def matrix(self, xx=1.0, xy=0.0, xh=0.0, yx=0.0, yy=1.0, yh=0.0, hx=0.0, hy=0.0, hh=1.0): 167 warnings.warn( "TODO: transform.matrix") 40 class RapierContext(object): 41 sequence = None 42 currentColor = None 43 fillcolor = None 44 strokecolor = None 45 fillopacity = 1. 46 strokeopacity = 1. 47 48 resolver = {} 49 50 def __init__(self, *kwin, **kw): 51 for each in kwin: 52 self.__dict__.update(each) 53 self.__dict__.update(kw) 54 55 def Branch(self, **kw): 56 return self.__class__(self.__dict__, **kw) 57 58 def GetFillColor(self, allowstroke=True): 59 result = self.fillcolor 60 if result is not None: 61 return self.fillcolor + (int(255*self.fillopacity),) 62 elif allowstroke: 63 return self.GetStrokeColor(False) 64 65 def GetStrokeColor(self, allowfill=True): 66 result = self.strokecolor 67 if result is not None: 68 return self.strokecolor + (int(255*self.strokeopacity),) 69 elif allowfill: 70 return self.GetFillColor(False) 71 72 def GetColors(self): 73 return {'stroke': self.GetStrokeColor(False), 'fill': self.GetFillColor(False)} 168 74 169 75 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 174 80 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 175 81 176 PathFactory = Rapier PathFactory177 TransformFactory = Rapier TransformFactory82 PathFactory = RapierObjects.RapierPathFactory 83 TransformFactory = RapierObjects.RapierTransformFactory 178 84 SequenceFactory = SequenceMgr.Sequence 179 85 … … 184 90 def Display(self, ri): 185 91 rootsequence = self.SequenceFactory() 186 self.sequence = rootsequence 187 self.style = {} 188 189 # SVG coordinate system is upside down from OpenGL's 92 93 # SVG coordinate system is upside down from OpenGL's , so scale y by -1 190 94 xform = Transformations.ScaleMgd(GL.GL_PROJECTION, True, (1, -1, 1)) 191 self.sequence.AddElement(xform.Select)192 self.sequence.AddPostElement(xform.Deselect)95 rootsequence.AddElement(xform.Select) 96 rootsequence.AddPostElement(xform.Deselect) 193 97 194 98 xform = Transformations.IdentityMgd(GL.GL_MODELVIEW, True) 195 self.sequence.AddElement(xform.Select) 196 self.sequence.AddPostElement(xform.Deselect) 197 198 self.context = [] 199 self.resolver = [] 99 rootsequence.AddElement(xform.Select) 100 rootsequence.AddPostElement(xform.Deselect) 101 102 self.contextstack = [] 103 self.context = RapierContext() 104 self.context.sequence = rootsequence 200 105 201 106 try: 202 107 ri.DisplayOn(self) 203 108 finally: 204 del self.resolver205 109 del self.context 206 del self. sequence110 del self.contextstack 207 111 return rootsequence 208 112 … … 219 123 def DisplaySVG(self, ri_svg): 220 124 self.PushContext(ri_svg, True) 221 self. resolver.append(ri_svg.idmapping)125 self.context.resolver = ri_svg.idmapping 222 126 try: 223 127 ri_svg.DisplayChildrenOn(self) 224 128 finally: 225 self.resolver.pop()226 129 self.PopContext(ri_svg) 227 130 … … 254 157 self.PushContext(ri_line) 255 158 try: 256 self.sequence.AddElement(RapierObjects.Line((ri_line.x1, ri_line.y1), (ri_line.x2, ri_line.y2))) 159 ro = RapierObjects.Line((ri_line.x1, ri_line.y1), (ri_line.x2, ri_line.y2)) 160 ro.SetColors(**self.context.GetColors()) 161 if ro: self.context.sequence.AddElement(ro) 257 162 finally: 258 163 self.PopContext(ri_line) … … 261 166 self.PushContext(ri_rect) 262 167 try: 263 self.sequence.AddElement(RapierObjects.Rect(ri_rect.width, ri_rect.height)) 168 ro = RapierObjects.Rect(ri_rect.width, ri_rect.height) 169 ro.SetColors(**self.context.GetColors()) 170 if ro: self.context.sequence.AddElement(ro) 264 171 finally: 265 172 self.PopContext(ri_rect) … … 268 175 self.PushContext(ri_circle) 269 176 try: 270 warnings.warn( "TODO: DisplayCircle") 177 ro = RapierObjects.Circle(ri_circle.cx, ri_circle.cy, ri_circle.r) 178 ro.SetColors(**self.context.GetColors()) 179 if ro: self.context.sequence.AddElement(ro) 271 180 finally: 272 181 self.PopContext(ri_circle) … … 275 184 self.PushContext(ri_ellipse) 276 185 try: 277 warnings.warn( "TODO: DisplayEllipse") 186 ro = RapierObjects.Ellipse(ri_ellipse.cx, ri_ellipse.cy, ri_ellipse.rx, ri_ellipse.ry) 187 ro.SetColors(**self.context.GetColors()) 188 if ro: self.context.sequence.AddElement(ro) 278 189 finally: 279 190 self.PopContext(ri_ellipse) … … 282 193 self.PushContext(ri_polygon) 283 194 try: 284 self.sequence.AddElement(RapierObjects.Polygon(ri_polygon.points)) 195 ro = RapierObjects.Polygon(ri_polygon.points) 196 ro.SetColors(**self.context.GetColors()) 197 if ro: self.context.sequence.AddElement(ro) 285 198 finally: 286 199 self.PopContext(ri_polygon) … … 289 202 self.PushContext(ri_polyline) 290 203 try: 291 self.sequence.AddElement(RapierObjects.Polyline(ri_polyline.points)) 204 ro = RapierObjects.Polyline(ri_polyline.points) 205 ro.SetColors(**self.context.GetColors()) 206 if ro: self.context.sequence.AddElement(ro) 292 207 finally: 293 208 self.PopContext(ri_polyline) … … 297 212 try: 298 213 pathlist = ri_path.path.RestoreTo(self.PathFactory()).pathlist 299 self.sequence.AddElement(RapierObjects.Path(pathlist)) 214 ro = RapierObjects.Path(pathlist) 215 ro.SetColors(**self.context.GetColors()) 216 if ro: self.context.sequence.AddElement(ro) 300 217 finally: 301 218 self.PopContext(ri_path) … … 304 221 self.PushContext(ri_text) 305 222 try: 306 warnings.warn( "TODO: DisplayText") 223 ro = RapierObjects.Text() 224 ro.SetColors(**self.context.GetColors()) 225 if ro: self.context.sequence.AddElement(ro) 307 226 finally: 308 227 self.PopContext(ri_text) … … 312 231 def ResolveReference(self, reference): 313 232 base, tag = reference 314 return self. resolver[-1].get(tag, None)233 return self.context.resolver.get(tag, None) 315 234 316 235 def PushContext(self, ri, extendTransform=False): 317 self.context.append([self.sequence, self.style]) 236 self.contextstack.append(self.context) 237 self.context = self.context.Branch() 318 238 319 239 if extendTransform: … … 324 244 325 245 def PopContext(self, ri): 326 self. sequence, self.style = self.context.pop()246 self.context = self.contextstack.pop() 327 247 328 248 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 330 250 def PushSequence(self): 331 251 newsequence = self.SequenceFactory() 332 self. sequence.AddElement(newsequence.Execute)333 self. sequence = newsequence334 return self.sequence252 self.context.sequence.AddElement(newsequence.Execute) 253 self.context.sequence = newsequence 254 return newsequence 335 255 336 256 def _DoStyle(self, ri): 337 try: newstyle = ri.style257 try: style = ri.style 338 258 except AttributeError: pass 339 259 340 if newstyle: 341 self.style = self.style.copy() 342 self.style.update(newstyle) 343 344 if self.style: 345 color = self.style.get('fill') or self.style.get('stroke') 346 if color: 347 self.sequence.AddElement(RapierObjects.Color(color)) 260 if style: 261 if 'color' in style: 262 self.context.currentColor = style['color'] 263 264 # fill 265 if 'fill' in style: 266 fillcolor = style['fill'] 267 if fillcolor == 'currentColor': 268 fillcolor = self.context.currentColor 269 self.context.fillcolor = fillcolor 270 271 if 'fill-opacity' in style: 272 self.context.fillopacity = style['fill-opacity'] 273 274 # stroke 275 if 'stroke' in style: 276 strokecolor = style['stroke'] 277 if strokecolor == 'currentColor': 278 strokecolor = self.context.currentColor 279 self.context.strokecolor = strokecolor 280 281 if 'stroke-opacity' in style: 282 self.context.strokeopacity = style['stroke-opacity'] 348 283 349 284 def _DoTransform(self, ri): … … 367 302 368 303 def _DoExtendedTransform(self, ri): 369 l, b, w, h = ri.viewBox370 xform = Transformations.OrthographicMgd(None, True, l, l+w, b, b+h)304 x, y, w, h = ri.viewBox 305 xform = Transformations.OrthographicMgd(None, True, x, x+w, y, y+h) 371 306 372 307 sequence = self.PushSequence() trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/Renderers/RapierObjects.py
r631 r634 27 27 from OpenGL import GL 28 28 29 from RBRapier.Tools.Geometry.gluPolygonTesselation import gluPolygonTesselator 30 31 import Abstract 32 29 33 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 34 #~ Definitions 31 35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 36 33 class Color(object): 34 __slots__ = 'color', 35 36 def __init__(self, color): 37 self.color = color 38 39 def Execute(self, context): 40 GL.glColor3ubv(self.color) 41 42 class Rect(object): 37 class Base(object): 38 __slots__ = 'strokecolor', 'fillcolor' 39 40 def SetColors(self, stroke, fill): 41 self.strokecolor = stroke 42 self.fillcolor = fill 43 44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 45 46 class Text(Base): 47 __slots__ = () 48 49 def __nonzero__(self): 50 return False 51 52 def __init__(self): 53 warnings.warn( "TODO: Text") 54 55 def Execute(self, context): 56 pass 57 58 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 59 60 class Line(Base): 61 __slots__ = 'v0', 'v1' 62 63 def __init__(self, v0, v1): 64 self.v0 = v0 65 self.v1 = v1 66 67 def Execute(self, context): 68 if self.strokecolor: 69 GL.glColor4ubv(self.strokecolor) 70 71 GL.glBegin(GL.GL_LINES) 72 GL.glVertex2fv(self.v0) 73 GL.glVertex2fv(self.v1) 74 GL.glEnd() 75 76 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 78 class Rect(Base): 43 79 __slots__ = 'w', 'h' 44 80 … … 48 84 49 85 def Execute(self, context): 86 if self.fillcolor: 87 GL.glColor4ubv(self.fillcolor) 88 elif self.strokecolor: 89 GL.glColor4ubv(self.strokecolor) 50 90 GL.glRectf(0., 0., self.w, self.h) 51 91 52 def Line(v0, v1): 53 return Polyline((v0, v1)) 54 55 class Polyline(object): 56 __slots__ = 'vertices', 57 58 def __init__(self, vertices): 59 self.vertices = vertices 60 61 def Execute(self, context): 62 GL.glBegin(GL.GL_LINE_STRIP) 63 for v in self.vertices: 64 GL.glVertex2fv(v) 65 GL.glEnd() 66 67 def Polygon(*args): 68 warnings.warn( "TODO: Polygon") 69 return Polyline(*args) 70 71 class Path(object): 72 __slots__ = 'paths', 92 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 93 94 class Ellipse(Base): 95 __slots__ = 'cx', 'cy', 'rx', 'ry' 96 97 def __init__(self, cx, cy, rx, ry): 98 self.cx = cx 99 self.cy = cy 100 self.rx = rx 101 self.ry = ry 102 warnings.warn( "TODO: Ellipse") 103 104 def Execute(self, context): 105 if self.fillcolor: 106 GL.glColor4ubv(self.fillcolor) 107 elif self.strokecolor: 108 GL.glColor4ubv(self.strokecolor) 109 110 x0 = self.cx - self.rx 111 y0 = self.cy - self.ry 112 x1 = self.cx + self.rx 113 y1 = self.cy + self.ry 114 GL.glRectf(x0, y0, x1, y1) 115 116 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 117 118 class Circle(Ellipse): 119 def __init__(self, cx, cy, r): 120 warnings.warn( "TODO: Circle") 121 Ellipse.__init__(self, cx, cy, r, r) 122 123 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 124 125 class Polyline(Base): 126 __slots__ = 'verticies', 'listid' 127 128 def __init__(self, verticies): 129 self.verticies = [(x,y,0) for x,y in verticies] 130 self.listid = None 131 132 def Execute(self, context): 133 if self.listid is None: 134 self.listid = GL.glGenLists(1) 135 GL.glNewList(self.listid, GL.GL_COMPILE) 136 gluPolygonTesselator([self.verticies]) 137 GL.glEndList() 138 self.verticies = None 139 140 if self.fillcolor: 141 GL.glColor4ubv(self.fillcolor) 142 GL.glCallList(self.listid) 143 144 #if self.strokecolor: 145 # GL.glColor4ubv(self.strokecolor) 146 #GL.glCallList(self.listid) 147 148 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 149 150 class Polygon(Polyline): 151 pass 152 153 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 154 155 class Path(Base): 156 __slots__ = 'paths', 'listid' 73 157 74 158 def __init__(self, paths): 75 159 self.paths = paths 76 77 def Execute(self, context): 78 for vertices in self.paths: 79 GL.glBegin(GL.GL_LINE_STRIP) 80 for v in vertices: 81 GL.glVertex2fv(v) 82 GL.glEnd() 83 160 self.listid = None 161 162 def Execute(self, context): 163 if self.listid is None: 164 self.listid = GL.glGenLists(1) 165 GL.glNewList(self.listid, GL.GL_COMPILE) 166 if self.fillcolor: 167 gluPolygonTesselator(self.paths) 168 else: 169 for verticies in self.paths: 170 GL.glBegin(GL.GL_LINE_STRIP) 171 for v in verticies: 172 GL.glVertex2fv(v) 173 GL.glEnd() 174 GL.glEndList() 175 self.paths = None 176 177 if self.fillcolor: 178 GL.glColor4ubv(self.fillcolor) 179 elif self.strokecolor: 180 GL.glColor4ubv(self.strokecolor) 181 GL.glCallList(self.listid) 182 183 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 184 #~ Paths 185 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 186 187 class RapierPathFactory(Abstract.AbstractPathFactory): 188 __slots__ = 'pos', 'pathlist' 189 190 def BeginPath(self, pathstr): 191 self.pathlist = [] 192 self.pos = 0., 0. 193 194 def AddPathElement(self, name, *args): 195 name, relative = self.command_table[name] 196 getattr(self, name.lower())(relative, *args) 197 198 def EndPath(self, pathstr): 199 pass 200 201 def move(self, relative, x, y): 202 if relative: 203 dx, dy = self.pos 204 x += dx 205 y += dy 206 self.pathlist.append([(x,y)]) 207 self.pos = x,y 208 209 def closepath(self, relative): 210 lastpath = self.pathlist[-1] 211 self.pos = lastpath[0] 212 lastpath.append(self.pos) 213 214 def line(self, relative, x, y): 215 if relative: 216 dx, dy = self.pos 217 x += dx 218 y += dy 219 self.pathlist[-1].append((x,y)) 220 self.pos = x,y 221 222 def hline(self, relative, x): 223 dx, y = self.pos 224 if relative: 225 x += dx 226 self.pathlist[-1].append((x,y)) 227 self.pos = x,y 228 229 def vline(self, relative, y): 230 x, dy = self.pos 231 if relative: 232 y += dy 233 self.pathlist[-1].append((x,y)) 234 self.pos = x,y 235 236 def cubicbezier(self, relative, x1, y1, x2, y2, x, y): 237 if relative: 238 dx, dy = self.pos 239 x1 += dx 240 y1 += dy 241 x2 += dx 242 y2 += dy 243 x += dx 244 y += dy 245 warnings.warn( "TODO: path.cubicbezier") 246 self.pathlist[-1].append((x,y)) 247 self.pos = x,y 248 249 def smoothcurve(self, relative, x2, y2, x, y): 250 if relative: 251 dx, dy = self.pos 252 x2 += dx 253 y2 += dy 254 x += dx 255 y += dy 256 warnings.warn( "TODO: path.smoothcurve") 257 self.pathlist[-1].append((x,y)) 258 self.pos = x,y 259 260 def quadraticbezier(self, relative, x1, y1, x, y): 261 if relative: 262 dx, dy = self.pos 263 x1 += dx 264 y1 += dy 265 x += dx 266 y += dy 267 warnings.warn( "TODO: path.quadraticbezier") 268 self.pathlist[-1].append((x,y)) 269 self.pos = x,y 270 271 def smoothquadraticbezier(self, relative, x, y): 272 if relative: 273 dx, dy = self.pos 274 x += dx 275 y += dy 276 warnings.warn( "TODO: path.smoothquadraticbezier") 277 self.pathlist[-1].append((x,y)) 278 self.pos = x,y 279 280 def ellipticarc(self, relative, rx, ry, xrotation, largeArcFlag, sweepFlag, x, y): 281 if relative: 282 dx, dy = self.pos 283 x += dx 284 y += dy 285 warnings.warn( "TODO: path.ellipticarc") 286 self.pathlist[-1].append((x,y)) 287 self.pos = x,y 288 289 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 290 #~ Transforms 291 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 292 293 class RapierTransformFactory(object): 294 def __init__(self, xform): 295 pass 296 297 def BeginTransform(self, transformstr): 298 pass 299 def AddTransformElement(self, name, *args): 300 pass 301 def EndTransform(self, transformstr): 302 pass 303 304 def translate(self, x=0.0, y=0.0): 305 warnings.warn( "TODO: transform.translate") 306 def scale(self, x=1., y=None): 307 warnings.warn( "TODO: transform.scale") 308 def rotate(self, angle=0.0, x=0, y=0): 309 warnings.warn( "TODO: transform.rotate") 310 def skewx(self, angle=0.0): 311 warnings.warn( "TODO: transform.skewx") 312 def skewy(self, angle=0.0): 313 warnings.warn( "TODO: transform.skewy") 314 def matrix(self, xx=1.0, xy=0.0, xh=0.0, yx=0.0, yy=1.0, yh=0.0, hx=0.0, hy=0.0, hh=1.0): 315 warnings.warn( "TODO: transform.matrix") 316 317 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 318 trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Common.py
r631 r634 24 24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 25 25 26 import re 26 27 import TransformBuilder 28 29 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 #~ Constants / Variables / Etc. 31 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 33 _re_coordwithunits = re.compile(r'([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:[eE][-+]?\d+)?)(\w*)') 27 34 28 35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 128 135 129 136 def _asCoord(self, coord): 130 return float(coord) 137 try: 138 return float(coord) 139 except ValueError: 140 match = _re_coordwithunits.match(coord) 141 if match: 142 value, units = match.groups() 143 return float(value) 131 144 132 145 def _asCoordTuple(self, coords): trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Groups.py
r631 r634 151 151 alignment, specifier = alignment.split() 152 152 else: specifier = 'meet' 153 return [alignment[0:4], alignment[4:8], specifier. strip().lower()]153 return [alignment[0:4], alignment[4:8], specifier.lower()] 154 154 155 155 def _asViewBox(self, viewBox): trunk/RBRapier/RBRapier/Formats/Attic/SVG.old/SVGSkin/RenderItems/Styled.py
r631 r634 134 134 135 135 "stroke": _asColor, 136 "stroke-width": TransformableRenderItem._asCoord,137 136 "stroke-opacity": _asOpacity, 138 "stroke-dasharray": _asDashArray, 139 "stroke-linecap": _asString, 140 "stroke-linejoin": _asString, 141 "stroke-meterlimit": _asString, 137 #"stroke-width": TransformableRenderItem._asCoord, 138 #"stroke-dasharray": _asDashArray, 139 #"stroke-linecap": _asString, 140 #"stroke-linejoin": _asString, 141 #"stroke-meterlimit": _asString, 142 142 143 143 "fill": _asColor, trunk/RBRapier/RBRapier/Renderer/SequenceMgr.py
r457 r634 62 62 self.OnEndExecute = SubjectList() 63 63 64 def __len__(self): 65 return len(self.Elements) 66 64 67 def AddSetupElement(self, Element, PriorityDelta=0): 65 68 self._AddElement(Element, self.SetupPhase + PriorityDelta) … … 103 106 if priority <= 0: 104 107 idx = bisect.bisect_right(self.Elements, (priority, _MatchAll, _MatchAll)) 105 else: idx = bisect.bisect_left(self.Elements, (priority, _MatchAll, _MatchAll)) 108 else: 109 idx = bisect.bisect_left(self.Elements, (priority, _MatchAll, _MatchAll)) 110 106 111 if isinstance(Element, types.MethodType): 107 112 ElementFn, Element = Element, Element.im_self 108 elif isinstance(getattr(Element, 'Execute', None), types.MethodType):113 elif callable(getattr(Element, 'Execute', None)): 109 114 ElementFn = Element.Execute 110 elif isinstance(getattr(Element, 'Select', None), types.MethodType):115 elif callable(getattr(Element, 'Select', None)): 111 116 ElementFn = Element.Select 117 else: 118 raise ValueError, "Unsuppored element type %r: %r" % (type(Element), Element) 119 112 120 self.Elements.insert(idx, (priority, ElementFn, Element)) 113 121 trunk/RBRapier/RBRapier/Renderer/View/Transformations.py
r379 r634 50 50 def __init__(self, Mode=None, Save=0, *args, **kw): 51 51 super(ManagedTransformationMixin, self).__init__(*args, **kw) 52 self.Mode = Mode 53 self.Save = Save 52 if Mode is not None: 53 self.Mode = Mode 54 if Save is not 0: 55 self.Save = Save 54 56 55 57 def Select(self, context): trunk/RBRapier/RBRapier/Tools/Projections.py
r362 r634 64 64 self.Right, self.Top, self.Far = Higher 65 65 66 def _getWidth(self):66 def GetWidth(self): 67 67 return self.Right - self.Left 68 def _setWidth(self, value):68 def SetWidth(self, value): 69 69 delta = (self.Width - value) * 0.5 70 70 self.Right -= delta 71 71 self.Left += delta 72 Width = property( _getWidth, _setWidth)73 def _getHCenter(self, mult=0.5):72 Width = property(GetWidth, SetWidth) 73 def GetHCenter(self, mult=0.5): 74 74 return (self.Left + self.Right) * mult 75 def _setHCenter(self, value):75 def SetHCenter(self, value): 76 76 hw = self.Width * 0.5 77 77 self.Right = value + hw 78 78 self.Left = value - hw 79 HCenter = property( _getHCenter, _setHCenter)80 81 def _getHeight(self):79 HCenter = property(GetHCenter, SetHCenter) 80 81 def GetHeight(self): 82 82 return self.Top - self.Bottom 83 def _setHeight(self, value):83 def SetHeight(self, value): 84 84 delta = (self.Height - value) * 0.5 85 85 self.Top -= delta 86 86 self.Bottom += delta 87 Height = property( _getHeight, _setHeight)88 def _getVCenter(self, mult=0.5):87 Height = property(GetHeight, SetHeight) 88 def GetVCenter(self, mult=0.5): 89 89 return (self.Top + self.Bottom) * mult 90 def _setVCenter(self, value):90 def SetVCenter(self, value): 91 91 hw = self.Height * 0.5 92 92 self.Top = value + hw 93 93 self.Bottom = value - hw 94 VCenter = property( _getVCenter, _setVCenter)95 96 def _getDeprojh(self):94 VCenter = property(GetVCenter, SetVCenter) 95 96 def GetDeprojh(self): 97 97 return self.Far - self.Near 98 def _setDeprojh(self, value):98 def SetDeprojh(self, value): 99 99 delta = (self.Deprojh - value) * 0.5 100 100 self.Far -= delta 101 101 self.Near += delta 102 Deprojh = property( _getDeprojh, _setDeprojh)103 def _getDCenter(self, mult=0.5):102 Deprojh = property(GetDeprojh, SetDeprojh) 103 def GetDCenter(self, mult=0.5): 104 104 return (self.Far + self.Near) * mult 105 def _setDCenter(self, value):105 def SetDCenter(self, value): 106 106 hw = self.Deprojh * 0.5 107 107 self.Far = value + hw 108 108 self.Near = value - hw 109 DCenter = property( _getDCenter, _setDCenter)110 111 def _getCenter(self):109 DCenter = property(GetDCenter, SetDCenter) 110 111 def GetCenter(self): 112 112 return (self.HCenter, self.VCenter, self.DCenter) 113 def _setCenter(self, value):113 def SetCenter(self, value): 114 114 self.HCenter, self.VCenter, self.DCenter = value 115 Center = property( _getCenter, _setCenter)116 def _getDimensions(self):115 Center = property(GetCenter, SetCenter) 116 def GetDimensions(self): 117 117 return (self.Width, self.Height, self.Deprojh) 118 def _setDimensions(self, value):118 def SetDimensions(self, value): 119 119 self.Width, self.Height, self.Deprojh = value 120 Dimensions = property(_getDimensions, _setDimensions) 120 Dimensions = property(GetDimensions, SetDimensions) 121 122 def GetAspectRatio(self): 123 return self.Height / self.Width 124 def SetAspectRatio(self, value, byWidth=None): 125 if byWidth is None: 126 byWidth = value < 1 #self.Width < self.Height 127 if byWidth: 128 self.Width = self.Height / float(value) 129 else: 130 self.Height = self.Width * float(value) 131 AspectRatio = property(GetAspectRatio, SetAspectRatio) 121 132 122 133 def _asTuple(self): … … 144 155 height = self.Height 145 156 deprojh = self.Deprojh 146 xoff = self. _getHCenter(1.) / width147 yoff = self. _getVCenter(1.) / height148 zoff = self. _getDCenter(1.) / deprojh157 xoff = self.GetHCenter(1.) / width 158 yoff = self.GetVCenter(1.) / height 159 zoff = self.GetDCenter(1.) / deprojh 149 160 150 161 result = Numeric.asarray([ … … 208 219 halfheight = 0.5 * self.Height 209 220 halfdeprojh = 0.5 * self.Deprojh 210 xoff = self. _getHCenter()211 yoff = self. _getVCenter()212 zoff = self. _getDCenter()221 xoff = self.GetHCenter() 222 yoff = self.GetVCenter() 223 zoff = self.GetDCenter() 213 224 214 225
