Changeset 366

Show
Ignore:
Timestamp:
11/11/02 17:48:30 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBRapier/RBRapier/Formats/Lightwave/Loader.py

    r363 r366  
    109109        self.Faces = [] 
    110110 
    111     def ReadFormat(self, SurfaceDefChunk): 
     111    def ReadFormat(self, SurfaceDefChunk, TaskProgress=None): 
    112112        FormatMap = { 
    113113            'COLR': ('BaseColor', '>BBBB'), 
     
    157157 
    158158class _LWOFace(object): 
    159     def ReadFormat(self, FacesChunk): 
     159    def ReadFormat(self, FacesChunk, TaskProgress=None): 
    160160        NumIndices = struct.unpack(">H", FacesChunk.read(2))[0] 
    161161        self.IndexList = [struct.unpack(">H", FacesChunk.read(2))[0] for each in xrange(NumIndices)] 
     
    186186    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    187187 
    188     def ReadFormat(self, LightwaveLWOFile): 
     188    def ReadFormat(self, LightwaveLWOFile, TaskProgress=None): 
    189189        self.Name = None 
    190190        self.Vertices = [] 
  • trunk/RBRapier/RBRapier/Formats/Lightwave/MeshedObject.py

    r364 r366  
    3434from RBRapier.Tools.Geometry.Analysis import LocalityRemapper 
    3535from RBRapier.Tools.Geometry.Synthesis import VertexNormals 
     36 
    3637from RBRapier.Tools.Geometry.ConvexPolygonTesselation import TesselateConvexPolygon 
     38#from RBRapier.Tools.Geometry.PolygonTesselation import PolygonTesselation 
    3739 
    3840from RBRapier.Renderer.Geometry import VertexArrays 
     
    5254#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5355 
    54 def copyattr(From, FromName, To, ToName='', call=lambda x:x): 
    55     ToName = ToName or FromName 
    56     try: value = getattr(From, FromName) 
    57     except AttributeError: return 0 
    58     setattr(To, ToName, call(value)) 
    59     return 1 
     56from Foundation import TaskProgress 
     57class PrintOnTaskProgress(TaskProgress.TaskProgress): 
     58    Indent = 0 
     59    def __init__(self, *args, **kw): 
     60        TaskProgress.TaskProgress.__init__(self, *args, **kw) 
     61        self.OnProgress.Add(self._OnProgress) 
     62        self.OnAddSubtask.Add(self._OnAddSubtask) 
     63        self._OnProgress(self, self.Progress) 
     64    def _OnProgress(self, task, progress): 
     65        print '%s[%4.0f] %-20s (%s)' % ('  ' * task.Indent, 100*task.Percent, task.Name, id(task)) 
     66    def _OnAddSubtask(self, parent, child): 
     67        child.Indent = parent.Indent + 1 
     68        print 
     69        #if parent is self: 
     70        #    child.OnAddSubtask.Add(self._OnAddSubtask) 
     71        child.OnProgress.Add(self._OnProgress) 
     72        self._OnProgress(child, child.Progress) 
     73 
     74#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6075 
    6176class MeshedObjectBuilder(object): 
     
    6681    GeoObjectFactory = GeoObject.GeoObject 
    6782    IndexedTraversal = ArrayTraversal.IndexedCollectionTraversal 
     83    TaskProgress = PrintOnTaskProgress('Lightwave Meshed Object', 0., 1., 20) 
    6884 
    6985    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    136152                        scale = getattr(Group, 'iSpecular') / 256. 
    137153                    Group.Material.Specular = BaseColor * scale 
    138                     copyattr(Group, 'Shininess', Group.Material) 
     154 
     155                    shininess = getattr(Group, 'Shininess', None) 
     156                    if shininess is not None: 
     157                        Group.Material.Shininess = shininess 
    139158                except AttributeError: pass 
    140159 
     
    150169    def Load(self, FileInFormat): 
    151170        obj = Loader.LightwaveLWOLoader() 
    152         obj.ReadFormat(FileInFormat
     171        obj.ReadFormat(FileInFormat, TaskProgress=self.TaskProgress
    153172 
    154173        self.Name = FileInFormat.name 
     
    156175        self.SurfaceGroups = obj.Surfaces.values() 
    157176 
     177        if self.TaskProgress: 
     178            for each in self.SurfaceGroups: 
     179                each.SurfaceTask = self.TaskProgress.NewSubtask('Surface %s'%each.Name, 0., 1.) 
     180        else: 
     181            for each in self.SurfaceGroups: 
     182                each.SurfaceTask = None 
     183 
    158184    def SimpleMesh(self): 
    159185        TriLister = TriangleLister.TriangleLister() 
    160         self.TraverseMesh(TriangleMesh.FaceMesh, TriLister
     186        self.TraverseMesh(TriangleMesh.FaceMesh, TriLister, 'SimpleList'
    161187 
    162188    def OptimizeMesh(self, level): 
    163189        TriStripifier = TriangleStripifier.TriangleStripifier() 
    164190        TriStripifier.Selector = TriangleStripifier.ExperimentSelector(level, 3) 
    165         self.TraverseMesh(TriangleMesh.FaceEdgeMesh, TriStripifier) 
    166  
    167     def TraverseMesh(self, MeshFactory, TraversalMaker): 
     191        self.TraverseMesh(TriangleMesh.FaceEdgeMesh, TriStripifier, 'TriStrip') 
     192 
     193    def TraverseMesh(self, MeshFactory, TraversalMaker, TraverseMethodName): 
     194        #PolyTesselator = PolygonTesselation() 
    168195        VNSythesisMgr = VertexNormals.VertexNormalSynthesisMgr(self.Vertices) 
    169196        for Group in self.SurfaceGroups: 
    170197            VNSythesisMgr.SetTolerance(getattr(Group, 'SmoothingAngle', None)) 
    171198 
    172             if not Group.Faces: 
    173                 Group.Traversals = {} 
    174             else: 
    175                 mesh = MeshFactory() 
    176                 for FaceTraversal in Group.Faces: 
     199            if Group.SurfaceTask: 
     200                Subtask = Group.SurfaceTask.NewSubtask('Meshing and tesselation', 0, len(Group.Faces)) 
     201            else: Subtask = 0 
     202 
     203            mesh = MeshFactory() 
     204            for FaceTraversal in Group.Faces: 
     205                count = len(FaceTraversal.IndexList) 
     206                if count > 3: 
     207                    # Yuck.  Polygons.  We should tesselate them, but that's not too easy 
    177208                    FaceTraversal = TesselateConvexPolygon(FaceTraversal.IndexList) 
     209                    #FaceTraversal = PolyTesselator.TesselatePolygon(FaceTraversal.IndexList, self.Vertices) 
    178210                    for each in FaceTraversal: 
    179211                        each = VNSythesisMgr.VisitTriangle(*each) 
    180                         face = mesh.AddFace(*each) 
    181  
    182                 if __debug__:  
    183                     print '%-20s[%6d]: ' % (Group.Name, len(mesh.Faces)*3), 
    184                     Group.Traversals = TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0)) 
    185                     print " [", 
    186                     for name, each in Group.Traversals.iteritems(): 
    187                         try:  
    188                             count = 0 
    189                             maxcount = 0 
    190                             for e in each: 
    191                                 count += len(e) 
    192                                 maxcount = max(maxcount, len(e))  
    193                             print '%s=%d (%d, %1.1f, %d),' % (name, len(each), count, count/float(len(each) or 1.), maxcount), 
    194                         except TypeError: 
    195                             print '%s=%d (%d),' % (name, 1, len(each)), 
    196                     print "]" 
    197                 else: 
    198                     Group.Traversals = TraversalMaker(mesh) 
     212                        if each: face = mesh.AddFace(*each) 
     213                elif count == 3:  
     214                    # Triangles are easy =) wish they were all triangles... 
     215                    each = VNSythesisMgr.VisitTriangle(*FaceTraversal.IndexList) 
     216                    if each: face = mesh.AddFace(*each) 
     217                # Update our progress 
     218                Subtask += 1 
     219 
     220            if not mesh.Faces:  
     221                Group.Traversals = {} 
     222            else:  
     223                if Group.SurfaceTask: 
     224                    Subtask = Group.SurfaceTask#.NewSubtask('Mesh traversal (%s)' % TraverseMethodName, 0, 1.) 
     225                else: Subtask = None 
     226                Group.Traversals = dict(TraversalMaker(mesh, TaskProgress=Subtask)) 
    199227 
    200228        Vertices, Normals = VNSythesisMgr.GetResultantArrays() 
     
    204232    def SimpleTraversals(self): 
    205233        for Group in self.SurfaceGroups: 
     234            if Group.SurfaceTask: 
     235                Subtask = Group.SurfaceTask.NewSubtask('Simple index traversal', 0, 3) 
     236            else: Subtask = 0 
     237 
    206238            listdata = Group.Traversals.get('list') 
    207239            if listdata: 
    208240                Group.Traversals['list'] = self.IndexedTraversal('trilist', [listdata]) 
     241            elif listdata is not None: 
     242                del Group.Traversals['list'] 
     243            Subtask += 1 
    209244 
    210245            fandatacollection = Group.Traversals.get('fan') 
    211246            if fandatacollection: 
    212247                Group.Traversals['fan'] = self.IndexedTraversal('tristrip', fandatacollection) 
     248            elif fandatacollection is not None: 
     249                del Group.Traversals['fan'] 
     250            Subtask += 1 
    213251 
    214252            stripdatacollection = Group.Traversals.get('strip') 
    215253            if stripdatacollection: 
    216254                Group.Traversals['strip'] = self.IndexedTraversal('tristrip', stripdatacollection) 
     255            elif stripdatacollection is not None: 
     256                del Group.Traversals['strip'] 
     257            Subtask += 1 
    217258 
    218259    def OptimizeTraversals(self, level): 
     
    220261 
    221262        for Group in self.SurfaceGroups: 
     263            if Group.SurfaceTask: 
     264                Subtask = Group.SurfaceTask.NewSubtask('Locality optimizing index traversal', 0, 3) 
     265            else: Subtask = 0 
     266 
    222267            listdata = Group.Traversals.get('list') 
    223268            if listdata: 
     
    226271            elif listdata is not None: 
    227272                del Group.Traversals['list'] 
     273            Subtask += 1 
    228274 
    229275            fandatacollection = Group.Traversals.get('fan') 
     
    234280            elif fandatacollection is not None: 
    235281                del Group.Traversals['fan'] 
     282            Subtask += 1 
    236283 
    237284            stripdatacollection = Group.Traversals.get('strip') 
     
    242289            elif stripdatacollection is not None: 
    243290                del Group.Traversals['strip'] 
    244  
     291            Subtask += 1 
     292 
     293        if self.TaskProgress: 
     294            OptimizingSubtask = self.TaskProgress.NewSubtask('Index locality optimization', 0, 2*len(self.Vertices.data)) 
     295        else: OptimizingSubtask = 0 
    245296        optimizer.RemapIndices(self.Vertices.data) 
     297        OptimizingSubtask += len(self.Vertices.data) 
     298        optimizer.RemapIndices(self.Normals.data) 
     299        OptimizingSubtask += len(self.Normals.data) 
    246300 
    247301#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Formats/Wavefront/MeshedObject.py

    r362 r366  
    170170                if __debug__:  
    171171                    print '%-20s[%6d]: ' % (Group.Names[0], len(mesh.Faces)*3), 
    172                     Group.Traversals = TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0)) 
     172                    Group.Traversals = dict(TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0))) 
    173173                    print " [", 
    174174                    for name, each in Group.Traversals.iteritems(): 
     
    184184                    print "]" 
    185185                else: 
    186                     Group.Traversals = TraversalMaker(mesh
     186                    Group.Traversals = dict(TraversalMaker(mesh)
    187187 
    188188    def SimpleTraversals(self): 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleLister.py

    r345 r366  
    2525 
    2626class TriangleLister(object): 
    27     def __call__(self, mesh, OnProgress): 
     27    def __call__(self, mesh, TaskProgress): 
    2828        result = [] 
    29         if OnProgress: 
    30             lenFaces = len(mesh.Faces) * 1.1 
    31             threshold = lenFaces / 110 
    32             totalcount = lenFaces / 11. 
    33             count = 0 
     29        if TaskProgress: 
     30            TaskProgress.SetProgressRange(0, len(mesh.Faces)/.9) 
    3431            mesh.Faces.sort() 
    35             OnProgress(totalcount/lenFaces) 
     32            TaskProgress.Percentage = 0.1 
    3633            for face in mesh.Faces: 
    3734                result.extend(face.v) 
    38                 count += 1 
    39                 if count > threshold: 
    40                     totalcount += count 
    41                     count = 0 
    42                     OnProgress(totalcount/lenFaces) 
     35                TaskProgress += 1 
    4336        else: 
    4437            mesh.Faces.sort() 
    4538            for face in mesh.Faces: 
    4639                result.extend(face.v) 
    47         return {'list': result} 
     40        return [('list', result)] 
    4841 
     42#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     43#~ Optimization 
     44#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     45 
     46try: import psyco 
     47except ImportError: pass 
     48else: 
     49    psyco.bind(TriangleLister) 
     50 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py

    r364 r366  
    151151 
    152152#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    153  
    154153 
    155154class FaceEdgeMesh(FlyweightGroupObject): 
     
    225224 
    226225#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     226#~ Optimization 
     227#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     228 
     229try: import psyco 
     230except ImportError: pass 
     231else: 
     232    psyco.bind(Edge) 
     233    psyco.bind(Face) 
     234    psyco.bind(EdgedFace) 
     235    psyco.bind(FaceMesh) 
     236    psyco.bind(FaceEdgeMesh) 
     237 
     238#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    227239#~ Testing  
    228240#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py

    r362 r366  
    3232#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3333 
    34 def _GetNextIndex(indicies, face): 
    35     return face.OtherVertex(*indicies[-2:]) 
    36  
    3734def _FindOtherFace(ev0, ev1, face): 
    3835    try: 
     
    165162            while NextFace and not self.IsFaceMarked(NextFace): 
    166163                if not BreakTest(NextFace): break 
    167                 nv0, nv1 = nv1, _GetNextIndex(Indices, NextFace
     164                nv0, nv1 = nv1, NextFace.OtherVertex(*Indices[-2:]
    168165                FaceList.append(NextFace) 
    169166                self.MarkFace(FaceList[-1]) 
     
    174171 
    175172        v0,v1 = self.StartEdgeOrder 
    176         v2 = _GetNextIndex((v0,v1), self.StartFace
     173        v2 = self.StartFace.OtherVertex(v0,v1
    177174        self.MarkFace(self.StartFace) 
    178175        ForwardFaces.append(self.StartFace) 
     
    188185        return self.Faces 
    189186 
    190     def Commit(self): 
     187    def Commit(self, TaskProgress=None): 
    191188        del self.ExperimentId 
    192         return len(map(self.MarkFace, self.Faces)) 
     189        count = len(map(self.MarkFace, self.Faces)) 
     190        if TaskProgress: 
     191            TaskProgress += count 
     192        return self 
    193193 
    194194    def TraingleListIndices(self): 
     
    323323    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    324324 
    325     def Stripify(self, mesh, OnProgress=None): 
     325    def Stripify(self, mesh, TaskProgress=None): 
    326326        self.TriangleList = [] 
    327327        self.TriangleStrips = [] 
     
    329329 
    330330        # TODO: Could find triangle fans here 
    331         Strips = self._FindAllStrips(mesh, OnProgress) 
    332  
     331        Strips = self._FindAllStrips(mesh, TaskProgress) 
    333332        for strip in Strips: 
    334333            if len(strip.Faces) < self.Selector.MinStripLength: 
     
    337336                self.TriangleStrips.append(strip.TriangleStripIndices()) 
    338337 
    339         result = {'list': self.TriangleList, 'strip':self.TriangleStrips}#, 'fan':self.TriangleFans } 
     338        result = [('list', self.TriangleList), ('strip', self.TriangleStrips)]#, ('fan',self.TriangleFans) ] 
    340339        return result 
    341340         
    342341    __call__ = Stripify 
    343342 
    344     def StripifyIter(self, mesh, OnProgress=None): 
     343    def StripifyIter(self, mesh, TaskProgress=None): 
    345344        # TODO: Could find triangle fans here 
    346         Strips = self._FindAllStrips(mesh, OnProgress) 
    347  
     345        Strips = self._FindAllStrips(mesh, TaskProgress) 
    348346        for strip in Strips: 
    349347            if len(strip.Faces) < self.Selector.MinStripLength: 
     
    426424    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    427425 
    428     def _FindAllStrips(self, mesh, OnProgress): 
     426    def _FindAllStrips(self, mesh, TaskProgress): 
    429427        selector = self.Selector 
    430         TotalFaces = len(mesh.Faces
     428        bCleanFaces = getattr(mesh, 'CleanFaces', 0
    431429        GoodResetPoints = self._FindGoodResetPoint(mesh) 
    432430        experimentId = _Counter() 
    433431        stripId = _Counter() 
    434         FacesComplete = 0. 
    435         #result = [] 
     432 
     433        StripifyTask = 0 
     434        CleanFacesTask = 0 
     435        if TaskProgress: 
     436            StripifyTask = TaskProgress.NewSubtask("Stripify triangles", 0, len(mesh.Faces)) 
     437            if bCleanFaces:  
     438                CleanFacesTask = TaskProgress.NewSubtask("Clean faces", 0, len(mesh.Faces)) 
    436439 
    437440        try: 
     
    476479                # Get the best experiment according to the selector 
    477480                BestExperiment = selector.Result() 
    478  
    479481                # And commit it to the resultset 
    480482                for each in BestExperiment: 
    481                     FacesComplete += each.Commit() 
    482                     yield each 
    483                 #result.extend(BestExperiment) 
    484  
    485                 # and update anyone watching 
    486                 if OnProgress: OnProgress(FacesComplete / TotalFaces) 
     483                    yield each.Commit(StripifyTask) 
     484                del BestExperiment 
    487485        except StopIteration: 
    488486            pass 
    489487 
    490         if getattr(mesh, 'CleanFaces', 0)
     488        if bCleanFaces
    491489            for face in mesh.Faces: 
    492490                try: del face.StripId 
    493491                except AttributeError: pass 
    494  
    495         #return result 
     492                CleanFacesTask += 1 
    496493 
    497494#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    516513 
    517514#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     515#~ Optimization 
     516#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     517 
     518try: import psyco 
     519except ImportError: pass 
     520else: 
     521    psyco.bind(TriangleStrip) 
     522    psyco.bind(ExperimentSelector) 
     523    psyco.bind(TriangleStripifier) 
     524    psyco.bind(_FindOtherFace) 
     525 
     526#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    518527#~ Testing  
    519528#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Tools/Geometry/ConvexPolygonTesselation.py

    r362 r366  
    5050    return result 
    5151 
     52#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     53#~ Title  
     54#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     55 
     56try: import psyco 
     57except ImportError: pass 
     58else: 
     59    psyco.bind(TesselateConvexPolygon) 
    5260 
    5361#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBRapier/RBRapier/Tools/Geometry/Synthesis/VertexNormals.py

    r364 r366  
    5454 
    5555    def SetResults(self, VertexData, NormalData): 
     56        srcVertex = self.owner.VertexData[self.idx] 
    5657        for idx, normal in self.Normals.iteritems(): 
    57             try: normal.iNormalize() 
    58             except ValueError: 
    59                 normal 
    60             VertexData[idx] = self.owner.VertexData[self.idx] 
    61             NormalData[idx] = normal.asarray() 
     58            VertexData[idx] = srcVertex 
     59            NormalData[idx] = normal.Normalize().asarray() 
    6260 
    6361#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    8078         
    8179    def GetResultantArrays(self): 
    82         print len(self.VertexData), self.NextVertexIdx 
    83         self.NormalData = [None for i in xrange(self.NextVertexIdx)] 
     80        #print len(self.VertexData), self.NextVertexIdx 
     81        defval = (0.,0.,0.) 
     82        self.NormalData = [defval for i in xrange(self.NextVertexIdx)] 
    8483        self.VertexData.extend(self.NormalData[len(self.VertexData):]) 
    8584        for vertex in self.Vertices: 
     
    8887 
    8988    def VisitTriangle(self, vi0, vi1, vi2): 
     89        if vi0==vi1 or vi1==vi2 or vi2==vi0: 
     90            print "Degenerate triangle found" 
     91            return None 
    9092        normal = self._CalculateNormal(vi0, vi1, vi2) 
    9193        vi0 = self.Vertices[vi0].IntegrateNormal(normal) 
     
    107109        e01 = (Vector3(self.VertexData[vi1]) - vector0).Normalize() 
    108110        e02 = (Vector3(self.VertexData[vi2]) - vector0).Normalize() 
    109         #normal = e01.Cross3(e02).Normalize() 
    110         normal = e01.Cross3(e02) 
     111        normal = e01.Cross3(e02)#.Normalize() 
    111112        return normal 
    112113 
     114#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     115#~ Optimization 
     116#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     117 
     118try: import psyco 
     119except ImportError: pass 
     120else: 
     121    psyco.bind(Vertex) 
     122    psyco.bind(VertexNormalSynthesisMgr) 
     123 
  • trunk/RBRapier/RBRapier/Tools/Vector.py

    r362 r366  
    4242    a2, b2, c2 = v2 
    4343    return (b1*c2-c1*b2, c1*a2-a1*c2, a1*b2-b1*a2) 
     44 
     45def CrossMag3(v1, v2): 
     46    a1, b1, c1 = v1 
     47    a2, b2, c2 = v2 
     48    return Numeric.sqrt((b1*c2-c1*b2)**2 + (c1*a2-a1*c2)**2 + (a1*b2-b1*a2)**2) 
    4449 
    4550def DotCross3(v1, v2): 
  • trunk/RBRapier/demo/Lightwave/scene.py

    r364 r366  
    5151        self.Sequence = SequenceMgr.RootSequence() 
    5252 
    53         self.ClearColor = Buffers.ClearColor()#(0.5,0.5,1.0,1.0)) 
    54         self.Sequence.AddElement(self.ClearColor, -2) 
     53        self.ClearColor = Buffers.ClearColor((0.,0.,0.,0.)) 
     54        self.Sequence.AddElement(self.ClearColor.Execute, -2) 
    5555        self.ClearDepth = Buffers.ClearDepth(1.) 
    56         self.Sequence.AddElement(self.ClearDepth, -2) 
     56        self.Sequence.AddElement(self.ClearDepth.Execute, -2) 
    5757        self.DepthTest = FragmentTests.DepthTest() 
    5858        self.Sequence.AddElement(self.DepthTest.Select, -1) 
     
    8989        return GeoObj 
    9090 
     91    frustum = (-1,1,-1,1,1,100) 
     92    xlate = (0,0,-30) 
     93    rotate = (30, 1,0,0) 
    9194    def Render(self, subject, canvas): 
    9295        self.Viewport.SetRectangle(canvas.GetClientRect().asTuple()) 
     
    107110        #GL.glOrtho(-0.5,0.5,-0.25,0.75,-1,1) 
    108111 
     112        # Large 
     113        #GL.glFrustum(*self.frustum) 
     114        #GL.glTranslatef(*self.xlate) 
     115        #GL.glRotatef(*self.rotate) 
     116 
    109117        GL.glMatrixMode(GL.GL_MODELVIEW) 
    110118        GL.glRotatef(1., 0, 1, 0)