Browse Source

*** empty log message ***

Mark Mine 25 years ago
parent
commit
f71713944e

+ 39 - 37
direct/src/showbase/Particles.py

@@ -31,6 +31,8 @@ import LinearEulerIntegrator
 import ClockObject
 
 globalClock = ClockObject.ClockObject.getGlobalClock()
+SparkleParticleRenderer.SparkleParticleRenderer.SPNOSCALE = 0
+SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE = 1
 
 class Particles(ParticleSystem.ParticleSystem):
 
@@ -45,13 +47,13 @@ class Particles(ParticleSystem.ParticleSystem):
 
 	self.factory = None 
 	self.factoryType = "undefined"
-	self.setFactory("Point")
+	self.setFactory("PointParticleFactory")
 	self.renderer = None 
 	self.rendererType = "undefined"
-	self.setRenderer("Line")
+	self.setRenderer("PointParticleRenderer")
 	self.emitter = None 
 	self.emitterType = "undefined"
-	self.setEmitter("Sphere Volume")
+	self.setEmitter("SphereVolumeEmitter")
 
 	self.node = PhysicalNode.PhysicalNode()
 	self.node.addPhysical(self)
@@ -73,16 +75,16 @@ class Particles(ParticleSystem.ParticleSystem):
 	if (self.factory):
 	    self.factory = None
 	self.factoryType = type
-	if (type == "Point"):
+	if (type == "PointParticleFactory"):
 	    self.factory = PointParticleFactory.PointParticleFactory() 
-	elif (type == "Z Spin"):
+	elif (type == "ZSpinParticleFactory"):
 	    self.factory = ZSpinParticleFactory.ZSpinParticleFactory()
-	elif (type == "Oriented"):
+	elif (type == "OrientedParticleFactory"):
 	    self.factory = OrientedParticleFactory.OrientedParticleFactory()
 	else:
 	    print "unknown factory type: %s" % type
 	    return None
-	#self.factory.setLifespanBase(0.5)
+	self.factory.setLifespanBase(0.5)
 	ParticleSystem.ParticleSystem.setFactory(self, self.factory)
 
     def setRenderer(self, type):
@@ -92,18 +94,18 @@ class Particles(ParticleSystem.ParticleSystem):
 	if (self.renderer):
 	    self.renderer = None
 	self.rendererType = type
-	if (type == "Point"):
+	if (type == "PointParticleRenderer"):
 	    self.renderer = PointParticleRenderer.PointParticleRenderer()
 	    self.renderer.setPointSize(1.0)
-	elif (type == "Line"):
+	elif (type == "LineParticleRenderer"):
 	    self.renderer = LineParticleRenderer.LineParticleRenderer()
 	    self.renderer.setHeadColor(Vec4(1.0, 1.0, 1.0, 1.0))
 	    self.renderer.setTailColor(Vec4(1.0, 1.0, 1.0, 1.0))
-	elif (type == "Geom"):
+	elif (type == "GeomParticleRenderer"):
 	    self.renderer = GeomParticleRenderer.GeomParticleRenderer()
-	elif (type == "Sparkle"):
+	elif (type == "SparkleParticleRenderer"):
 	    self.renderer = SparkleParticleRenderer.SparkleParticleRenderer()
-	elif (type == "Sprite"):
+	elif (type == "SpriteParticleRenderer"):
 	    self.renderer = SpriteParticleRenderer.SpriteParticleRenderer()
 	else:
 	    print "unknown renderer type: %s" % type
@@ -120,24 +122,24 @@ class Particles(ParticleSystem.ParticleSystem):
 	if (self.emitter):
 	    self.emitter = None
 	self.emitterType = type
-	if (type == "Box"):
+	if (type == "BoxEmitter"):
 	    self.emitter = BoxEmitter.BoxEmitter()
-	elif (type == "Disc"):
+	elif (type == "DiscEmitter"):
 	    self.emitter = DiscEmitter.DiscEmitter()
-	elif (type == "Line"):
+	elif (type == "LineEmitter"):
 	    self.emitter = LineEmitter.LineEmitter()
-	elif (type == "Point"):
+	elif (type == "PointEmitter"):
 	    self.emitter = PointEmitter.PointEmitter()
-	elif (type == "Rectangle"):
+	elif (type == "RectangleEmitter"):
 	    self.emitter = RectangleEmitter.RectangleEmitter()
