Exemplo n.º 1
0
    def boundingVolume( self, mode ):
        """Calculate the bounding volume for this node

        The bounding volume for a grouping node is
        the union of it's children's nodes, and is
        dependent on the children of the node's
        bounding nodes, as well as the children field
        of the node.
        """
        current = boundingvolume.getCachedVolume( self )
        if current is not None:
            return current
        # need to create a new volume and make it depend
        # on the appropriate fields...
        volumes = []
        dependencies = [(self,'children')]
        unbounded = 0
        for child in self.children:
            try:
                if hasattr(child, 'boundingVolume'):
                    volume = child.boundingVolume(mode)
                    volumes.append( volume )
                    dependencies.append( (volume, None) )
                else:
                    unbounded = 1
                    break
            except boundingvolume.UnboundedObject:
                unbounded = 1
        try:
            volume = boundingvolume.BoundingBox.union( volumes, None )
        except boundingvolume.UnboundedObject:
            unbounded = 1
        if unbounded:
            volume = boundingvolume.UnboundedVolume()
        return boundingvolume.cacheVolume( self, volume, dependencies )
Exemplo n.º 2
0
    def boundingVolume(self, mode):
        """Calculate the bounding volume for this node

        The bounding volume for a grouping node is
        the union of it's children's nodes, and is
        dependent on the children of the node's
        bounding nodes, as well as the children field
        of the node.
        """
        current = boundingvolume.getCachedVolume(self)
        if current is not None:
            return current
        # need to create a new volume and make it depend
        # on the appropriate fields...
        volumes = []
        dependencies = [(self, 'choice'), (self, 'whichChoice')]
        unbounded = 0
        for child in self.renderedChildren():
            try:
                if hasattr(child, 'boundingVolume'):
                    volume = child.boundingVolume(mode)
                    volumes.append(volume)
                    dependencies.append((volume, None))
                else:
                    unbounded = 1
                    break
            except boundingvolume.UnboundedObject:
                unbounded = 1
        try:
            volume = boundingvolume.BoundingBox.union(volumes, None)
        except boundingvolume.UnboundedObject:
            unbounded = 1
        if unbounded:
            volume = boundingvolume.UnboundedVolume()
        return boundingvolume.cacheVolume(self, volume, dependencies)
Exemplo n.º 3
0
 def boundingVolume(self, mode):
     """Create a bounding-volume object for this node"""
     from OpenGLContext.scenegraph import boundingvolume
     current = boundingvolume.getCachedVolume(self)
     if current:
         return current
     return boundingvolume.cacheVolume(
         self,
         boundingvolume.AABoundingBox(size=self.size, ),
         ((self, 'size'), ),
     )
Exemplo n.º 4
0
 def boundingVolume(self, mode):
     """Create a bounding-volume object for this node"""
     from OpenGLContext.scenegraph import boundingvolume
     current = boundingvolume.getCachedVolume(self)
     if current:
         return current
     return boundingvolume.cacheVolume(
         self,
         boundingvolume.AABoundingBox(
             # This vastly overestimates the size!
             size=[self.size * 2, self.size * 2, self.size * 2], ),
         ((self, 'size'), ),
     )
Exemplo n.º 5
0
 def boundingVolume( self, mode ):
     """Create a bounding-volume object for this node"""
     from OpenGLContext.scenegraph import boundingvolume
     current = boundingvolume.getCachedVolume( self )
     if current:
         return current
     return boundingvolume.cacheVolume(
         self,
         boundingvolume.AABoundingBox(
             size = self.size,
         ),
         ( (self, 'size'), ),
     )
Exemplo n.º 6
0
 def boundingVolume( self, mode ):
     """Create a bounding-volume object for this node"""
     from OpenGLContext.scenegraph import boundingvolume
     current = boundingvolume.getCachedVolume( self )
     if current:
         return current
     return boundingvolume.cacheVolume(
         self,
         boundingvolume.AABoundingBox(
             # This vastly overestimates the size!
             size = [self.size*2,self.size*2,self.size*2],
         ),
         ( (self, 'size'), ),
     )
Exemplo n.º 7
0
    def boundingVolume(self, mode=None):
        """Create a bounding-volume object for this node

        In this case we use the AABoundingBox, despite
        the presence of the bounding sphere implementation.
        This is just a preference issue, I'm using
        AABoundingBox everywhere else, and want the sphere
        to interoperate properly.
        """
        current = boundingvolume.getCachedVolume(self)
        if current:
            return current
        radius = self.radius
        return boundingvolume.cacheVolume(
            self,
            boundingvolume.AABoundingBox(size=(radius * 2, self.height,
                                               radius * 2), ),
            ((self, 'radius'), (self, 'height')),
        )
