mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
*** empty log message ***
This commit is contained in:
parent
9b7ef10fb9
commit
b827edb766
@ -99,11 +99,11 @@ class ForceGroup(DirectObject):
|
|||||||
radius = f.getRadius()
|
radius = f.getRadius()
|
||||||
falloffType = f.getFalloffType()
|
falloffType = f.getFalloffType()
|
||||||
ftype = 'FTONEOVERR'
|
ftype = 'FTONEOVERR'
|
||||||
if (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERR):
|
if (falloffType == LinearDistanceForce.FTONEOVERR):
|
||||||
ftype = 'FTONEOVERR'
|
ftype = 'FTONEOVERR'
|
||||||
elif (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERRSQUARED):
|
elif (falloffType == LinearDistanceForce.FTONEOVERRSQUARED):
|
||||||
ftype = 'FTONEOVERRSQUARED'
|
ftype = 'FTONEOVERRSQUARED'
|
||||||
elif (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERRCUBED):
|
elif (falloffType == LinearDistanceForce.FTONEOVERRCUBED):
|
||||||
ftype = 'FTONEOVERRCUBED'
|
ftype = 'FTONEOVERRCUBED'
|
||||||
forceCenter = f.getForceCenter()
|
forceCenter = f.getForceCenter()
|
||||||
if isinstance(f, LinearSinkForce):
|
if isinstance(f, LinearSinkForce):
|
||||||
@ -117,7 +117,7 @@ class ForceGroup(DirectObject):
|
|||||||
elif isinstance(f, LinearNoiseForce):
|
elif isinstance(f, LinearNoiseForce):
|
||||||
file.write(fname + ' = LinearNoiseForce(%.4f, %d)\n' % (amplitude, massDependent))
|
file.write(fname + ' = LinearNoiseForce(%.4f, %d)\n' % (amplitude, massDependent))
|
||||||
elif isinstance(f, LinearVectorForce):
|
elif isinstance(f, LinearVectorForce):
|
||||||
vec = f.getLocalVector()
|
vec = f.getVector()
|
||||||
file.write(fname + ' = LinearVectorForce(Vec3(%.4f, %.4f, %.4f), %.4f, %d)\n' % (vec[0], vec[1], vec[2], amplitude, massDependent))
|
file.write(fname + ' = LinearVectorForce(Vec3(%.4f, %.4f, %.4f), %.4f, %d)\n' % (vec[0], vec[1], vec[2], amplitude, massDependent))
|
||||||
elif isinstance(f, AngularForce):
|
elif isinstance(f, AngularForce):
|
||||||
if isinstance(f, AngularVectorForce):
|
if isinstance(f, AngularVectorForce):
|
||||||
|
@ -119,6 +119,20 @@ class ParticlePanel(AppShell):
|
|||||||
'Select effect to configure or create new effect')
|
'Select effect to configure or create new effect')
|
||||||
self.effectsLabelMenu.add_command(label = 'Create New Effect',
|
self.effectsLabelMenu.add_command(label = 'Create New Effect',
|
||||||
command = self.createNewEffect)
|
command = self.createNewEffect)
|
||||||
|
self.effectsLabelMenu.add_command(
|
||||||
|
label = 'Select Particle Effect',
|
||||||
|
command = lambda s = self: direct.select(s.particleEffect))
|
||||||
|
self.effectsLabelMenu.add_command(
|
||||||
|
label = 'Place Particle Effect',
|
||||||
|
command = lambda s = self: Placer.place(s.particleEffect))
|
||||||
|
def togglePEVis(s = self):
|
||||||
|
if s.particleEffect.isHidden():
|
||||||
|
s.particleEffect.show()
|
||||||
|
else:
|
||||||
|
s.particleEffect.hide()
|
||||||
|
self.effectsLabelMenu.add_command(
|
||||||
|
label = 'Toggle Effect Vis',
|
||||||
|
command = togglePEVis)
|
||||||
self.effectsEnableMenu = Menu(self.effectsLabelMenu, tearoff = 0)
|
self.effectsEnableMenu = Menu(self.effectsLabelMenu, tearoff = 0)
|
||||||
self.effectsLabelMenu.add_cascade(label = 'Enable/Disable',
|
self.effectsLabelMenu.add_cascade(label = 'Enable/Disable',
|
||||||
menu = self.effectsEnableMenu)
|
menu = self.effectsEnableMenu)
|
||||||
@ -242,7 +256,7 @@ class ParticlePanel(AppShell):
|
|||||||
('Factory', 'Mass',
|
('Factory', 'Mass',
|
||||||
'Average particle mass',
|
'Average particle mass',
|
||||||
self.setFactoryParticleMass,
|
self.setFactoryParticleMass,
|
||||||
0.0, None),
|
0.001, None),
|
||||||
('Factory', 'Mass Spread',
|
('Factory', 'Mass Spread',
|
||||||
'Variation in particle mass',
|
'Variation in particle mass',
|
||||||
self.setFactoryParticleMassSpread,
|
self.setFactoryParticleMassSpread,
|
||||||
@ -625,8 +639,12 @@ class ParticlePanel(AppShell):
|
|||||||
|
|
||||||
self.addForceButton.pack(expand = 0)
|
self.addForceButton.pack(expand = 0)
|
||||||
|
|
||||||
|
# Scrolled frame to hold force widgets
|
||||||
|
self.sf = Pmw.ScrolledFrame(forcePage, horizflex = 'elastic')
|
||||||
|
self.sf.pack(fill = 'both', expand = 1)
|
||||||
|
self.forceFrame = self.sf.interior()
|
||||||
# Notebook to hold force widgets as the are added
|
# Notebook to hold force widgets as the are added
|
||||||
self.forceGroupNotebook = Pmw.NoteBook(forcePage, tabpos = None)
|
self.forceGroupNotebook = Pmw.NoteBook(self.forceFrame, tabpos = None)
|
||||||
self.forceGroupNotebook.pack(fill = X)
|
self.forceGroupNotebook.pack(fill = X)
|
||||||
|
|
||||||
self.factoryNotebook.setnaturalsize()
|
self.factoryNotebook.setnaturalsize()
|
||||||
@ -679,10 +697,6 @@ class ParticlePanel(AppShell):
|
|||||||
maxVelocity = 10.0, **kw):
|
maxVelocity = 10.0, **kw):
|
||||||
kw['text'] = text
|
kw['text'] = text
|
||||||
kw['min'] = min
|
kw['min'] = min
|
||||||
if min != None:
|
|
||||||
kw['initialValue'] = min
|
|
||||||
else:
|
|
||||||
kw['initialValue'] = 0.0
|
|
||||||
kw['maxVelocity'] = maxVelocity
|
kw['maxVelocity'] = maxVelocity
|
||||||
kw['resolution'] = resolution
|
kw['resolution'] = resolution
|
||||||
widget = apply(Floater.Floater, (parent,), kw)
|
widget = apply(Floater.Floater, (parent,), kw)
|
||||||
@ -710,7 +724,6 @@ class ParticlePanel(AppShell):
|
|||||||
kw['text'] = text
|
kw['text'] = text
|
||||||
kw['min'] = min
|
kw['min'] = min
|
||||||
kw['max'] = max
|
kw['max'] = max
|
||||||
kw['initialValue'] = min
|
|
||||||
kw['resolution'] = resolution
|
kw['resolution'] = resolution
|
||||||
widget = apply(EntryScale.EntryScale, (parent,), kw)
|
widget = apply(EntryScale.EntryScale, (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
|
||||||
@ -817,7 +830,7 @@ class ParticlePanel(AppShell):
|
|||||||
def updateEffectsMenus(self):
|
def updateEffectsMenus(self):
|
||||||
# Get rid of old effects entries if any
|
# Get rid of old effects entries if any
|
||||||
self.effectsEnableMenu.delete(0, 'end')
|
self.effectsEnableMenu.delete(0, 'end')
|
||||||
self.effectsLabelMenu.delete(2, 'end')
|
self.effectsLabelMenu.delete(5, 'end')
|
||||||
self.effectsLabelMenu.add_separator()
|
self.effectsLabelMenu.add_separator()
|
||||||
# Add in a checkbutton for each effect (to toggle on/off)
|
# Add in a checkbutton for each effect (to toggle on/off)
|
||||||
keys = self.effectsDict.keys()
|
keys = self.effectsDict.keys()
|
||||||
@ -963,6 +976,7 @@ class ParticlePanel(AppShell):
|
|||||||
parent = self.parent)
|
parent = self.parent)
|
||||||
if particleFilename:
|
if particleFilename:
|
||||||
self.particleEffect.loadConfig(Filename(particleFilename))
|
self.particleEffect.loadConfig(Filename(particleFilename))
|
||||||
|
self.selectEffectNamed(self.particleEffect.getName())
|
||||||
|
|
||||||
def saveParticleEffectToFile(self):
|
def saveParticleEffectToFile(self):
|
||||||
# Find path to particle directory
|
# Find path to particle directory
|
||||||
@ -1532,7 +1546,12 @@ class ParticlePanel(AppShell):
|
|||||||
self.forceGroupNotebook.pack(fill = X)
|
self.forceGroupNotebook.pack(fill = X)
|
||||||
self.forcePageName = (self.particleEffect.getName() + '-' +
|
self.forcePageName = (self.particleEffect.getName() + '-' +
|
||||||
self.forceGroup.getName())
|
self.forceGroup.getName())
|
||||||
self.forcePage = self.forcePagesDict[self.forcePageName]
|
self.forcePage = self.forcePagesDict.get(
|
||||||
|
self.forcePageName, None)
|
||||||
|
# Page doesn't exist, add it
|
||||||
|
if self.forcePage == None:
|
||||||
|
self.addForceGroupNotebookPage(
|
||||||
|
self.particleEffect, self.forceGroup)
|
||||||
self.forceGroupNotebook.selectpage(self.forcePageName)
|
self.forceGroupNotebook.selectpage(self.forcePageName)
|
||||||
else:
|
else:
|
||||||
self.forceGroupNotebook.pack_forget()
|
self.forceGroupNotebook.pack_forget()
|
||||||
@ -1635,6 +1654,23 @@ class ParticlePanel(AppShell):
|
|||||||
pass
|
pass
|
||||||
self.forceGroupNotebook.setnaturalsize()
|
self.forceGroupNotebook.setnaturalsize()
|
||||||
|
|
||||||
|
def createForceFrame(self, forcePage, forceName, force):
|
||||||
|
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
||||||
|
lFrame = Frame(frame, relief = FLAT)
|
||||||
|
def removeForce(s = self, f = force, fr = frame):
|
||||||
|
s.forceGroup.removeForce(f)
|
||||||
|
fr.pack_forget()
|
||||||
|
b = Button(lFrame, text = 'X',
|
||||||
|
command = removeForce)
|
||||||
|
b.pack(side = 'right', expand = 0)
|
||||||
|
Label(lFrame, text = forceName,
|
||||||
|
foreground = 'Blue',
|
||||||
|
font=('MSSansSerif', 12, 'bold'),
|
||||||
|
).pack(expand = 1, fill = 'x')
|
||||||
|
lFrame.pack(fill = 'x', expand =1)
|
||||||
|
frame.pack(pady = 3, fill = 'x', expand =0)
|
||||||
|
return frame
|
||||||
|
|
||||||
def createLinearForceWidgets(self, frame, pageName, forceName, force):
|
def createLinearForceWidgets(self, frame, pageName, forceName, force):
|
||||||
def setAmplitude(amp, f = force):
|
def setAmplitude(amp, f = force):
|
||||||
f.setAmplitude(amp)
|
f.setAmplitude(amp)
|
||||||
@ -1648,12 +1684,14 @@ class ParticlePanel(AppShell):
|
|||||||
f.setVectorMasks(xMask, yMask, zMask)
|
f.setVectorMasks(xMask, yMask, zMask)
|
||||||
self.createFloater(frame, pageName, forceName + ' Amplitude',
|
self.createFloater(frame, pageName, forceName + ' Amplitude',
|
||||||
'Force amplitude multiplier',
|
'Force amplitude multiplier',
|
||||||
command = setAmplitude)
|
command = setAmplitude,
|
||||||
|
initialValue = force.getAmplitude())
|
||||||
cbf = Frame(frame, relief = FLAT)
|
cbf = Frame(frame, relief = FLAT)
|
||||||
self.createCheckbutton(cbf, pageName, forceName + ' Mass Dependent',
|
self.createCheckbutton(cbf, pageName, forceName + ' Mass Dependent',
|
||||||
('On: force depends on mass; ' +
|
('On: force depends on mass; ' +
|
||||||
'Off: force does not depend on mass'),
|
'Off: force does not depend on mass'),
|
||||||
toggleMassDependent, 0)
|
toggleMassDependent,
|
||||||
|
force.getMassDependent())
|
||||||
self.createCheckbutton(cbf, pageName, forceName + ' Mask X',
|
self.createCheckbutton(cbf, pageName, forceName + ' Mask X',
|
||||||
'On: enable force along X axis',
|
'On: enable force along X axis',
|
||||||
setVectorMasks, 1)
|
setVectorMasks, 1)
|
||||||
@ -1678,34 +1716,34 @@ class ParticlePanel(AppShell):
|
|||||||
def setVec(vec, f = force):
|
def setVec(vec, f = force):
|
||||||
f.setVector(vec[0], vec[1], vec[2])
|
f.setVector(vec[0], vec[1], vec[2])
|
||||||
forceName = 'Vector Force-' + `count`
|
forceName = 'Vector Force-' + `count`
|
||||||
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
frame = self.createForceFrame(forcePage, forceName, force)
|
||||||
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
||||||
|
vec = force.getVector()
|
||||||
self.createVector3Entry(frame, pageName, forceName,
|
self.createVector3Entry(frame, pageName, forceName,
|
||||||
'Set force direction and magnitude',
|
'Set force direction and magnitude',
|
||||||
command = setVec)
|
command = setVec,
|
||||||
|
initialValue = [vec[0], vec[1], vec[2]])
|
||||||
self.createForceActiveWidget(frame, pageName, forceName, force)
|
self.createForceActiveWidget(frame, pageName, forceName, force)
|
||||||
frame.pack(fill = 'x', expand =0)
|
|
||||||
|
|
||||||
def createLinearRandomForceWidget(self, forcePage, pageName, count,
|
def createLinearRandomForceWidget(self, forcePage, pageName, count,
|
||||||
force, type):
|
force, type):
|
||||||
forceName = type + ' Force-' + `count`
|
forceName = type + ' Force-' + `count`
|
||||||
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
frame = self.createForceFrame(forcePage, forceName, force)
|
||||||
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
||||||
self.createForceActiveWidget(frame, pageName, forceName, force)
|
self.createForceActiveWidget(frame, pageName, forceName, force)
|
||||||
frame.pack(fill = 'x', expand =0)
|
|
||||||
|
|
||||||
def createLinearFrictionForceWidget(self, forcePage, pageName,
|
def createLinearFrictionForceWidget(self, forcePage, pageName,
|
||||||
count, force):
|
count, force):
|
||||||
def setCoef(coef, f = force):
|
def setCoef(coef, f = force):
|
||||||
f.setCoef(coef)
|
f.setCoef(coef)
|
||||||
forceName = 'Friction Force-' + `count`
|
forceName = 'Friction Force-' + `count`
|
||||||
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
frame = self.createForceFrame(forcePage, forceName, force)
|
||||||
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
||||||
self.createFloater(frame, pageName, forceName,
|
self.createFloater(frame, pageName, forceName + ' Coef',
|
||||||
'Set linear friction force',
|
'Set linear friction force',
|
||||||
command = setCoef, min = None)
|
command = setCoef, min = None,
|
||||||
|
initialValue = force.getCoef())
|
||||||
self.createForceActiveWidget(frame, pageName, forceName, force)
|
self.createForceActiveWidget(frame, pageName, forceName, force)
|
||||||
frame.pack(fill = 'x', expand =0)
|
|
||||||
|
|
||||||
def createLinearCylinderVortexForceWidget(self, forcePage, pageName,
|
def createLinearCylinderVortexForceWidget(self, forcePage, pageName,
|
||||||
count, force):
|
count, force):
|
||||||
@ -1716,19 +1754,21 @@ class ParticlePanel(AppShell):
|
|||||||
f.setLength(length)
|
f.setLength(length)
|
||||||
def setRadius(radius, f = force):
|
def setRadius(radius, f = force):
|
||||||
f.setRadius(radius)
|
f.setRadius(radius)
|
||||||
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
frame = self.createForceFrame(forcePage, forceName, force)
|
||||||
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
||||||
self.createFloater(frame, pageName, 'Coefficient',
|
self.createFloater(frame, pageName, forceName + ' Coef',
|
||||||
'Set linear cylinder vortex coefficient',
|
'Set linear cylinder vortex coefficient',
|
||||||
command = setCoef)
|
command = setCoef,
|
||||||
self.createFloater(frame, pageName, 'Length',
|
initialValue = force.getCoef())
|
||||||
|
self.createFloater(frame, pageName, forceName + ' Length',
|
||||||
'Set linear cylinder vortex length',
|
'Set linear cylinder vortex length',
|
||||||
command = setLength)
|
command = setLength,
|
||||||
self.createFloater(frame, pageName, 'Radius',
|
initialValue = force.getLength())
|
||||||
|
self.createFloater(frame, pageName, forceName + ' Radius',
|
||||||
'Set linear cylinder vortex radius',
|
'Set linear cylinder vortex radius',
|
||||||
command = setRadius)
|
command = setRadius,
|
||||||
|
initialValue = force.getRadius())
|
||||||
self.createForceActiveWidget(frame, pageName, forceName, force)
|
self.createForceActiveWidget(frame, pageName, forceName, force)
|
||||||
frame.pack(fill = 'x', expand =0)
|
|
||||||
|
|
||||||
def createLinearDistanceForceWidget(self, forcePage, pageName,
|
def createLinearDistanceForceWidget(self, forcePage, pageName,
|
||||||
count, force, type):
|
count, force, type):
|
||||||
@ -1747,22 +1787,36 @@ class ParticlePanel(AppShell):
|
|||||||
def setRadius(radius, f = force):
|
def setRadius(radius, f = force):
|
||||||
f.setRadius(radius)
|
f.setRadius(radius)
|
||||||
forceName = type + ' Force-' + `count`
|
forceName = type + ' Force-' + `count`
|
||||||
frame = Frame(forcePage, relief = RAISED, borderwidth = 2)
|
frame = self.createForceFrame(forcePage, forceName, force)
|
||||||
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
self.createLinearForceWidgets(frame, pageName, forceName, force)
|
||||||
self.createOptionMenu(frame, pageName, forceName + ' Falloff Type',
|
var = self.createOptionMenu(
|
||||||
'Set force falloff type',
|
frame, pageName, forceName + ' Falloff',
|
||||||
('FT_ONE_OVER_R',
|
'Set force falloff type',
|
||||||
'FT_ONE_OVER_R_SQUARED',
|
('FT_ONE_OVER_R',
|
||||||
'FT_ONE_OVER_R_CUBED'),
|
'FT_ONE_OVER_R_SQUARED',
|
||||||
command = setFalloffType)
|
'FT_ONE_OVER_R_CUBED'),
|
||||||
self.createVector3Entry(frame, pageName, forceName + ' Force Center',
|
command = setFalloffType)
|
||||||
|
self.getWidget(pageName, forceName + ' Falloff').configure(
|
||||||
|
label_width = 16)
|
||||||
|
falloff = force.getFalloffType()
|
||||||
|
if falloff == LinearDistanceForce.FTONEOVERR:
|
||||||
|
var.set('FT_ONE_OVER_R')
|
||||||
|
elif falloff == LinearDistanceForce.FTONEOVERRSQUARED:
|
||||||
|
var.set('FT_ONE_OVER_R_SQUARED')
|
||||||
|
elif falloff == LinearDistanceForce.FTONEOVERRCUBED:
|
||||||
|
var.set('FT_ONE_OVER_R_CUBED')
|
||||||
|
vec = force.getForceCenter()
|
||||||
|
self.createVector3Entry(frame, pageName, forceName + ' Center',
|
||||||
'Set center of force',
|
'Set center of force',
|
||||||
command = setForceCenter)
|
command = setForceCenter,
|
||||||
|
label_width = 16,
|
||||||
|
initialValue = [vec[0], vec[1], vec[2]])
|
||||||
self.createFloater(frame, pageName, forceName + ' Radius',
|
self.createFloater(frame, pageName, forceName + ' Radius',
|
||||||
'Set falloff radius',
|
'Set falloff radius',
|
||||||
command = setRadius)
|
command = setRadius,
|
||||||
|
min = 0.01,
|
||||||
|
initialValue = force.getRadius())
|
||||||
self.createForceActiveWidget(frame, pageName, forceName, force)
|
self.createForceActiveWidget(frame, pageName, forceName, force)
|
||||||
frame.pack(fill = 'x', expand =0)
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ class Floater(Pmw.MegaWidget):
|
|||||||
text = self['text'],
|
text = self['text'],
|
||||||
width = 12,
|
width = 12,
|
||||||
anchor = 'center',
|
anchor = 'center',
|
||||||
font = "Arial 12 bold")
|
font = "Arial 10 bold")
|
||||||
self.label.pack(side='left', expand = 1, fill = 'x')
|
self.label.pack(side='left', expand = 1, fill = 'x')
|
||||||
|
|
||||||
# Now pack the frame
|
# Now pack the frame
|
||||||
|
Loading…
x
Reference in New Issue
Block a user