-	elif (type == "Ring"):
+	elif (type == "RingEmitter"):
 	    self.emitter = RingEmitter.RingEmitter()
-	elif (type == "Sphere Surface"):
+	elif (type == "SphereSurfaceEmitter"):
 	    self.emitter = SphereSurfaceEmitter.SphereSurfaceEmitter()
-	elif (type == "Sphere Volume"):
+	elif (type == "SphereVolumeEmitter"):
 	    self.emitter = SphereVolumeEmitter.SphereVolumeEmitter()
 	    self.emitter.setRadius(1.0)
-	elif (type == "Tangent Ring"):
+	elif (type == "TangentRingEmitter"):
 	    self.emitter = TangentRingEmitter.TangentRingEmitter()
 	else:
 	    print "unknown emitter type: %s" % type
@@ -176,15 +178,15 @@ class Particles(ParticleSystem.ParticleSystem):
 	print "factory.setMassSpread(%f)" % self.factory.getMassSpread()
 	print "factory.setTerminalVelocityBase(%f)" % self.factory.getTerminalVelocityBase()
 	print "factory.setTerminalVelocitySpread(%f)" % self.factory.getTerminalVelocitySpread()
-	if (self.factoryType == "Point"):
+	if (self.factoryType == "PointParticleFactory"):
 	    print "# Point factory parameters"
-	elif (self.factoryType == "Z Spin"):
+	elif (self.factoryType == "ZSpinParticleFactory"):
 	    print "# Z Spin factory parameters"
 	    print "factory.setInitialAngle(%f)" % self.factory.getInitialAngle()
 	    print "factory.setFinalAngle(%f)" % self.factory.getFinalAngle()
 	    print "factory.setInitialAngleSpread(%f)" % self.factory.getInitialAngleSpread()
 	    print "factory.setFinalAngleSpread(%f)" % self.factory.getFinalAngleSpread()
-	elif (self.factoryType == "Oriented"):
+	elif (self.factoryType == "OrientedParticleFactory"):
 	    print "# Oriented factory parameters"
 	    print 'factory.setInitialOrientation(' + self.factory.getInitialOrientation + ')'
 	    print 'factory.setFinalOrientation(' + self.factory.getFinalOrientation + ')'
@@ -230,17 +232,17 @@ class Particles(ParticleSystem.ParticleSystem):
 	    elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
 		bMethod = "PP_BLEND_CUBIC"
 	    print 'renderer.setBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')'
-	elif (self.rendererType == "Line"):
+	elif (self.rendererType == "LineParticleRenderer"):
 	    print "# Line parameters"
 	    sColor = self.renderer.getHeadColor()
 	    print ('renderer.setHeadColor(Colorf(%f, %f, %f, %f))' % (sColor[0], sColor[1], sColor[2], sColor[3]))
 	    sColor = self.renderer.getTailColor()
 	    print ('renderer.setTailColor(Colorf(%f, %f, %f, %f))' % (sColor[0], sColor[1], sColor[2], sColor[3]))
-	elif (self.rendererType == "Geom"):
+	elif (self.rendererType == "GeomParticleRenderer"):
 	    print "# Geom parameters"
 	    node = self.renderer.getGeomNode()
 	    print 'renderer.setGeomNode(' + node.getName() + ')'
-	elif (self.rendererType == "Sparkle"):
+	elif (self.rendererType == "SparkleParticleRenderer"):
 	    print "# Sparkle parameters"
 	    sColor = self.renderer.getCenterColor()
 	    print ('renderer.setCenterColor(Colorf(%f, %f, %f, %f))' % (sColor[0], sColor[1], sColor[2], sColor[3]))
@@ -253,7 +255,7 @@ class Particles(ParticleSystem.ParticleSystem):
 	    if (lifeScale == SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE):
 		lScale = "SP_SCALE"
 	    print 'renderer.setLifeScale(SparkleParticleRenderer.SparkleParticleRenderer.' + lScale + ')'
-	elif (self.rendererType == "Sprite"):
+	elif (self.rendererType == "SpriteParticleRenderer"):
 	    print "# Sprite parameters"
 	    tex = self.renderer.getTexture()
 	    print 'renderer.setTexture(' + tex.getName() + ')'
