|
@@ -102,9 +102,11 @@ class ParticlePanel(AppShell):
|
|
|
)
|
|
)
|
|
|
self.createFloaters(systemPage, systemFloaterDefs)
|
|
self.createFloaters(systemPage, systemFloaterDefs)
|
|
|
# Checkboxes
|
|
# Checkboxes
|
|
|
|
|
+ # Note: Sense is reversed on this one
|
|
|
self.systemLocalVelocity = self.createCheckbutton(
|
|
self.systemLocalVelocity = self.createCheckbutton(
|
|
|
- systemPage, 'System', 'Local Velocity',
|
|
|
|
|
- 'On: velocities are absolute; Off: velocities are relative',
|
|
|
|
|
|
|
+ systemPage, 'System', 'Render Relative Velocities',
|
|
|
|
|
+ ('On: velocities are in render space; ' +
|
|
|
|
|
+ 'Off: velocities are in particle local space'),
|
|
|
self.toggleSystemLocalVelocity, 0)
|
|
self.toggleSystemLocalVelocity, 0)
|
|
|
self.systemGrowsOlder = self.createCheckbutton(
|
|
self.systemGrowsOlder = self.createCheckbutton(
|
|
|
systemPage, 'System', 'Grows Older',
|
|
systemPage, 'System', 'Grows Older',
|
|
@@ -200,7 +202,8 @@ class ParticlePanel(AppShell):
|
|
|
self.createRadiobutton(
|
|
self.createRadiobutton(
|
|
|
emissionFrame, 'left',
|
|
emissionFrame, 'left',
|
|
|
'Emitter', 'Explicit Emission',
|
|
'Emitter', 'Explicit Emission',
|
|
|
- 'particles are all emitted in parallel, in the same direction',
|
|
|
|
|
|
|
+ ('particles are all emitted in parallel, direction is based ' +
|
|
|
|
|
+ 'on explicit velocity vector'),
|
|
|
self.emissionType, BaseParticleEmitter.ETEXPLICIT,
|
|
self.emissionType, BaseParticleEmitter.ETEXPLICIT,
|
|
|
self.setEmissionType)
|
|
self.setEmissionType)
|
|
|
self.createRadiobutton(
|
|
self.createRadiobutton(
|
|
@@ -219,31 +222,31 @@ class ParticlePanel(AppShell):
|
|
|
emissionFrame.pack(fill = 'x', expand = 0)
|
|
emissionFrame.pack(fill = 'x', expand = 0)
|
|
|
|
|
|
|
|
self.createFloater(
|
|
self.createFloater(
|
|
|
- emitterPage, 'Emitter', 'Velocity Amplitude',
|
|
|
|
|
|
|
+ emitterPage, 'Emitter', 'Velocity Multiplier',
|
|
|
'launch velocity multiplier (all emission modes)',
|
|
'launch velocity multiplier (all emission modes)',
|
|
|
command = self.setEmitterAmplitude,
|
|
command = self.setEmitterAmplitude,
|
|
|
min = None)
|
|
min = None)
|
|
|
|
|
|
|
|
self.createFloater(
|
|
self.createFloater(
|
|
|
- emitterPage, 'Emitter', 'Velocity Amplitude Spread',
|
|
|
|
|
|
|
+ emitterPage, 'Emitter', 'Velocity Multiplier Spread',
|
|
|
'spread for launch velocity multiplier (all emission modes)',
|
|
'spread for launch velocity multiplier (all emission modes)',
|
|
|
command = self.setEmitterAmplitudeSpread)
|
|
command = self.setEmitterAmplitudeSpread)
|
|
|
|
|
|
|
|
self.createVector3Entry(
|
|
self.createVector3Entry(
|
|
|
- emitterPage, 'Emitter', 'Offset Force',
|
|
|
|
|
|
|
+ emitterPage, 'Emitter', 'Offset Velocity',
|
|
|
'Velocity vector applied to all particles',
|
|
'Velocity vector applied to all particles',
|
|
|
command = self.setEmitterOffsetForce)
|
|
command = self.setEmitterOffsetForce)
|
|
|
|
|
|
|
|
|
|
+ self.createVector3Entry(
|
|
|
|
|
+ emitterPage, 'Emitter', 'Explicit Velocity',
|
|
|
|
|
+ 'all particles launch with this velocity in Explicit mode',
|
|
|
|
|
+ command = self.setEmitterExplicitLaunchVector)
|
|
|
|
|
+
|
|
|
self.createVector3Entry(
|
|
self.createVector3Entry(
|
|
|
emitterPage, 'Emitter', 'Radiate Origin',
|
|
emitterPage, 'Emitter', 'Radiate Origin',
|
|
|
'particles launch away from this point in Radiate mode',
|
|
'particles launch away from this point in Radiate mode',
|
|
|
command = self.setEmitterRadiateOrigin)
|
|
command = self.setEmitterRadiateOrigin)
|
|
|
|
|
|
|
|
- self.createVector3Entry(
|
|
|
|
|
- emitterPage, 'Emitter', 'Explicit Launch Vector',
|
|
|
|
|
- 'all particles launch with this velocity in Explicit mode',
|
|
|
|
|
- command = self.setEmitterExplicitLaunchVector)
|
|
|
|
|
-
|
|
|
|
|
self.emitterNotebook = Pmw.NoteBook(emitterPage, tabpos = None)
|
|
self.emitterNotebook = Pmw.NoteBook(emitterPage, tabpos = None)
|
|
|
# Box page #
|
|
# Box page #
|
|
|
boxPage = self.emitterNotebook.add('BoxEmitter')
|
|
boxPage = self.emitterNotebook.add('BoxEmitter')
|
|
@@ -523,13 +526,15 @@ class ParticlePanel(AppShell):
|
|
|
return widgets
|
|
return widgets
|
|
|
|
|
|
|
|
def createFloater(self, parent, category, text, balloonHelp,
|
|
def createFloater(self, parent, category, text, balloonHelp,
|
|
|
- command = None, min = 0.0, resolution = None, **kw):
|
|
|
|
|
|
|
+ command = None, min = 0.0, resolution = None,
|
|
|
|
|
+ maxVelocity = 10.0, **kw):
|
|
|
kw['text'] = text
|
|
kw['text'] = text
|
|
|
kw['min'] = min
|
|
kw['min'] = min
|
|
|
if min != None:
|
|
if min != None:
|
|
|
kw['initialValue'] = min
|
|
kw['initialValue'] = min
|
|
|
else:
|
|
else:
|
|
|
kw['initialValue'] = 0.0
|
|
kw['initialValue'] = 0.0
|
|
|
|
|
+ kw['maxVelocity'] = maxVelocity
|
|
|
kw['resolution'] = resolution
|
|
kw['resolution'] = resolution
|
|
|
widget = apply(Floater.Floater, (parent,), kw)
|
|
widget = apply(Floater.Floater, (parent,), kw)
|
|
|
# Do this after the widget so command isn't called on creation
|
|
# Do this after the widget so command isn't called on creation
|
|
@@ -740,17 +745,17 @@ class ParticlePanel(AppShell):
|
|
|
emitter = self.particles.emitter
|
|
emitter = self.particles.emitter
|
|
|
self.emissionType.set(self.particles.emitter.getEmissionType())
|
|
self.emissionType.set(self.particles.emitter.getEmissionType())
|
|
|
amp = emitter.getAmplitude()
|
|
amp = emitter.getAmplitude()
|
|
|
- self.getWidget('Emitter', 'Velocity Amplitude').set(amp)
|
|
|
|
|
|
|
+ self.getWidget('Emitter', 'Velocity Multiplier').set(amp)
|
|
|
spread = emitter.getAmplitudeSpread()
|
|
spread = emitter.getAmplitudeSpread()
|
|
|
- self.getWidget('Emitter', 'Velocity Amplitude Spread').set(spread)
|
|
|
|
|
|
|
+ self.getWidget('Emitter', 'Velocity Multiplier Spread').set(spread)
|
|
|
vec = emitter.getOffsetForce()
|
|
vec = emitter.getOffsetForce()
|
|
|
- self.getWidget('Emitter', 'Offset Force').set(
|
|
|
|
|
|
|
+ self.getWidget('Emitter', 'Offset Velocity').set(
|
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
|
vec = emitter.getRadiateOrigin()
|
|
vec = emitter.getRadiateOrigin()
|
|
|
self.getWidget('Emitter', 'Radiate Origin').set(
|
|
self.getWidget('Emitter', 'Radiate Origin').set(
|
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
|
vec = emitter.getExplicitLaunchVector()
|
|
vec = emitter.getExplicitLaunchVector()
|
|
|
- self.getWidget('Emitter', 'Explicit Launch Vector').set(
|
|
|
|
|
|
|
+ self.getWidget('Emitter', 'Explicit Velocity').set(
|
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
[vec[0], vec[1], vec[2]], 0)
|
|
|
if isinstance(emitter, BoxEmitter):
|
|
if isinstance(emitter, BoxEmitter):
|
|
|
min = emitter.getMinBound()
|
|
min = emitter.getMinBound()
|