Exemplo n.º 8
0
    def boundingVolume( self, mode=None ):
        """Create a bounding-volume object for this node

        In this case we use the AABoundingBox, despite
        the presence of the bounding sphere implementation.
        This is just a preference issue, I'm using
        AABoundingBox everywhere else, and want the sphere
        to interoperate properly.
        """
        current = boundingvolume.getCachedVolume( self )
        if current:
            return current
        return boundingvolume.cacheVolume(
            self,
            boundingvolume.AABoundingBox(
                size = (self.radius*2,self.radius*2,self.radius*2),
            ),
            ( (self, 'radius'), ),
        )
 def boundingVolume(self, mode):
     """Calculate bounding volume of this attribute's current values"""
     current = boundingvolume.getCachedVolume(self)
     if current:
         return current
     try:
         buffer = self.bufferView()
     except AttributeError as err:
         bv = boundingvolume.BoundingVolume()
     else:
         bv = boundingvolume.AABoundingBox.fromPoints(buffer)
     return boundingvolume.cacheVolume(
         self,
         bv,
         (
             (self, None),
             (self, 'buffer'),
             (self, 'offset'),
             (self, 'stride'),
             (self.buffer, 'buffer'),
         ),
     )
Exemplo n.º 10
0
    def boundingVolume( self, mode ):
        """Create a bounding-volume object for this node

        This is our geometry's boundingVolume, with the
        addition that any dependent volume must be dependent
        on our geometry field.
        """
        current = boundingvolume.getCachedVolume( self )
        if current:
            return current
        if self.geometry:
            if hasattr( self.geometry, 'boundingVolume'):
                volume = self.geometry.boundingVolume(mode)
            else:
                # is considered always visible
                volume = boundingvolume.UnboundedVolume()
        else:
            # is never visible
            volume = boundingvolume.BoundingVolume()
        return boundingvolume.cacheVolume(
            self, volume, ((self, 'geometry'),(volume,None)),
        )
Exemplo n.º 11
0
    def boundingVolume( self, mode ):
        """Create a bounding-volume object for this node

        This is our geometry's boundingVolume, with the
        addition that any dependent volume must be dependent
        on our geometry field.
        """
        current = boundingvolume.getCachedVolume( self )
        if current:
            return current
        if self.geometry:
            if hasattr( self.geometry, 'boundingVolume'):
                volume = self.geometry.boundingVolume(mode)
            else:
                # is considered always visible
                volume = boundingvolume.UnboundedVolume()
        else:
            # is never visible
            volume = boundingvolume.BoundingVolume()
        return boundingvolume.cacheVolume(
            self, volume, ((self, 'geometry'),(volume,None)),
        )
Exemplo n.º 12
0
 def OnInit( self ):
     """Load the image on initial load of the application"""
     print """Each dot is a request (y shows data transferred)"""
     self.log_queue = Queue.Queue( maxsize=self.dataPoints )
     self.coordinate = Coordinate(
         point = [(0,0,0)]*self.dataPoints,
     )
     # should *not* be necessary, but is, to prevent a cached 
     # bounding volume from dropping the graph
     boundingvolume.cacheVolume(
         self.coordinate,
         boundingvolume.UnboundedVolume(),
     )
     # just an arbitrary format/style for the text
     self.fontstyle = FontStyle(
         family='SANS', format = 'bitmap',
         justify = 'BEGIN',
     )
     #
     self.color = Color(
         color = [1.0,0.0,0.0],
     )
     self.data_slider = Transform(
         translation=(0,0,0),
         scale = (1/600.,1,1,),
         children = [
             Shape(
                 appearance = Appearance(
                     texture = ImageTexture( url='_particle.png' ),
                     material = Material(
                         diffuseColor = [1,0,0],
                     )
                 ),
                 geometry = PointSet(
                     coord = self.coordinate,
                     minSize = 5.0,
                     maxSize = 5.0,
                 ),
             ),
         ],
     )
     self.axes = Transform(
         children = [
             Transform( 
                 translation = (.25,coord,0),
                 children = [
                     Shape( geometry = Text(
                         string = [label],
                         fontStyle = self.fontstyle,
                     ))
                 ],
             )
             for (coord,label) in [
                 (0,'0B'),
                 (3,'1KB'),
                 (6,'1MB'),
                 (9,'1GB'),
             ]
         ] + [
             Transform( 
                 translation = (coord,-.75,0),
                 children = [
                     Shape( geometry = Text(
                         string = [label],
                         fontStyle = self.fontstyle,
                     ))
                 ],
             )
             for (coord,label)in [
                 (0,'now'),
                 (-1200*self.data_slider.scale[0],'-20m'),
                 (-2400*self.data_slider.scale[0],'-40m'),
                 (-3600*self.data_slider.scale[0],'-60m'),
             ]
         ]
     )
     self.transform = Transform(
         translation = (3,-2,0),
         children = [
             self.data_slider,
             self.axes,
         ]
     )
     self.sg = sceneGraph(
         children = [
             self.transform,
         ],
     )
     self.time = Timer( duration = 1, repeating = 1 )
     self.time.addEventHandler( "fraction", self.OnTimerFraction )
     self.time.register (self)
     self.time.start ()
     thread = threading.Thread( target = log_reader, args=('epa-http.txt',self.log_queue))
     thread.setDaemon(True)
     thread.start()