@@ -296,13 +298,13 @@ class Particles(ParticleSystem.ParticleSystem):
 	print ('emitter.setExplicitLaunchVector(Vec3(%f, %f, %f))' % (oForce[0], oForce[1], oForce[2]))
 	orig = self.emitter.getRadiateOrigin()
 	print ('emitter.setRadiateOrigin(Point3(%f, %f, %f))' % (orig[0], orig[1], orig[2]))
-	if (self.emitterType == "Box"):
+	if (self.emitterType == "BoxEmitter"):
 	    print "# Box parameters"
 	    bound = self.emitter.getMinBound()
 	    print ('emitter.setMinBound(Point3(%f, %f, %f))' % (bound[0], bound[1], bound[2]))
 	    bound = self.emitter.getMaxBound()
 	    print ('emitter.setMaxBound(Point3(%f, %f, %f))' % (bound[0], bound[1], bound[2]))
-	elif (self.emitterType == "Disc"):
+	elif (self.emitterType == "DiscEmitter"):
 	    print "# Disc parameters"
 	    print 'emitter.setRadius(%f)' % self.emitter.getRadius()
 	    print 'emitter.setOuterAngle(%f)' % self.emitter.getOuterAngle()
@@ -311,32 +313,32 @@ class Particles(ParticleSystem.ParticleSystem):
 	    print 'emitter.setInnerMagnitude(%f)' % self.emitter.getInnerMagnitude()
 	    print 'emitter.setCubicLerping(%d)' % self.emitter.getCubicLerping()
 
-	elif (self.emitterType == "Line"):
+	elif (self.emitterType == "LineEmitter"):
 	    print "# Line parameters"
 	    point = self.emitter.getEndpoint1()
 	    print ('emitter.setEndpoint1(Point3(%f, %f, %f))' % (point[0], point[1], point[2]))
 	    point = self.emitter.getEndpoint2()
 	    print ('emitter.setEndpoint2(Point3(%f, %f, %f))' % (point[0], point[1], point[2]))
-	elif (self.emitterType == "Point"):
+	elif (self.emitterType == "PointEmitter"):
 	    print "# Point parameters"
 	    point = self.emitter.getLocation()
 	    print ('emitter.setLocation(Point3(%f, %f, %f))' % (point[0], point[1], point[2]))
-	elif (self.emitterType == "Rectangle"):
+	elif (self.emitterType == "RectangleEmitter"):
 	    print "# Rectangle parameters"
 	    bound = self.emitter.getMinBound()
 	    print ('emitter.setMinBound(Point2(%f, %f))' % (point[0], point[1]))
 	    bound = self.emitter.getMaxBound()
 	    print ('emitter.setMaxBound(Point2(%f, %f))' % (point[0], point[1]))
-	elif (self.emitterType == "Ring"):
+	elif (self.emitterType == "RingEmitter"):
 	    print "# Ring parameters"
 	    print 'emitter.setRadius(%f)' % self.emitter.getRadius()
 	    print 'emitter.setAngle(%f)' % self.emitter.getAngle()
-	elif (self.emitterType == "Sphere Surface"):
+	elif (self.emitterType == "SphereSurfaceEmitter"):
 	    print "# Sphere Surface parameters"
 	    print 'emitter.setRadius(%f)' % self.emitter.getRadius()
-	elif (self.emitterType == "Sphere Volume"):
+	elif (self.emitterType == "SphereVolumeEmitter"):
 	    print "# Sphere Volume parameters"
 	    print 'emitter.setRadius(%f)' % self.emitter.getRadius()
-	elif (self.emitterType == "Tangent Ring"):
+	elif (self.emitterType == "TangentRingEmitter"):
 	    print "# Tangent Ring parameters"
 	    print 'emitter.setRadius(%f)' % self.emitter.getRadius()

+ 2 - 2
direct/src/showbase/showBase.cxx

