*** empty log message ***

This commit is contained in:
Mark Mine 2001-01-24 00:26:01 +00:00
parent 157d36d7ac
commit f71713944e
3 changed files with 98 additions and 71 deletions

View File

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

View File

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

View File

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