Exemplo n.º 13
0
    def boundingVolume( self, mode ):
        """Calculate bounding volume of this attribute's current values"""
        current = boundingvolume.getCachedVolume( self )
        if current:
            return current 
        try:
            buffer = self.bufferView()
        except AttributeError, err:
            bv = boundingvolume.BoundingVolume()
        else:
            bv = boundingvolume.AABoundingBox.fromPoints( buffer )
        return boundingvolume.cacheVolume( 
            self, bv, (
                (self,None),
                (self,'buffer'),
                (self,'offset'),
                (self,'stride'),
                (self.buffer,'buffer'),
            ),
        )

class _Uniform( object ):
    """Uniform common operations"""
    warned = False
    def location( self, shader, mode ):
        """Get our location (-1 if not defined/used)"""
        return shader.getLocation( mode, self.name, uniform=True )
    
    def currentValue( self, shader, mode ):
        """Retrieve the current value for this item
        
Exemplo n.º 14
0
        """Calculate bounding volume of this attribute's current values"""
        current = boundingvolume.getCachedVolume(self)
        if current:
            return current
        try:
            buffer = self.bufferView()
        except AttributeError, err:
            bv = boundingvolume.BoundingVolume()
        else:
            bv = boundingvolume.AABoundingBox.fromPoints(buffer)
        return boundingvolume.cacheVolume(
            self,
            bv,
            (
                (self, None),
                (self, 'buffer'),
                (self, 'offset'),
                (self, 'stride'),
                (self.buffer, 'buffer'),
            ),
        )


class _Uniform(object):
    """Uniform common operations"""
    warned = False

    def location(self, shader, mode):
        """Get our location (-1 if not defined/used)"""
        return shader.getLocation(mode, self.name, uniform=True)
Exemplo n.º 15
0
 def OnInit(self):
     """Load the image on initial load of the application"""
     print """Each dot is a request (y shows data transferred)"""
     self.log_queue = Queue.Queue(maxsize=self.dataPoints)
     self.coordinate = Coordinate(point=[(0, 0, 0)] * self.dataPoints, )
     # should *not* be necessary, but is, to prevent a cached
     # bounding volume from dropping the graph
     boundingvolume.cacheVolume(
         self.coordinate,
         boundingvolume.UnboundedVolume(),
     )
     # just an arbitrary format/style for the text
     self.fontstyle = FontStyle(
         family='SANS',
         format='bitmap',
         justify='BEGIN',
     )
     #
     self.color = Color(color=[1.0, 0.0, 0.0], )
     self.data_slider = Transform(
         translation=(0, 0, 0),
         scale=(
             1 / 600.,
             1,
             1,
         ),
         children=[
             Shape(
                 appearance=Appearance(
                     texture=ImageTexture(url='_particle.png'),
                     material=Material(diffuseColor=[1, 0, 0], )),
                 geometry=PointSet(
                     coord=self.coordinate,
                     minSize=5.0,
                     maxSize=5.0,
                 ),
             ),
         ],
     )
     self.axes = Transform(children=[
         Transform(
             translation=(.25, coord, 0),
             children=[
                 Shape(geometry=Text(
                     string=[label],
                     fontStyle=self.fontstyle,
                 ))
             ],
         ) for (coord, label) in [
             (0, '0B'),
             (3, '1KB'),
             (6, '1MB'),
             (9, '1GB'),
         ]
     ] + [
         Transform(
             translation=(coord, -.75, 0),
             children=[
                 Shape(geometry=Text(
                     string=[label],
                     fontStyle=self.fontstyle,
                 ))
             ],
         ) for (coord, label) in [
             (0, 'now'),
             (-1200 * self.data_slider.scale[0], '-20m'),
             (-2400 * self.data_slider.scale[0], '-40m'),
             (-3600 * self.data_slider.scale[0], '-60m'),
         ]
     ])
     self.transform = Transform(translation=(3, -2, 0),
                                children=[
                                    self.data_slider,
                                    self.axes,
                                ])
     self.sg = sceneGraph(children=[
         self.transform,
     ], )
     self.time = Timer(duration=1, repeating=1)
     self.time.addEventHandler("fraction", self.OnTimerFraction)
     self.time.register(self)
     self.time.start()
     thread = threading.Thread(target=log_reader,
                               args=('epa-http.txt', self.log_queue))
     thread.setDaemon(True)
     thread.start()