@@ -100,10 +100,10 @@ PT(GraphicsPipe) make_graphics_pipe() {
   GraphicsPipe::resolve_modules();
 
   nout << "Known pipe types:" << endl;
-  GraphicsPipe::_factory.write_types(nout, 2);
+  GraphicsPipe::get_factory().write_types(nout, 2);
 
   // Create a window
-  main_pipe = GraphicsPipe::_factory.
+  main_pipe = GraphicsPipe::get_factory().
     make_instance(InteractiveGraphicsPipe::get_class_type());
 
   if (main_pipe == (GraphicsPipe*)0L) {

+ 57 - 32
direct/src/tkpanels/ParticlePanel.py

@@ -106,11 +106,12 @@ class ParticlePanel(AppShell):
         hpr.addMenuItem('Popup Placer Panel', Placer.Placer)
 
         ## FACTORY PAGE ##
-        self.factorType = self.createOptionMenu(
+        self.factoryTypeMenu = self.createOptionMenu(
             factoryPage,
             'Factory', 'Factory Type',
             'Select type of particle factory',
-            ('Point', 'Z Spin', 'Oriented'),
+            ('PointParticleFactory', 'ZSpinParticleFactory',
+             'OrientedParticleFactory'),
             self.selectFactoryType)
         factoryWidgets = (
             ('Factory', 'Life Span',
@@ -141,9 +142,10 @@ class ParticlePanel(AppShell):
 
         self.factoryNotebook = Pmw.NoteBook(factoryPage, tabpos = None)
         # Point page #
-        factoryPointPage = self.factoryNotebook.add('Point')
+        factoryPointPage = self.factoryNotebook.add('PointParticleFactory')
+        Label(factoryPointPage, text = "").pack()
         # Z spin page #
-        zSpinPage = self.factoryNotebook.add('Z Spin')
+        zSpinPage = self.factoryNotebook.add('ZSpinParticleFactory')
         self.createAngleDial(zSpinPage, 'Z Spin Factory', 'Initial Angle',
                              'Starting angle in degrees',
                              command = self.setFactoryZSpinInitialAngle)
@@ -154,23 +156,24 @@ class ParticlePanel(AppShell):
                              'Spread of the final angle',
                              command = self.setFactoryZSpinAngleSpread)
         # Oriented page #
-        orientedPage = self.factoryNotebook.add('Oriented')
+        orientedPage = self.factoryNotebook.add('OrientedParticleFactory')
         Label(orientedPage, text = 'Not implemented').pack(expand = 1,
                                                            fill = BOTH)
-        self.factoryNotebook.pack(expand = 1, fill = BOTH)
+        #self.factoryNotebook.pack(expand = 1, fill = BOTH)
 
         ## EMITTER PAGE ##
-        self.createOptionMenu(emitterPage, 'Emitter',
-                              'Emitter type',
-                              'Select type of particle emitter',
-			      ('Box', 'Disc', 'Line', 'Point', 'Rectangle',
-                               'Ring', 'Sphere Volume', 'Sphere Surface',
-                               'Tangent Ring'),
-                              self.selectEmitterType)
+        self.emitterTypeMenu = self.createOptionMenu(
+            emitterPage, 'Emitter',
+            'Emitter type',
+            'Select type of particle emitter',
+            ('BoxEmitter', 'DiscEmitter', 'LineEmitter', 'PointEmitter',
+             'RectangleEmitter', 'RingEmitter', 'SphereVolumeEmitter',
+             'SphereSurfaceEmitter', 'TangentRingEmitter'),
+            self.selectEmitterType)
         
         self.emitterNotebook = Pmw.NoteBook(emitterPage, tabpos = None)
         # Box page #
-        boxPage = self.emitterNotebook.add('Box')
+        boxPage = self.emitterNotebook.add('BoxEmitter')
         self.createVector3Entry(boxPage, 'Box Emitter', 'Min',
                                 'Min point defining emitter box',
                                 command = self.setEmitterBoxPoint1)
@@ -182,7 +185,7 @@ class ParticlePanel(AppShell):
                                 'Initial particle velocity vector',
                                 command = self.setEmitterBoxVelocityVector)
         # Disc page #
-        discPage = self.emitterNotebook.add('Disc')
+        discPage = self.emitterNotebook.add('DiscEmitter')
         self.createFloater(discPage, 'Disc Emitter', 'Radius',
                            'Radius of disc',
                            command = self.setEmitterDiscRadius)
@@ -202,7 +205,7 @@ class ParticlePanel(AppShell):
             discPage, 'Disc Emitter', 'Cubic Lerping',
             self.toggleEmitterDiscCubicLerping, 0)
         # Line page #
-        linePage = self.emitterNotebook.add('Line')
+        linePage = self.emitterNotebook.add('LineEmitter')
         self.createVector3Entry(linePage, 'Line Emitter', 'Min',
                                 'Min point defining emitter line',
                                 command = self.setEmitterLinePoint1)
@@ -215,7 +218,7 @@ class ParticlePanel(AppShell):
                                 command = self.setEmitterLineVelocityVector,
                                 initialValue = (0.0, 0.0, 1.0))
         # Point page #
-        emitterPointPage = self.emitterNotebook.add('Point')
+        emitterPointPage = self.emitterNotebook.add('PointEmitter')
         self.createVector3Entry(emitterPointPage, 'Point Emitter', 'Position',
                                'Position of emitter point',
                                 command = self.setEmitterPointPosition)
@@ -225,7 +228,7 @@ class ParticlePanel(AppShell):
                                 command = self.setEmitterPointVelocityVector,
                                 initialValue = (0.0, 0.0, 1.0))
         # Rectangle #
