Changeset 345
- Timestamp:
- 10/31/02 17:59:45 (6 years ago)
- Files:
-
- trunk/RBRapier/RBRapier/Formats/Wavefront/Loader.py (added)
- trunk/RBRapier/RBRapier/Formats/Wavefront/MeshedObject.py (added)
- trunk/RBRapier/RBRapier/Formats/Wavefront/Tools (added)
- trunk/RBRapier/RBRapier/Formats/Wavefront/Tools/IndexOffsetRemapping.py (added)
- trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/BufferMgr.py (modified) (3 diffs)
- trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/Environment/FragmentTests.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/Geometry/ArrayTraversal.py (modified) (4 diffs)
- trunk/RBRapier/RBRapier/Renderer/SequenceMgr.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Renderer/StateMgr.py (modified) (6 diffs)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/LocalityRemapper.py (added)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleLister.py (added)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py (modified) (3 diffs)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py (modified) (7 diffs)
- trunk/RBRapier/demo/Cube/cubescene.py (modified) (1 diff)
- trunk/RBRapier/demo/Wavefront (added)
- trunk/RBRapier/demo/Wavefront/data (added)
- trunk/RBRapier/demo/Wavefront/data/oldtree.mtl (added)
- trunk/RBRapier/demo/Wavefront/scene.py (added)
- trunk/RBRapier/demo/Wavefront/simple.py (added)
- trunk/RBRapier/demo/Wavefront/simple.skin (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py
r343 r345 117 117 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 118 118 119 class AttributeTrackerBaseElement(AttributeTrackerBase ):119 class AttributeTrackerBaseElement(AttributeTrackerBase, DynamicAttributeChangeElement): 120 120 def SequenceAdd(self, Sequence): 121 121 AttributeTrackerBase.SequenceAdd(self, Sequence) 122 122 setattr(Sequence, self._ElementAttributeName, self) 123 123 124 class AttributeTracker Element(AttributeTrackerBaseElement):124 class AttributeTracker(AttributeTrackerBaseElement): 125 125 _ElementAttributeName = 'AttributeChange' 126 126 127 class ClientAttributeTracker Element(AttributeTrackerBaseElement):127 class ClientAttributeTracker(AttributeTrackerBaseElement): 128 128 _ElementAttributeName = 'ClientAttributeChange' 129 129 trunk/RBRapier/RBRapier/Renderer/BufferMgr.py
r343 r345 47 47 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 48 48 49 class Dynamic AttributeChangeElement(DynamicChangeElementBase):49 class DynamicBufferChangeElement(DynamicChangeElementBase): 50 50 """Encapsulates a single collection of attribute changes""" 51 51 … … 102 102 raise ValueError, "ChangeType is expected to be one of ['add', 'update', 'remove'], but is '%s'" % ChangeType 103 103 104 def Update Attributes(self):104 def UpdateBuffers(self): 105 105 if self._NeedUpdate: 106 106 self.Bitmask = 0 … … 115 115 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 116 117 class BufferTracker(BufferTrackerBase ):117 class BufferTracker(BufferTrackerBase, DynamicBufferChangeElement): 118 118 def SequenceAdd(self, Sequence): 119 AttributeTrackerBase.SequenceAdd(self, Sequence)119 BufferTrackerBase.SequenceAdd(self, Sequence) 120 120 setattr(Sequence, self._ElementAttributeName, self) 121 121 trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py
r343 r345 35 35 36 36 class DynamicChangeElementBase(ChangeElementBase): 37 Tracker = LazyProperty('Tracker', SubjectList)37 Trackers = LazyProperty('Tracker', SubjectList) 38 38 39 39 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Renderer/Environment/FragmentTests.py
r341 r345 81 81 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 82 82 83 AttributeChange = AttributeChangeElement(GL.GL_STENCIL_B IT)83 AttributeChange = AttributeChangeElement(GL.GL_STENCIL_BUFFER_BIT) 84 84 Function = GL.GL_ALWAYS 85 85 Operation = GL.GL_KEEP trunk/RBRapier/RBRapier/Renderer/Geometry/ArrayTraversal.py
r340 r345 28 28 29 29 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 #~ Constants / Variables / Etc. 31 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 33 _PrimitveMap = { 34 'pointlist': GL.GL_POINTS, 35 36 'linelist': GL.GL_LINES, 37 'linestrip': GL.GL_LINE_STRIP, 38 39 'trilist': GL.GL_TRIANGLES, 40 'trifan': GL.GL_TRIANGLE_FAN, 41 'tristrip': GL.GL_TRIANGLE_STRIP, 42 } 43 44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 45 #~ Definitions 31 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 39 54 40 55 def __init__(self, primitive, rangecollection): 41 self.primitive = primitive56 self.primitive = _PrimitveMap.get(primitive, primitive) 42 57 self.rangecollection = rangecollection 43 58 … … 67 82 68 83 def __init__(self, primitive, datacollection, format=None): 69 self.primitive = primitive84 self.primitive = _PrimitveMap.get(primitive, primitive) 70 85 if format is None: format = self._DefaultFormat 71 86 self.datacollection = [Numeric.asarray(data, format) for data in datacollection] … … 74 89 def Execute(self, context): 75 90 for data in self.datacollection: 76 self._glDrawElements(self.primitive, self.data)91 self._glDrawElements(self.primitive, data) 77 92 trunk/RBRapier/RBRapier/Renderer/SequenceMgr.py
r343 r345 40 40 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41 41 42 class Sequence (object):42 class SequenceBase(object): 43 43 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 44 44 #~ Public Methods … … 82 82 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 83 83 84 class Sequence(SequenceBase): 85 def __init__(self, ManagerAttribute=0, ManageBuffer=0): 86 SequenceBase.__init__(self) 87 88 if ManagerAttribute: 89 self.AttributeMgr = AttributeMgr.AttributeEffector() 90 else: self.AttributeMgr = AttributeMgr.AttributeTracker() 91 self.AddElement(self.AttributeMgr,-1) 92 93 if ManageBuffer: 94 self.BufferMgr = BufferMgr.BufferEffector() 95 else: self.BufferMgr = BufferMgr.BufferTracker() 96 self.AddElement(self.BufferMgr,-1) 97 98 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 99 84 100 class RootSequence(Sequence): 85 101 def __init__(self): 86 Sequence.__init__(self )102 Sequence.__init__(self, 1, 1) 87 103 self.StateMgr = StateMgr.StateManager() 88 104 self.ClientStateMgr = StateMgr.ClientStateManager() 89 self.BufferMgr = BufferMgr.BufferEffector()90 self.AddElement(self.BufferMgr,-1)91 self.AttributeMgr = AttributeMgr.AttributeEffector()92 self.AddElement(self.AttributeMgr,-1)93 105 94 106 def Execute(self, context=None): trunk/RBRapier/RBRapier/Renderer/StateMgr.py
r343 r345 43 43 44 44 def _UpdateState(self, state, enabled): 45 self._statevector[state] = enable 45 self._statevector[state] = enabled 46 46 47 47 def GetState(self, state): … … 66 66 return self.GetState(state) != 1 67 67 def Enable(self, state): 68 self.SetState( 1)68 self.SetState(state, 1) 69 69 70 70 def IsDisabled(self, state): … … 73 73 return self.GetState(state) != 0 74 74 def Disable(self, state): 75 self.SetState( 0)75 self.SetState(state, 0) 76 76 77 77 def IsKnown(self, state): … … 82 82 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 83 83 84 class StateManagerStats Mixin(Aspect.Aspect):84 class StateManagerStatsAspect(Aspect.Aspect): 85 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 86 86 #~ Constants / Variables / Etc. … … 98 98 else: sc[state] = sc.get(state, 0) + 1 99 99 100 self._statevector[state] = enable 100 self._statevector[state] = enabled 101 101 102 102 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 103 103 104 104 class StateManager(StateManagerBase): 105 #AttributeChange = AttributeChangeElement(GL.GL_ENABLE_BIT)105 AttributeChange = AttributeChangeElement(GL.GL_ENABLE_BIT) 106 106 107 107 def _SetState(self, state, enabled): 108 if enable : GL.glEnable(state)108 if enabled: GL.glEnable(state) 109 109 else: GL.glDisable(state) 110 110 … … 115 115 116 116 def _SetState(self, state, enabled): 117 if enable : GL.glEnableClientState(state)117 if enabled: GL.glEnableClientState(state) 118 118 else: GL.glDisableClientState(state) 119 119 trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py
r338 r345 67 67 def __ne__(self, other): 68 68 return self.v != other.v 69 def __cmp__(self, other): 70 return cmp(self.v, other.v) 69 71 70 72 def __hash__(self): … … 125 127 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 126 128 127 class Mesh(FlyweightGroupObject): 128 """ 129 >>> mesh = Mesh(); mesh 130 <Mesh |edges|=0 |faces|=0> 131 >>> i0, i1 = 0, 1 132 >>> for i2 in xrange(2, 8): 133 ... f = mesh.AddFace(i0, i1, i2) 134 ... i0, i1 = i1, i2 135 >>> mesh 136 <Mesh |edges|=13 |faces|=6> 137 >>> face = mesh.Faces[0]; face 138 <Mesh&EdgedFace v=(0, 1, 2)> 139 >>> face.OtherVertex(0,1) 140 2 141 >>> face.GetEdge(2,1) 142 <Mesh&Edge ev=(1, 2)> 143 """ 144 145 def __init__(self, FaceClass=EdgedFace, EdgeClass=Edge): 129 class FaceMesh(FlyweightGroupObject): 130 def __init__(self, FaceClass=Face): 146 131 FaceClassName = '%s&%s'%(self.__class__.__name__, FaceClass.__name__) 147 132 self._FaceClass = FaceClass.ClassFlyweightGroup(FaceClassName , mesh=weakref.proxy(self)) 148 133 self.Faces = [] 149 134 150 EdgeClassName = '%s&%s'%(self.__class__.__name__, EdgeClass.__name__) 151 self._EdgeClass = EdgeClass.ClassFlyweightGroup(EdgeClassName , mesh=weakref.proxy(self)) 152 self.Edges = {} 153 154 def __repr__(self): 155 return "<%s |edges|=%s |faces|=%s>" % (self.__class__.__name__, len(self.Edges), len(self.Faces)) 156 157 def HasEdge(self, ev0, ev1): 158 if ev0 > ev1: ev1,ev0=ev0,ev1 159 return (ev0,ev1) in self.Edges 160 def GetEdge(self, ev0, ev1): 161 if ev0 > ev1: ev1,ev0=ev0,ev1 162 return self.Edges[ev0,ev1] 163 164 def AddEdge(self, ev0, ev1, face): 165 if ev0 > ev1: ev1,ev0=ev0,ev1 166 try: 167 edge = self.Edges[ev0,ev1] 168 except KeyError: 169 edge = self._EdgeClass(ev0,ev1) 170 self.Edges[ev0,ev1] = edge 171 172 edge.Faces.append(face) 173 #if len(edge.Faces) > 2: 174 # print "ABNORMAL Edge:", edge, edge.Faces 175 return edge 135 def __repr__(self): 136 return "<%s |faces|=%s>" % (self.__class__.__name__, len(self.Faces)) 176 137 177 138 def AddFace(self, v0,v1,v2): … … 185 146 186 147 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 148 149 150 class FaceEdgeMesh(FlyweightGroupObject): 151 """ 152 >>> mesh = FaceEdgeMesh(); mesh 153 <FaceEdgeMesh |edges|=0 |faces|=0> 154 >>> i0, i1 = 0, 1 155 >>> for i2 in xrange(2, 8): 156 ... f = mesh.AddFace(i0, i1, i2) 157 ... i0, i1 = i1, i2 158 >>> mesh 159 <FaceEdgeMesh |edges|=13 |faces|=6> 160 >>> face = mesh.Faces[0]; face 161 <Mesh&EdgedFace v=(0, 1, 2)> 162 >>> face.OtherVertex(0,1) 163 2 164 >>> face.GetEdge(2,1) 165 <Mesh&Edge ev=(1, 2)> 166 """ 167 168 def __init__(self, FaceClass=EdgedFace, EdgeClass=Edge): 169 FaceClassName = '%s&%s'%(self.__class__.__name__, FaceClass.__name__) 170 self._FaceClass = FaceClass.ClassFlyweightGroup(FaceClassName , mesh=weakref.proxy(self)) 171 self.Faces = [] 172 173 EdgeClassName = '%s&%s'%(self.__class__.__name__, EdgeClass.__name__) 174 self._EdgeClass = EdgeClass.ClassFlyweightGroup(EdgeClassName , mesh=weakref.proxy(self)) 175 self.Edges = {} 176 177 def __repr__(self): 178 return "<%s |edges|=%s |faces|=%s>" % (self.__class__.__name__, len(self.Edges), len(self.Faces)) 179 180 def HasEdge(self, ev0, ev1): 181 if ev0 > ev1: ev1,ev0=ev0,ev1 182 return (ev0,ev1) in self.Edges 183 def GetEdge(self, ev0, ev1): 184 if ev0 > ev1: ev1,ev0=ev0,ev1 185 return self.Edges[ev0,ev1] 186 187 def AddEdge(self, ev0, ev1, face): 188 if ev0 > ev1: ev1,ev0=ev0,ev1 189 try: 190 edge = self.Edges[ev0,ev1] 191 except KeyError: 192 edge = self._EdgeClass(ev0,ev1) 193 self.Edges[ev0,ev1] = edge 194 195 edge.Faces.append(face) 196 #if len(edge.Faces) > 2: 197 # print "ABNORMAL Edge:", edge, edge.Faces 198 return edge 199 200 def AddFace(self, v0,v1,v2): 201 if v0 == v1 or v1 == v2 or v2 == v0: 202 #print "DEGENERATE face", (v0,v1,v2) 203 return None 204 else: 205 face = self._FaceClass(v0,v1,v2) 206 self.Faces.append(face) 207 return face 208 209 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 187 210 #~ Testing 188 211 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py
r338 r345 282 282 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 283 283 284 def __init__(self, Samples, MinStripLength): 285 self.Samples = Samples 286 self.MinStripLength = MinStripLength 287 284 288 def Score(self, experiment): 285 289 stripsize = 0 … … 315 319 <Mesh |edges|=33 |faces|=18> 316 320 >>> stripifier = TriangleStripifier() 317 >>> stripifier.Stripify(mesh) 318 1 321 >>> r = stripifier.Stripify(mesh) 319 322 >>> stripifier.TriangleList, stripifier.TriangleFans, stripifier.TriangleStrips 320 323 ([], [], [[2, 1, 2, 5, 6, 9, 10, 13, 14], [1, 0, 1, 4, 5, 8, 9, 12, 13], [3, 2, 3, 6, 7, 10, 11, 14, 15]]) 321 324 >>> stripifier.Selector.MinStripLength = 100 322 >>> stripifier.Stripify(mesh) 323 1 325 >>> r = stripifier.Stripify(mesh) 324 326 >>> stripifier.TriangleList, stripifier.TriangleFans, stripifier.TriangleStrips 325 327 ([1, 5, 2, 5, 2, 6, 5, 9, 6, 9, 6, 10, 9, 13, 10, 13, 10, 14, 0, 4, 1, 4, 1, 5, 4, 8, 5, 8, 5, 9, 8, 12, 9, 12, 9, 13, 2, 6, 3, 6, 3, 7, 6, 10, 7, 10, 7, 11, 10, 14, 11, 14, 11, 15], [], []) … … 331 333 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 332 334 333 Selector = ExperimentSelector( )335 Selector = ExperimentSelector(3, 3) 334 336 335 337 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 340 342 self.TriangleList = [] 341 343 self.TriangleStrips = [] 342 self.TriangleFans = []344 #self.TriangleFans = [] 343 345 344 346 # TODO: Could find triangle fans here … … 351 353 self.TriangleStrips.append(strip.TriangleStripIndices()) 352 354 353 return len(Strips) > 0 355 result = {'list': self.TriangleList, 'strip':self.TriangleStrips}#, 'fan':self.TriangleFans } 356 return result 354 357 355 358 __call__ = Stripify … … 382 385 startidx = self._FindStartFaceIndex(FaceList) 383 386 while 1: 384 for idx in _xwrap(startidx, lenFaceList ):387 for idx in _xwrap(startidx, lenFaceList): 385 388 face = FaceList[idx] 386 389 # If this face isn't used by another strip … … 500 503 class PrintOnProgress(object): 501 504 percent = 0. 502 def __init__(self, stepcount=20):505 def __init__(self, printline=1, stepcount=20): 503 506 import sys 504 507 self.out = sys.stdout 508 self.printline = printline 505 509 self.out.write("<") 506 510 self.step = 1./stepcount 507 511 def __del__(self): 508 512 import os 509 self.out.write(">"+os.linesep) 513 self.out.write(">") 514 if self.printline: 515 self.out.write(os.linesep) 510 516 def __call__(self, percent): 511 517 while percent - self.percent >= self.step: trunk/RBRapier/demo/Cube/cubescene.py
r343 r345 64 64 self.Sequence.AddElement(self.Cube.Draw) 65 65 66 for each in self.Sequence.Elements: 67 print each 66 #for each in self.Sequence.Elements: print each 68 67 69 68 def Render(self, subject, canvas):
