root/trunk/RBRapier/demo/Attic/SVG.old/display.py

Revision 660, 5.3 kB (checked in by sholloway, 5 years ago)

*** empty log message ***

Line 
1 #!/usr/bin/env python
2 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 ##~ License
4 ##~
5 ##- The RuneBlade Foundation library is intended to ease some
6 ##- aspects of writing intricate Jabber, XML, and User Interface (wxPython, etc.)
7 ##- applications, while providing the flexibility to modularly change the
8 ##- architecture. Enjoy.
9 ##~
10 ##~ Copyright (C) 2002  TechGame Networks, LLC.
11 ##~
12 ##~ This library is free software; you can redistribute it and/or
13 ##~ modify it under the terms of the BSD style License as found in the
14 ##~ LICENSE file included with this distribution.
15 ##~
16 ##~ TechGame Networks, LLC can be reached at:
17 ##~ 3578 E. Hartsel Drive #211
18 ##~ Colorado Springs, Colorado, USA, 80920
19 ##~
20 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21
22 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 #~ Imports
24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25
26 import logging
27 import sys
28 import time
29
30 from wxPython import wx
31 from OpenGL import GL, GLUT
32
33 from RBSkinning import SkinXML
34 from RBSkinning.wxTools.GLViewSetup import GLViewSetup
35
36 from RBRapier.Renderer import SequenceMgr
37 from RBRapier.Renderer import DisplayList
38 from RBRapier.Renderer.Environment import Buffers
39 from RBRapier.Renderer.View import Viewport
40 from RBRapier.Renderer.View import Transformations
41 from RBRapier.Renderer.View import TransformationSettings
42
43 from RBRapier.Formats import SVG
44 import RBRapier.Formats.SVG.SVGSkinner
45 import RBRapier.Formats.SVG.Renderers.Rapier
46
47 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 #~ Constants / Variables / Etc.
49 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50
51 skinxml = """<?xml version='1.0'?>
52 <skin:skin xmlns:skin='http://namespaces.runeblade.com/skin' xmlns:py='http://namespaces.runeblade.com/xmlPython' xmlns='http://namespaces.runeblade.com/wxPythonSkin'>
53     <frame ctxvar='behavior.frame' title='SVG Displayer' show='1' pos='0,0' size='800,600'>
54         <layout fit='0'>
55             <panel>
56                 <layout>
57                     <glcanvas ctxvar='behavior.glcanvas' sizercfg='1, wxEXPAND' attribList='[WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_MIN_ALPHA, 8, WX_GL_DEPTH_SIZE, 8]' />
58                 </layout>
59             </panel>
60         </layout>
61     </frame>
62
63     <!--
64     <frame title='Demo PyCrust' show='1' pos='850,0' size='400,800'>
65         <layout fit='0'>
66             <pycrust_shell sizercfg='1, wxEXPAND' locals='{"behavior":context.behavior}'/>
67         </layout>
68     </frame>
69     -->
70 </skin:skin>
71 """
72
73 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 #~ Definitions
75 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76
77 class Behavior(object):
78     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79     #~ Constants / Variables / Etc.
80     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81
82     frametitle = 'SVG Displayer'
83
84     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85     #~ Public Methods
86     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87
88     def OnSkinInitialize(self):
89         pass
90
91     def OnSkinFinalize(self):
92         self.svgitems = [SVG.SVGSkinner.SkinFile(svgfile).object for svgfile in sys.argv[1:]]
93
94         self.viewsetup = GLViewSetup(self.glcanvas, 30)
95         self.viewsetup.OnRender.Add(self.ViewInitialize)
96         self.viewsetup.OnRender.Add(self.Render)
97         self.viewsetup.OnRender.Add(self.PostRender)
98         self.viewsetup.StartRendering()
99
100     def ViewInitialize(self, glviewsetup, canvas):
101         glviewsetup.OnRender.Remove(self.ViewInitialize)
102         self.root = SequenceMgr.RootSequence()
103
104         self.clearcolor = Buffers.ClearColor((1.0,1.0,1.0,0.0))
105         self.root.AddElement(self.clearcolor, -2)
106
107         self.viewport = Viewport.Viewport()
108         self.root.AddElement(self.viewport, -2)
109
110         self.projection = Transformations.OrthographicMgd(GL.GL_PROJECTION, True, -1, 1, -1, 1, -1, 1)
111         self.root.AddElement(self.projection.Select)
112         self.root.AddPostElement(self.projection.Deselect)
113
114         self.svgs = SequenceMgr.Sequence()
115         svgrenderer = SVG.Renderers.Rapier.RapierRenderer()
116         while self.svgitems:
117             svg = self.svgitems.pop()
118             self.svgs.AddElement(svgrenderer.Display(svg))
119
120         self.root.AddElement(self.svgs)
121
122     _fps_score = 0
123     def Render(self, subject, canvas):
124         self.viewport.SetRectangle(canvas.GetClientRect().asTuple())
125         self.projection.Dimensions = 2, 2, 2
126         self.projection.AspectRatio = self.viewport.AspectRatio
127         self.root.Execute(None)
128
129         if time.clock() - self._fps_score >= 1.:
130             self.frame.SetTitle(self.frametitle + ' [FPS: %1.1f]' % self.root.Statistics['persecond'])
131             self._fps_score = time.clock()
132
133     def PostRender(self, glviewsetup, canvas):
134         glviewsetup.OnRender.Remove(self.PostRender)
135         DisplayList.DisplayList.InsertAspect(self.svgs)
136
137 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
138 #~ Main
139 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140
141 def Run():
142     application = wx.wxPySimpleApp()
143     behavior = Behavior()
144     behavior.OnSkinInitialize()
145     skin = SkinXML(skinxml, application=application, behavior=behavior)
146     behavior.OnSkinFinalize()
147     skin.context.application.MainLoop()
148
149 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
150
151 if __name__ == '__main__':
152     logging.basicConfig()
153     logging.root.setLevel(logging.INFO)
154
155     Run()
156
Note: See TracBrowser for help on using the browser.