-        rectanglePage = self.emitterNotebook.add('Rectangle')
+        rectanglePage = self.emitterNotebook.add('RectangleEmitter')
         self.createVector2Entry(rectanglePage,
                                 'Rectangle Emitter', 'Min',
                                'Point defining rectangle',
@@ -240,7 +243,7 @@ class ParticlePanel(AppShell):
             command = self.setEmitterRectangleVelocityVector,
             initialValue = (0.0, 0.0, 1.0))
         # Ring #
-        ringPage = self.emitterNotebook.add('Ring')
+        ringPage = self.emitterNotebook.add('RingEmitter')
         self.createFloater(ringPage, 'Ring Emitter', 'Radius',
                            'Radius of ring',
                            command = self.setEmitterRingRadius)
@@ -251,31 +254,34 @@ class ParticlePanel(AppShell):
                            'Launch velocity multiplier at outer edge of ring',
                            command = self.setEmitterRingVelocityMultiplier)
         # Sphere volume #
-        sphereVolumePage = self.emitterNotebook.add('Sphere Volume')
+        sphereVolumePage = self.emitterNotebook.add('SphereVolumeEmitter')
         self.createFloater(sphereVolumePage, 'Sphere Volume Emitter', 'Radius',
                            'Radius of sphere',
                            command = self.setEmitterSphereVolumeRadius)
         # Sphere surface #
-        sphereSurfacePage = self.emitterNotebook.add('Sphere Surface')
+        sphereSurfacePage = self.emitterNotebook.add('SphereSurfaceEmitter')
         self.createFloater(sphereSurfacePage, 'Sphere Surface Emitter',
                            'Radius',
                            'Radius of sphere',
                            command = self.setEmitterSphereSurfaceRadius)
         # Tangent ring # 
-        tangentRingPage = self.emitterNotebook.add('Tangent Ring')
+        tangentRingPage = self.emitterNotebook.add('TangentRingEmitter')
         self.createFloater(tangentRingPage, 'Tangent Ring Emitter', 'Radius',
                            'Radius of ring',
                            command = self.setEmitterTangentRingRadius)
         self.emitterNotebook.pack(fill = X)
 
         ## RENDERER PAGE ##
-        self.createOptionMenu(rendererPage, 'Renderer', 'Renderer type',
-                              'Select type of particle renderer',
-                              ('Line', 'Geom', 'Point', 'Sparkle', 'Sprite'),
-                              self.selectRendererType)
+        self.rendererTypeMenu = self.createOptionMenu(
+            rendererPage, 'Renderer', 'Renderer type',
+            'Select type of particle renderer',
+            ('LineParticleRenderer', 'GeomParticleRenderer',
+             'PointParticleRenderer', 'SparkleParticleRenderer',
+             'SpriteParticleRenderer'),
+            self.selectRendererType)
         self.rendererNotebook = Pmw.NoteBook(rendererPage, tabpos = None)
 	# Line page #
-	linePage = self.rendererNotebook.add('Line')
+	linePage = self.rendererNotebook.add('LineParticleRenderer')
 	self.createColorEntry(linePage, 'Line Renderer', 'Head Color',
 				'Head color of line',
 				command = self.setRendererLineHeadColor)
@@ -283,7 +289,7 @@ class ParticlePanel(AppShell):
 				'Tail color of line',
 				command = self.setRendererLineTailColor)
         # Geom page #
-        geomPage = self.rendererNotebook.add('Geom')
+        geomPage = self.rendererNotebook.add('GeomParticleRenderer')
         f = Frame(geomPage)
         f.pack(fill = X)
         Label(f, width = 12, text = 'Geom Node').pack(side = LEFT)
