colorinterpolation segments now read correctly from ptf file. They can also now be either additive or modulated

This commit is contained in:
Josh Wilson 2006-06-14 02:04:24 +00:00
parent 56e6945911
commit 7be2511fa7

View File

@ -596,9 +596,7 @@ class ParticlePanel(AppShell):
self.rendererGeomSegmentFrame = sf.interior() self.rendererGeomSegmentFrame = sf.interior()
self.rendererGeomSegmentFrame.pack(fill = BOTH, expand = 1) self.rendererGeomSegmentFrame.pack(fill = BOTH, expand = 1)
self.rendererGeomSegmentWidgetList = [] self.rendererSegmentWidgetList = []
rendererGeomNotebook.setnaturalsize() rendererGeomNotebook.setnaturalsize()
@ -803,7 +801,7 @@ class ParticlePanel(AppShell):
self.rendererSpriteSegmentFrame = sf.interior() self.rendererSpriteSegmentFrame = sf.interior()
self.rendererSpriteSegmentFrame.pack(fill = BOTH, expand = 1) self.rendererSpriteSegmentFrame.pack(fill = BOTH, expand = 1)
self.rendererSpriteSegmentWidgetList = [] self.rendererSegmentWidgetList = []
rendererSpriteNotebook.setnaturalsize() rendererSpriteNotebook.setnaturalsize()
########################################################## ##########################################################
@ -1584,10 +1582,13 @@ class ParticlePanel(AppShell):
else: else:
self.getWidget('Geom Renderer','Incoming Op.').pack_forget() self.getWidget('Geom Renderer','Incoming Op.').pack_forget()
self.getWidget('Geom Renderer','Fbuffer Op.').pack_forget() self.getWidget('Geom Renderer','Fbuffer Op.').pack_forget()
for x in self.rendererSpriteSegmentWidgetList: for x in self.rendererSegmentWidgetList:
x.pack_forget() x.pack_forget()
x.destroy() x.destroy()
self.rendererGeomSegmentWidgetList = [] self.rendererSegmentWidgetList = []
for id in self.particles.renderer.getColorInterpolationManager().getSegmentIdList().split():
self.createWidgetForExistingInterpolationSegment(eval(id))
elif isinstance(renderer, PointParticleRenderer): elif isinstance(renderer, PointParticleRenderer):
pointSize = renderer.getPointSize() pointSize = renderer.getPointSize()
self.getWidget('Point Renderer', 'Point Size').set(pointSize) self.getWidget('Point Renderer', 'Point Size').set(pointSize)
@ -1673,10 +1674,12 @@ class ParticlePanel(AppShell):
else: else:
self.getWidget('Sprite Renderer','Incoming Op.').pack_forget() self.getWidget('Sprite Renderer','Incoming Op.').pack_forget()
self.getWidget('Sprite Renderer','Fbuffer Op.').pack_forget() self.getWidget('Sprite Renderer','Fbuffer Op.').pack_forget()
for x in self.rendererGeomSegmentWidgetList: for x in self.rendererSegmentWidgetList:
x.pack_forget() x.pack_forget()
x.destroy() x.destroy()
self.rendererSpriteSegmentWidgetList = [] self.rendererSegmentWidgetList = []
for id in self.particles.renderer.getColorInterpolationManager().getSegmentIdList().split():
self.createWidgetForExistingInterpolationSegment(eval(id))
def selectRendererPage(self): def selectRendererPage(self):
type = self.particles.renderer.__class__.__name__ type = self.particles.renderer.__class__.__name__
@ -1783,22 +1786,6 @@ class ParticlePanel(AppShell):
self.rendererSpriteTextureEntry['background'] = '#C0C0C0' self.rendererSpriteTextureEntry['background'] = '#C0C0C0'
self.rendererSpriteFileEntry['background'] = '#FFFFFF' self.rendererSpriteFileEntry['background'] = '#FFFFFF'
self.rendererSpriteNodeEntry['background'] = '#FFFFFF' self.rendererSpriteNodeEntry['background'] = '#FFFFFF'
def addConstantInterpolationSegment(self):
ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager()
seg = cim.getSegment(cim.addConstant())
if(ren.__class__.__name__ == 'SpriteParticleRendererExt'):
parent = self.rendererSpriteSegmentFrame
segName = `len(self.rendererSpriteSegmentWidgetList)`+':Constant'
self.rendererSpriteSegmentWidgetList.append(
self.createConstantInterpolationSegmentWidget(parent, segName, seg))
elif(ren.__class__.__name__ == 'GeomParticleRenderer'):
parent = self.rendererGeomSegmentFrame
segName = `len(self.rendererGeomSegmentWidgetList)`+':Constant'
self.rendererGeomSegmentWidgetList.append(
self.createConstantInterpolationSegmentWidget(parent, segName, seg))
parent.pack(fill=BOTH, expand=1)
def setRendererSpriteAnimationFrameRate(self, rate): def setRendererSpriteAnimationFrameRate(self, rate):
self.particles.renderer.setAnimateFramesRate(rate) self.particles.renderer.setAnimateFramesRate(rate)
@ -1933,74 +1920,102 @@ class ParticlePanel(AppShell):
fbufferOperandStr = operand fbufferOperandStr = operand
self.setRendererColorBlendAttrib('Geom Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr) self.setRendererColorBlendAttrib('Geom Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr)
def addConstantInterpolationSegment(self): def addConstantInterpolationSegment(self, id = None):
ren = self.particles.getRenderer() ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager() cim = ren.getColorInterpolationManager()
seg = cim.getSegment(cim.addConstant()) if id is None:
seg = cim.getSegment(cim.addConstant())
else:
seg = cim.getSegment(id)
if(ren.__class__.__name__ == 'SpriteParticleRendererExt'): if(ren.__class__.__name__ == 'SpriteParticleRendererExt'):
parent = self.rendererSpriteSegmentFrame parent = self.rendererSpriteSegmentFrame
segName = `len(self.rendererSpriteSegmentWidgetList)`+':Constant' segName = `len(self.rendererSegmentWidgetList)`+':Constant'
self.rendererSpriteSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createConstantInterpolationSegmentWidget(parent, segName, seg)) self.createConstantInterpolationSegmentWidget(parent, segName, seg))
elif(ren.__class__.__name__ == 'GeomParticleRenderer'): elif(ren.__class__.__name__ == 'GeomParticleRenderer'):
parent = self.rendererGeomSegmentFrame parent = self.rendererGeomSegmentFrame
segName = `len(self.rendererGeomSegmentWidgetList)`+':Constant' segName = `len(self.rendererSegmentWidgetList)`+':Constant'
self.rendererGeomSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createConstantInterpolationSegmentWidget(parent, segName, seg)) self.createConstantInterpolationSegmentWidget(parent, segName, seg))
parent.pack(fill=BOTH, expand=1) parent.pack(fill=BOTH, expand=1)
def addLinearInterpolationSegment(self): def addLinearInterpolationSegment(self, id = None):
ren = self.particles.getRenderer() ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager() cim = ren.getColorInterpolationManager()
seg = cim.getSegment(cim.addLinear()) if id is None:
seg = cim.getSegment(cim.addLinear())
else:
seg = cim.getSegment(id)
if(ren.__class__.__name__ == 'SpriteParticleRendererExt'): if(ren.__class__.__name__ == 'SpriteParticleRendererExt'):
parent = self.rendererSpriteSegmentFrame parent = self.rendererSpriteSegmentFrame
segName = `len(self.rendererSpriteSegmentWidgetList)`+':Linear' segName = `len(self.rendererSegmentWidgetList)`+':Linear'
self.rendererSpriteSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createLinearInterpolationSegmentWidget(parent, segName, seg)) self.createLinearInterpolationSegmentWidget(parent, segName, seg))
elif(ren.__class__.__name__ == 'GeomParticleRenderer'): elif(ren.__class__.__name__ == 'GeomParticleRenderer'):
parent = self.rendererGeomSegmentFrame parent = self.rendererGeomSegmentFrame
segName = `len(self.rendererGeomSegmentWidgetList)`+':Linear' segName = `len(self.rendererSegmentWidgetList)`+':Linear'
self.rendererGeomSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createLinearInterpolationSegmentWidget(parent, segName, seg)) self.createLinearInterpolationSegmentWidget(parent, segName, seg))
parent.pack(fill=BOTH, expand=1) parent.pack(fill=BOTH, expand=1)
def addStepwaveInterpolationSegment(self): def addStepwaveInterpolationSegment(self, id = None):
ren = self.particles.getRenderer() ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager() cim = ren.getColorInterpolationManager()
seg = cim.getSegment(cim.addStepwave()) if id is None:
seg = cim.getSegment(cim.addStepwave())
else:
seg = cim.getSegment(id)
if(ren.__class__.__name__ == 'SpriteParticleRendererExt'): if(ren.__class__.__name__ == 'SpriteParticleRendererExt'):
parent = self.rendererSpriteSegmentFrame parent = self.rendererSpriteSegmentFrame
segName = `len(self.rendererSpriteSegmentWidgetList)`+':Stepwave' segName = `len(self.rendererSegmentWidgetList)`+':Stepwave'
self.rendererSpriteSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createStepwaveInterpolationSegmentWidget(parent, segName, seg)) self.createStepwaveInterpolationSegmentWidget(parent, segName, seg))
elif(ren.__class__.__name__ == 'GeomParticleRenderer'): elif(ren.__class__.__name__ == 'GeomParticleRenderer'):
parent = self.rendererGeomSegmentFrame parent = self.rendererGeomSegmentFrame
segName = `len(self.rendererGeomSegmentWidgetList)`+':Stepwave' segName = `len(self.rendererSegmentWidgetList)`+':Stepwave'
self.rendererGeomSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createStepwaveInterpolationSegmentWidget(parent, segName, seg)) self.createStepwaveInterpolationSegmentWidget(parent, segName, seg))
parent.pack(fill=BOTH, expand=1) parent.pack(fill=BOTH, expand=1)
def addSinusoidInterpolationSegment(self): def addSinusoidInterpolationSegment(self, id = None):
ren = self.particles.getRenderer() ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager() cim = ren.getColorInterpolationManager()
seg = cim.getSegment(cim.addSinusoid()) if id is None:
seg = cim.getSegment(cim.addSinusoid())
else:
seg = cim.getSegment(id)
if(ren.__class__.__name__ == 'SpriteParticleRendererExt'): if(ren.__class__.__name__ == 'SpriteParticleRendererExt'):
parent = self.rendererSpriteSegmentFrame parent = self.rendererSpriteSegmentFrame
segName = `len(self.rendererSpriteSegmentWidgetList)`+':Sinusoid' segName = `len(self.rendererSegmentWidgetList)`+':Sinusoid'
self.rendererSpriteSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createSinusoidInterpolationSegmentWidget(parent, segName, seg)) self.createSinusoidInterpolationSegmentWidget(parent, segName, seg))
elif(ren.__class__.__name__ == 'GeomParticleRenderer'): elif(ren.__class__.__name__ == 'GeomParticleRenderer'):
parent = self.rendererGeomSegmentFrame parent = self.rendererGeomSegmentFrame
segName = `len(self.rendererGeomSegmentWidgetList)`+':Sinusoid' segName = `len(self.rendererSegmentWidgetList)`+':Sinusoid'
self.rendererGeomSegmentWidgetList.append( self.rendererSegmentWidgetList.append(
self.createSinusoidInterpolationSegmentWidget(parent, segName, seg)) self.createSinusoidInterpolationSegmentWidget(parent, segName, seg))
parent.pack(fill=BOTH, expand=1) parent.pack(fill=BOTH, expand=1)
def createWidgetForExistingInterpolationSegment(self, id):
ren = self.particles.getRenderer()
cim = ren.getColorInterpolationManager()
seg = cim.getSegment(id)
assert seg
fun = seg.getFunction()
if isinstance(fun,ColorInterpolationFunctionSinusoid):
self.addSinusoidInterpolationSegment(id)
elif isinstance(fun,ColorInterpolationFunctionStepwave):
self.addStepwaveInterpolationSegment(id)
elif isinstance(fun,ColorInterpolationFunctionLinear):
self.addLinearInterpolationSegment(id)
elif isinstance(fun,ColorInterpolationFunctionConstant):
self.addConstantInterpolationSegment(id)
def createInterpolationSegmentFrame(self, parent, segName, seg): def createInterpolationSegmentFrame(self, parent, segName, seg):
frame = Frame(parent, relief = RAISED, borderwidth = 2) frame = Frame(parent, relief = RAISED, borderwidth = 2)
lFrame = Frame(frame, relief = FLAT) lFrame = Frame(frame, relief = FLAT)
@ -2010,6 +2025,9 @@ class ParticlePanel(AppShell):
def setSegEnabled(s=self, n=segName): def setSegEnabled(s=self, n=segName):
enabled = s.getVariable('Sprite Renderer', n+' Enabled') enabled = s.getVariable('Sprite Renderer', n+' Enabled')
seg.setEnabled(enabled.get()) seg.setEnabled(enabled.get())
def setIsModulated(s=self, n=segName):
modulated = s.getVariable('Sprite Renderer', n+' isModulated')
seg.setIsModulated(modulated.get())
def setSegBegin(time): def setSegBegin(time):
seg.setTimeBegin(time) seg.setTimeBegin(time)
def setSegEnd(time): def setSegEnd(time):
@ -2026,8 +2044,12 @@ class ParticlePanel(AppShell):
lFrame, 'Sprite Renderer', segName + ' Enabled', lFrame, 'Sprite Renderer', segName + ' Enabled',
('On: Enabled\n' + ('On: Enabled\n' +
'Off: Disabled'), 'Off: Disabled'),
command = setSegEnabled, initialState = 1) command = setSegEnabled, initialState = 1)
self.createCheckbutton(
lFrame, 'Sprite Renderer', segName + ' isModulated',
('On: Modulate\n' +
'Off: Add'),
command = setIsModulated, initialState = 1)
lFrame.pack(fill = X, expand = 1) lFrame.pack(fill = X, expand = 1)
f = Frame(frame) f = Frame(frame)
@ -2381,7 +2403,15 @@ class ParticlePanel(AppShell):
name = askstring('Particle Panel', 'Effect Name:', name = askstring('Particle Panel', 'Effect Name:',
parent = self.parent) parent = self.parent)
if name: if name:
effect = ParticleEffect.ParticleEffect(name) particles = Particles.Particles()
particles.setBirthRate(0.02)
particles.setLitterSize(10)
particles.setLitterSpread(0)
particles.setFactory("PointParticleFactory")
particles.setRenderer("PointParticleRenderer")
particles.setEmitter("SphereVolumeEmitter")
particles.enable()
effect = ParticleEffect.ParticleEffect(name, particles)
self.effectsDict[name] = effect self.effectsDict[name] = effect
self.updateMenusAndLabels() self.updateMenusAndLabels()
self.selectEffectNamed(name) self.selectEffectNamed(name)