Changeset 345

Show
Ignore:
Timestamp:
10/31/02 17:59:45 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py

    r343 r345  
    117117#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    118118 
    119 class AttributeTrackerBaseElement(AttributeTrackerBase): 
     119class AttributeTrackerBaseElement(AttributeTrackerBase, DynamicAttributeChangeElement): 
    120120    def SequenceAdd(self, Sequence): 
    121121        AttributeTrackerBase.SequenceAdd(self, Sequence) 
    122122        setattr(Sequence, self._ElementAttributeName, self) 
    123123 
    124 class AttributeTrackerElement(AttributeTrackerBaseElement): 
     124class AttributeTracker(AttributeTrackerBaseElement): 
    125125    _ElementAttributeName = 'AttributeChange' 
    126126 
    127 class ClientAttributeTrackerElement(AttributeTrackerBaseElement): 
     127class ClientAttributeTracker(AttributeTrackerBaseElement): 
    128128    _ElementAttributeName = 'ClientAttributeChange' 
    129129 
  • trunk/RBRapier/RBRapier/Renderer/BufferMgr.py

    r343 r345  
    4747#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4848 
    49 class DynamicAttributeChangeElement(DynamicChangeElementBase): 
     49class DynamicBufferChangeElement(DynamicChangeElementBase): 
    5050    """Encapsulates a single collection of attribute changes""" 
    5151 
     
    102102            raise ValueError, "ChangeType is expected to be one of ['add', 'update', 'remove'], but is '%s'" % ChangeType 
    103103 
    104     def UpdateAttributes(self): 
     104    def UpdateBuffers(self): 
    105105        if self._NeedUpdate: 
    106106            self.Bitmask = 0 
     
    115115#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    116116 
    117 class BufferTracker(BufferTrackerBase): 
     117class BufferTracker(BufferTrackerBase, DynamicBufferChangeElement): 
    118118    def SequenceAdd(self, Sequence): 
    119         AttributeTrackerBase.SequenceAdd(self, Sequence) 
     119        BufferTrackerBase.SequenceAdd(self, Sequence) 
    120120        setattr(Sequence, self._ElementAttributeName, self) 
    121121 
  • trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py

    r343 r345  
    3535 
    3636class DynamicChangeElementBase(ChangeElementBase): 
    37     Tracker = LazyProperty('Tracker', SubjectList) 
     37    Trackers = LazyProperty('Tracker', SubjectList) 
    3838 
    3939#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Renderer/Environment/FragmentTests.py

    r341 r345  
    8181    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8282 
    83     AttributeChange = AttributeChangeElement(GL.GL_STENCIL_BIT) 
     83    AttributeChange = AttributeChangeElement(GL.GL_STENCIL_BUFFER_BIT) 
    8484    Function = GL.GL_ALWAYS 
    8585    Operation = GL.GL_KEEP 
  • trunk/RBRapier/RBRapier/Renderer/Geometry/ArrayTraversal.py

    r340 r345  
    2828 
    2929#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     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#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3045#~ Definitions  
    3146#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    3954 
    4055    def __init__(self, primitive, rangecollection): 
    41         self.primitive = primitive 
     56        self.primitive = _PrimitveMap.get(primitive, primitive) 
    4257        self.rangecollection = rangecollection 
    4358 
     
    6782 
    6883    def __init__(self, primitive, datacollection, format=None): 
    69         self.primitive = primitive 
     84        self.primitive = _PrimitveMap.get(primitive, primitive) 
    7085        if format is None: format = self._DefaultFormat 
    7186        self.datacollection = [Numeric.asarray(data, format) for data in datacollection] 
     
    7489    def Execute(self, context): 
    7590        for data in self.datacollection: 
    76             self._glDrawElements(self.primitive, self.data) 
     91            self._glDrawElements(self.primitive, data) 
    7792 
  • trunk/RBRapier/RBRapier/Renderer/SequenceMgr.py

    r343 r345  
    4040#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4141 
    42 class Sequence(object): 
     42class SequenceBase(object): 
    4343    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4444    #~ Public Methods  
     
    8282#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8383 
     84class 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 
    84100class RootSequence(Sequence): 
    85101    def __init__(self): 
    86         Sequence.__init__(self
     102        Sequence.__init__(self, 1, 1
    87103        self.StateMgr = StateMgr.StateManager() 
    88104        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) 
    93105 
    94106    def Execute(self, context=None): 
  • trunk/RBRapier/RBRapier/Renderer/StateMgr.py

    r343 r345  
    4343 
    4444    def _UpdateState(self, state, enabled): 
    45         self._statevector[state] = enable 
     45        self._statevector[state] = enabled 
    4646 
    4747    def GetState(self, state): 
     
    6666        return self.GetState(state) != 1 
    6767    def Enable(self, state):  
    68         self.SetState(1) 
     68        self.SetState(state, 1) 
    6969 
    7070    def IsDisabled(self, state):  
     
    7373        return self.GetState(state) != 0 
    7474    def Disable(self, state):  
    75         self.SetState(0) 
     75        self.SetState(state, 0) 
    7676 
    7777    def IsKnown(self, state):  
     
    8282#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8383 
    84 class StateManagerStatsMixin(Aspect.Aspect): 
     84class StateManagerStatsAspect(Aspect.Aspect): 
    8585    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8686    #~ Constants / Variables / Etc.  
     
    9898        else: sc[state] = sc.get(state, 0) + 1 
    9999 
    100         self._statevector[state] = enable 
     100        self._statevector[state] = enabled 
    101101 
    102102#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    103103 
    104104class StateManager(StateManagerBase): 
    105     #AttributeChange = AttributeChangeElement(GL.GL_ENABLE_BIT) 
     105    AttributeChange = AttributeChangeElement(GL.GL_ENABLE_BIT) 
    106106 
    107107    def _SetState(self, state, enabled): 
    108         if enable: GL.glEnable(state) 
     108        if enabled: GL.glEnable(state) 
    109109        else: GL.glDisable(state) 
    110110 
     
    115115 
    116116    def _SetState(self, state, enabled): 
    117         if enable: GL.glEnableClientState(state) 
     117        if enabled: GL.glEnableClientState(state) 
    118118        else: GL.glDisableClientState(state) 
    119119 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py

    r338 r345  
    6767    def __ne__(self, other): 
    6868        return self.v != other.v 
     69    def __cmp__(self, other): 
     70        return cmp(self.v, other.v) 
    6971 
    7072    def __hash__(self): 
     
    125127#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    126128 
    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): 
     129class FaceMesh(FlyweightGroupObject): 
     130    def __init__(self, FaceClass=Face): 
    146131        FaceClassName = '%s&%s'%(self.__class__.__name__, FaceClass.__name__) 
    147132        self._FaceClass = FaceClass.ClassFlyweightGroup(FaceClassName , mesh=weakref.proxy(self)) 
    148133        self.Faces = [] 
    149134 
    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)) 
    176137 
    177138    def AddFace(self, v0,v1,v2): 
     
    185146 
    186147#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     148 
     149 
     150class 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#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    187210#~ Testing  
    188211#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py

    r338 r345  
    282282    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    283283 
     284    def __init__(self, Samples, MinStripLength): 
     285        self.Samples = Samples 
     286        self.MinStripLength = MinStripLength 
     287 
    284288    def Score(self, experiment): 
    285289        stripsize = 0 
     
    315319    <Mesh |edges|=33 |faces|=18> 
    316320    >>> stripifier = TriangleStripifier() 
    317     >>> stripifier.Stripify(mesh) 
    318     1 
     321    >>> r = stripifier.Stripify(mesh) 
    319322    >>> stripifier.TriangleList, stripifier.TriangleFans, stripifier.TriangleStrips 
    320323    ([], [], [[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]]) 
    321324    >>> stripifier.Selector.MinStripLength = 100 
    322     >>> stripifier.Stripify(mesh) 
    323     1 
     325    >>> r = stripifier.Stripify(mesh) 
    324326    >>> stripifier.TriangleList, stripifier.TriangleFans, stripifier.TriangleStrips 
    325327    ([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], [], []) 
     
    331333    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    332334 
    333     Selector = ExperimentSelector(
     335    Selector = ExperimentSelector(3, 3
    334336 
    335337    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    340342        self.TriangleList = [] 
    341343        self.TriangleStrips = [] 
    342         self.TriangleFans = [] 
     344        #self.TriangleFans = [] 
    343345 
    344346        # TODO: Could find triangle fans here 
     
    351353                self.TriangleStrips.append(strip.TriangleStripIndices()) 
    352354 
    353         return len(Strips) > 0 
     355        result = {'list': self.TriangleList, 'strip':self.TriangleStrips}#, 'fan':self.TriangleFans } 
     356        return result 
    354357         
    355358    __call__ = Stripify 
     
    382385        startidx = self._FindStartFaceIndex(FaceList) 
    383386        while 1: 
    384             for idx in _xwrap(startidx, lenFaceList ): 
     387            for idx in _xwrap(startidx, lenFaceList): 
    385388                face = FaceList[idx] 
    386389                # If this face isn't used by another strip 
     
    500503class PrintOnProgress(object): 
    501504    percent = 0. 
    502     def __init__(self, stepcount=20): 
     505    def __init__(self, printline=1, stepcount=20): 
    503506        import sys 
    504507        self.out = sys.stdout 
     508        self.printline = printline 
    505509        self.out.write("<") 
    506510        self.step = 1./stepcount 
    507511    def __del__(self): 
    508512        import os 
    509         self.out.write(">"+os.linesep) 
     513        self.out.write(">") 
     514        if self.printline: 
     515            self.out.write(os.linesep) 
    510516    def __call__(self, percent): 
    511517        while percent - self.percent >= self.step: 
  • trunk/RBRapier/demo/Cube/cubescene.py

    r343 r345  
    6464        self.Sequence.AddElement(self.Cube.Draw) 
    6565 
    66         for each in self.Sequence.Elements: 
    67             print each 
     66        #for each in self.Sequence.Elements: print each 
    6867 
    6968    def Render(self, subject, canvas):