@@ -294,7 +300,7 @@ class ParticlePanel(AppShell):
         self.rendererGeomNodeEntry.bind('<Return>', self.setRendererGeomNode)
         self.rendererGeomNodeEntry.pack(side = LEFT, expand = 1, fill = X)
         # Point #
-        rendererPointPage = self.rendererNotebook.add('Point')
+        rendererPointPage = self.rendererNotebook.add('PointParticleRenderer')
         self.createFloater(rendererPointPage, 'Point Renderer', 'Point Size',
                            'Width and height of points in pixels',
                            command = self.setRendererPointSize)
@@ -319,7 +325,7 @@ class ParticlePanel(AppShell):
                                'PP_BLEND_CUBIC'),
                               self.rendererPointSelectBlendMethod)
         # Sparkle #
-        sparklePage = self.rendererNotebook.add('Sparkle')
+        sparklePage = self.rendererNotebook.add('SparkleParticleRenderer')
         self.createColorEntry(sparklePage, 'Sparkle Renderer',
                               'Center Color',
                               'Color of sparkle center',
@@ -342,7 +348,7 @@ class ParticlePanel(AppShell):
                               ('SP_NO_SCALE', 'SP_SCALE'),
                               self.setRendererSparkleLifeScale)
         # Sprite #
-        spritePage = self.rendererNotebook.add('Sprite')
+        spritePage = self.rendererNotebook.add('SpriteParticleRenderer')
         f = Frame(spritePage)
         f.pack(fill = X)
         Label(f, width = 12, text = 'Texture').pack(side = LEFT)
@@ -506,10 +512,13 @@ class ParticlePanel(AppShell):
         if page == 'System':
             self.updateSystemWidgets()
         elif page == 'Factory':
+            self.selectFactoryPage()
             self.updateFactoryWidgets()
         elif page == 'Emitter':
+            self.selectEmitterPage()
             self.updateEmitterWidgets()
         elif page == 'Renderer':
+            self.selectRendererPage()
             self.updateRendererWidgets()
             
     ## SYSTEM PAGE ##
@@ -554,6 +563,10 @@ class ParticlePanel(AppShell):
         self.factoryNotebook.selectpage(type)
 	self.particles.setFactory(type)
         self.updateFactoryWidgets()
+
+    def selectFactoryPage(self):
+        pass
+        
     def updateFactoryWidgets(self):
         factory = self.particles.factory
         lifespan = factory.getLifespanBase()
@@ -569,6 +582,7 @@ class ParticlePanel(AppShell):
         terminalVelocitySpread = factory.getTerminalVelocitySpread()
         self.getWidget('Factory', 'Terminal Vel. Spread').set(
             terminalVelocitySpread, 0)
+        
     def setFactoryLifeSpan(self, value):
 	self.particles.factory.setLifespanBase(value)
     def setFactoryLifeSpanSpread(self, value):
@@ -595,6 +609,11 @@ class ParticlePanel(AppShell):
         self.emitterNotebook.selectpage(type)
 	self.particles.setEmitter(type)
         self.updateEmitterWidgets()
+
+    def selectEmitterPage(self):
+        type = self.particles.emitter.__class__.__name__
+        self.emitterNotebook.selectpage(type)
+        self.emitterTypeMenu.set(type)
         
     def updateEmitterWidgets(self):
         emitter = self.particles.emitter
@@ -722,6 +741,7 @@ class ParticlePanel(AppShell):
         self.rendererNotebook.selectpage(type)
 	self.particles.setRenderer(type)
         self.updateRendererWidgets()
+        
     def updateRendererWidgets(self):
         renderer = self.particles.renderer
         if isinstance(renderer, LineParticleRenderer):
@@ -806,7 +826,12 @@ class ParticlePanel(AppShell):
 	    elif (blendMethod == BaseParticleRenderer.PPBLENDCUBIC):
 		bMethod = "PP_BLEND_CUBIC"
             self.rendererSpriteAlphaDisable.set(renderer.getAlphaDisable())
-            
+
+    def selectRendererPage(self):
+        type = self.particles.renderer.__class__.__name__
+        self.rendererNotebook.selectpage(type)
+        self.rendererTypeMenu.set(type)
+        
     # Line #
     def setRendererLineHeadColor(self, color):
 	self.particles.renderer.setHeadColor(