seParticles.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. from pandac.PandaModules import *
  2. from direct.particles.ParticleManagerGlobal import *
  3. from direct.showbase.PhysicsManagerGlobal import *
  4. #Manakel 2/12/2005: replace from pandac import by from pandac.PandaModules import
  5. from pandac.PandaModules import ParticleSystem
  6. from pandac.PandaModules import BaseParticleFactory
  7. from pandac.PandaModules import PointParticleFactory
  8. from pandac.PandaModules import ZSpinParticleFactory
  9. #import OrientedParticleFactory
  10. from pandac.PandaModules import BaseParticleRenderer
  11. from pandac.PandaModules import PointParticleRenderer
  12. from pandac.PandaModules import LineParticleRenderer
  13. from pandac.PandaModules import GeomParticleRenderer
  14. from pandac.PandaModules import SparkleParticleRenderer
  15. from pandac.PandaModules import SpriteParticleRenderer
  16. from pandac.PandaModules import BaseParticleEmitter
  17. from pandac.PandaModules import BoxEmitter
  18. from pandac.PandaModules import DiscEmitter
  19. from pandac.PandaModules import LineEmitter
  20. from pandac.PandaModules import PointEmitter
  21. from pandac.PandaModules import RectangleEmitter
  22. from pandac.PandaModules import RingEmitter
  23. from pandac.PandaModules import SphereSurfaceEmitter
  24. from pandac.PandaModules import SphereVolumeEmitter
  25. from pandac.PandaModules import TangentRingEmitter
  26. import string
  27. import os
  28. from direct.directnotify import DirectNotifyGlobal
  29. import sys
  30. class Particles(ParticleSystem.ParticleSystem):
  31. notify = DirectNotifyGlobal.directNotify.newCategory('Particles')
  32. id = 1
  33. def __init__(self, name=None, poolSize=1024):
  34. """__init__(name, poolSize)"""
  35. if (name == None):
  36. self.name = 'particles-%d' % Particles.id
  37. Particles.id += 1
  38. else:
  39. self.name = name
  40. ParticleSystem.ParticleSystem.__init__(self, poolSize)
  41. # self.setBirthRate(0.02)
  42. # self.setLitterSize(10)
  43. # self.setLitterSpread(0)
  44. # Set up a physical node
  45. self.node = PhysicalNode(self.name)
  46. self.nodePath = NodePath(self.node)
  47. self.setRenderParent(self.node)
  48. self.node.addPhysical(self)
  49. self.factory = None
  50. self.factoryType = "undefined"
  51. # self.setFactory("PointParticleFactory")
  52. self.renderer = None
  53. self.rendererType = "undefined"
  54. # self.setRenderer("PointParticleRenderer")
  55. self.emitter = None
  56. self.emitterType = "undefined"
  57. # self.setEmitter("SphereVolumeEmitter")
  58. # Enable particles by default
  59. self.fEnabled = 0
  60. #self.enable()
  61. def cleanup(self):
  62. self.disable()
  63. self.clearLinearForces()
  64. self.clearAngularForces()
  65. self.setRenderParent(self.node)
  66. self.node.removePhysical(self)
  67. self.nodePath.removeNode()
  68. del self.node
  69. del self.nodePath
  70. del self.factory
  71. del self.renderer
  72. del self.emitter
  73. def enable(self):
  74. """enable()"""
  75. if (self.fEnabled == 0):
  76. physicsMgr.attachPhysical(self)
  77. particleMgr.attachParticlesystem(self)
  78. self.fEnabled = 1
  79. def disable(self):
  80. """disable()"""
  81. if (self.fEnabled == 1):
  82. physicsMgr.removePhysical(self)
  83. particleMgr.removeParticlesystem(self)
  84. self.fEnabled = 0
  85. def isEnabled(self):
  86. return self.fEnabled
  87. def getNode(self):
  88. return self.node
  89. def setFactory(self, type):
  90. """setFactory(type)"""
  91. if (self.factoryType == type):
  92. return None
  93. if (self.factory):
  94. self.factory = None
  95. self.factoryType = type
  96. if (type == "PointParticleFactory"):
  97. self.factory = PointParticleFactory.PointParticleFactory()
  98. elif (type == "ZSpinParticleFactory"):
  99. self.factory = ZSpinParticleFactory.ZSpinParticleFactory()
  100. elif (type == "OrientedParticleFactory"):
  101. self.factory = OrientedParticleFactory.OrientedParticleFactory()
  102. else:
  103. print "unknown factory type: %s" % type
  104. return None
  105. self.factory.setLifespanBase(0.5)
  106. ParticleSystem.ParticleSystem.setFactory(self, self.factory)
  107. def setRenderer(self, type):
  108. """setRenderer(type)"""
  109. if (self.rendererType == type):
  110. return None
  111. if (self.renderer):
  112. self.renderer = None
  113. self.rendererType = type
  114. if (type == "PointParticleRenderer"):
  115. self.renderer = PointParticleRenderer.PointParticleRenderer()
  116. self.renderer.setPointSize(1.0)
  117. elif (type == "LineParticleRenderer"):
  118. self.renderer = LineParticleRenderer.LineParticleRenderer()
  119. elif (type == "GeomParticleRenderer"):
  120. self.renderer = GeomParticleRenderer.GeomParticleRenderer()
  121. npath = NodePath('default-geom')
  122. # This was moved here because we do not want to download
  123. # the direct tools with toontown.
  124. from direct.directtools import DirectSelection
  125. bbox = DirectSelection.DirectBoundingBox(npath)
  126. self.renderer.setGeomNode(bbox.lines.node())
  127. elif (type == "SparkleParticleRenderer"):
  128. self.renderer = SparkleParticleRenderer.SparkleParticleRenderer()
  129. elif (type == "SpriteParticleRenderer"):
  130. self.renderer = SpriteParticleRenderer.SpriteParticleRenderer()
  131. if (self.renderer.getSourceType() ==
  132. SpriteParticleRenderer.SpriteParticleRenderer.STTexture):
  133. # Use current default texture
  134. # See sourceTextureName SpriteParticleRenderer-extensions.py
  135. self.renderer.setTextureFromFile()
  136. else:
  137. # Use current default model file and node
  138. # See sourceFileName and sourceNodeName in SpriteParticleRenderer-extensions.py
  139. self.renderer.setTextureFromNode()
  140. else:
  141. print "unknown renderer type: %s" % type
  142. return None
  143. ParticleSystem.ParticleSystem.setRenderer(self, self.renderer)
  144. def setEmitter(self, type):
  145. """setEmitter(type)"""
  146. if (self.emitterType == type):
  147. return None
  148. if (self.emitter):
  149. self.emitter = None
  150. self.emitterType = type
  151. if (type == "BoxEmitter"):
  152. self.emitter = BoxEmitter.BoxEmitter()
  153. elif (type == "DiscEmitter"):
  154. self.emitter = DiscEmitter.DiscEmitter()
  155. elif (type == "LineEmitter"):
  156. self.emitter = LineEmitter.LineEmitter()
  157. elif (type == "PointEmitter"):
  158. self.emitter = PointEmitter.PointEmitter()
  159. elif (type == "RectangleEmitter"):
  160. self.emitter = RectangleEmitter.RectangleEmitter()
  161. elif (type == "RingEmitter"):
  162. self.emitter = RingEmitter.RingEmitter()
  163. elif (type == "SphereSurfaceEmitter"):
  164. self.emitter = SphereSurfaceEmitter.SphereSurfaceEmitter()
  165. elif (type == "SphereVolumeEmitter"):
  166. self.emitter = SphereVolumeEmitter.SphereVolumeEmitter()
  167. self.emitter.setRadius(1.0)
  168. elif (type == "TangentRingEmitter"):
  169. self.emitter = TangentRingEmitter.TangentRingEmitter()
  170. else:
  171. print "unknown emitter type: %s" % type
  172. return None
  173. ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)
  174. def addForce(self, force):
  175. """addForce(force)"""
  176. if (force.isLinear()):
  177. self.addLinearForce(force)
  178. else:
  179. self.addAngularForce(force)
  180. def removeForce(self, force):
  181. """removeForce(force)"""
  182. if (force == None):
  183. self.notify.warning('removeForce() - force == None!')
  184. return
  185. if (force.isLinear()):
  186. self.removeLinearForce(force)
  187. else:
  188. self.removeAngularForce(force)
  189. def setRenderNodePath(self, nodePath):
  190. self.setRenderParent(nodePath.node())
  191. ## Getters ##
  192. def getName(self):
  193. """getName()"""
  194. return self.name
  195. def getFactory(self):
  196. """getFactory()"""
  197. return self.factory
  198. def getEmitter(self):
  199. """getEmitter()"""
  200. return self.emitter
  201. def getRenderer(self):
  202. """getRenderer()"""
  203. return self.renderer
  204. def printParams(self, file = sys.stdout, targ = 'self'):
  205. """printParams(file, targ)"""
  206. i1=" "
  207. i2=i1+i1
  208. file.write(i2+'# Particles parameters\n')
  209. file.write(i2+targ + '.setFactory(\"' + self.factoryType + '\")\n')
  210. file.write(i2+targ + '.setRenderer(\"' + self.rendererType + '\")\n')
  211. file.write(i2+targ + '.setEmitter(\"' + self.emitterType + '\")\n')
  212. # System parameters
  213. file.write(i2+targ + ('.setPoolSize(%d)\n' %
  214. int(self.getPoolSize())))
  215. file.write(i2+targ + ('.setBirthRate(%.4f)\n' %
  216. self.getBirthRate()))
  217. file.write(i2+targ + ('.setLitterSize(%d)\n' %
  218. int(self.getLitterSize())))
  219. file.write(i2+targ + ('.setLitterSpread(%d)\n' %
  220. self.getLitterSpread()))
  221. file.write(i2+targ + ('.setSystemLifespan(%.4f)\n' %
  222. self.getSystemLifespan()))
  223. file.write(i2+targ + ('.setLocalVelocityFlag(%d)\n' %
  224. self.getLocalVelocityFlag()))
  225. file.write(i2+targ + ('.setSystemGrowsOlderFlag(%d)\n' %
  226. self.getSystemGrowsOlderFlag()))
  227. file.write(i2+'# Factory parameters\n')
  228. file.write(i2+targ + ('.factory.setLifespanBase(%.4f)\n' %
  229. self.factory.getLifespanBase()))
  230. file.write(i2+targ + '.factory.setLifespanSpread(%.4f)\n' % \
  231. self.factory.getLifespanSpread())
  232. file.write(i2+targ + '.factory.setMassBase(%.4f)\n' % \
  233. self.factory.getMassBase())
  234. file.write(i2+targ + '.factory.setMassSpread(%.4f)\n' % \
  235. self.factory.getMassSpread())
  236. file.write(i2+targ + '.factory.setTerminalVelocityBase(%.4f)\n' % \
  237. self.factory.getTerminalVelocityBase())
  238. file.write(i2+targ + '.factory.setTerminalVelocitySpread(%.4f)\n' % \
  239. self.factory.getTerminalVelocitySpread())
  240. if (self.factoryType == "PointParticleFactory"):
  241. file.write(i2+'# Point factory parameters\n')
  242. elif (self.factoryType == "ZSpinParticleFactory"):
  243. file.write(i2+'# Z Spin factory parameters\n')
  244. file.write(i2+targ + '.factory.setInitialAngle(%.4f)\n' % \
  245. self.factory.getInitialAngle())
  246. file.write(i2+targ + '.factory.setInitialAngleSpread(%.4f)\n' % \
  247. self.factory.getInitialAngleSpread())
  248. file.write(i2+targ + '.factory.enableAngularVelocity(%d)\n' % \
  249. self.factory.getAngularVelocityEnabled())
  250. if(self.factory.getAngularVelocityEnabled()):
  251. file.write(i2+targ + '.factory.setAngularVelocity(%.4f)\n' % \
  252. self.factory.getAngularVelocity())
  253. file.write(i2+targ + '.factory.setAngularVelocitySpread(%.4f)\n' % \
  254. self.factory.getAngularVelocitySpread())
  255. else:
  256. file.write(i2+targ + '.factory.setFinalAngle(%.4f)\n' % \
  257. self.factory.getFinalAngle())
  258. file.write(i2+targ + '.factory.setFinalAngleSpread(%.4f)\n' % \
  259. self.factory.getFinalAngleSpread())
  260. elif (self.factoryType == "OrientedParticleFactory"):
  261. file.write(i2+'# Oriented factory parameters\n')
  262. file.write(i2+targ + '.factory.setInitialOrientation(%.4f)\n' % \
  263. self.factory.getInitialOrientation())
  264. file.write(i2+targ + '.factory.setFinalOrientation(%.4f)\n' % \
  265. self.factory.getFinalOrientation())
  266. file.write(i2+'# Renderer parameters\n')
  267. alphaMode = self.renderer.getAlphaMode()
  268. aMode = "PRALPHANONE"
  269. if (alphaMode == BaseParticleRenderer.BaseParticleRenderer.PRALPHANONE):
  270. aMode = "PRALPHANONE"
  271. elif (alphaMode ==
  272. BaseParticleRenderer.BaseParticleRenderer.PRALPHAOUT):
  273. aMode = "PRALPHAOUT"
  274. elif (alphaMode ==
  275. BaseParticleRenderer.BaseParticleRenderer.PRALPHAIN):
  276. aMode = "PRALPHAIN"
  277. elif (alphaMode ==
  278. BaseParticleRenderer.BaseParticleRenderer.PRALPHAUSER):
  279. aMode = "PRALPHAUSER"
  280. file.write(i2+targ + '.renderer.setAlphaMode(BaseParticleRenderer.' + aMode + ')\n')
  281. file.write(i2+targ + '.renderer.setUserAlpha(%.2f)\n' % \
  282. self.renderer.getUserAlpha())
  283. if (self.rendererType == "PointParticleRenderer"):
  284. file.write(i2+'# Point parameters\n')
  285. file.write(i2+targ + '.renderer.setPointSize(%.2f)\n' % \
  286. self.renderer.getPointSize())
  287. sColor = self.renderer.getStartColor()
  288. file.write(i2+(targ + '.renderer.setStartColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  289. sColor = self.renderer.getEndColor()
  290. file.write(i2+(targ + '.renderer.setEndColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  291. blendType = self.renderer.getBlendType()
  292. bType = "PPONECOLOR"
  293. if (blendType == PointParticleRenderer.PointParticleRenderer.PPONECOLOR):
  294. bType = "PPONECOLOR"
  295. elif (blendType == PointParticleRenderer.PointParticleRenderer.PPBLENDLIFE):
  296. bType = "PPBLENDLIFE"
  297. elif (blendType == PointParticleRenderer.PointParticleRenderer.PPBLENDVEL):
  298. bType = "PPBLENDVEL"
  299. file.write(i2+targ + '.renderer.setBlendType(PointParticleRenderer.' + bType + ')\n')
  300. blendMethod = self.renderer.getBlendMethod()
  301. bMethod = "PPNOBLEND"
  302. if (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPNOBLEND):
  303. bMethod = "PPNOBLEND"
  304. elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDLINEAR):
  305. bMethod = "PPBLENDLINEAR"
  306. elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
  307. bMethod = "PPBLENDCUBIC"
  308. file.write(i2+targ + '.renderer.setBlendMethod(BaseParticleRenderer.' + bMethod + ')\n')
  309. elif (self.rendererType == "LineParticleRenderer"):
  310. file.write(i2+'# Line parameters\n')
  311. sColor = self.renderer.getHeadColor()
  312. file.write(i2+(targ + '.renderer.setHeadColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  313. sColor = self.renderer.getTailColor()
  314. file.write(i2+(targ + '.renderer.setTailColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  315. elif (self.rendererType == "GeomParticleRenderer"):
  316. file.write(i2+'# Geom parameters\n')
  317. node = self.renderer.getGeomNode()
  318. file.write(i2+targ + '.renderer.setGeomNode(' + node.getName() + ')\n')
  319. elif (self.rendererType == "SparkleParticleRenderer"):
  320. file.write(i2+'# Sparkle parameters\n')
  321. sColor = self.renderer.getCenterColor()
  322. file.write(i2+(targ + '.renderer.setCenterColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  323. sColor = self.renderer.getEdgeColor()
  324. file.write(i2+(targ + '.renderer.setEdgeColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  325. file.write(i2+targ + '.renderer.setBirthRadius(%.4f)\n' % self.renderer.getBirthRadius())
  326. file.write(i2+targ + '.renderer.setDeathRadius(%.4f)\n' % self.renderer.getDeathRadius())
  327. lifeScale = self.renderer.getLifeScale()
  328. lScale = "SPNOSCALE"
  329. if (lifeScale == SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE):
  330. lScale = "SPSCALE"
  331. file.write(i2+targ + '.renderer.setLifeScale(SparkleParticleRenderer.' + lScale + ')\n')
  332. elif (self.rendererType == "SpriteParticleRenderer"):
  333. file.write(i2+'# Sprite parameters\n')
  334. if (self.renderer.getSourceType() ==
  335. SpriteParticleRenderer.SpriteParticleRenderer.STTexture):
  336. tex = self.renderer.getTexture()
  337. file.write(i2+targ + '.renderer.setTexture(loader.loadTexture(\'' + tex.getFilename().getFullpath() + '\'))\n')
  338. else:
  339. modelName = self.renderer.getSourceFileName()
  340. nodeName = self.renderer.getSourceNodeName()
  341. file.write(i2+targ + '.renderer.setTextureFromNode("%s", "%s")\n' % (modelName, nodeName))
  342. sColor = self.renderer.getColor()
  343. file.write(i2+(targ + '.renderer.setColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
  344. file.write(i2+targ + '.renderer.setXScaleFlag(%d)\n' % self.renderer.getXScaleFlag())
  345. file.write(i2+targ + '.renderer.setYScaleFlag(%d)\n' % self.renderer.getYScaleFlag())
  346. file.write(i2+targ + '.renderer.setAnimAngleFlag(%d)\n' % self.renderer.getAnimAngleFlag())
  347. file.write(i2+targ + '.renderer.setInitialXScale(%.4f)\n' % self.renderer.getInitialXScale())
  348. file.write(i2+targ + '.renderer.setFinalXScale(%.4f)\n' % self.renderer.getFinalXScale())
  349. file.write(i2+targ + '.renderer.setInitialYScale(%.4f)\n' % self.renderer.getInitialYScale())
  350. file.write(i2+targ + '.renderer.setFinalYScale(%.4f)\n' % self.renderer.getFinalYScale())
  351. file.write(i2+targ + '.renderer.setNonanimatedTheta(%.4f)\n' % self.renderer.getNonanimatedTheta())
  352. blendMethod = self.renderer.getAlphaBlendMethod()
  353. bMethod = "PPNOBLEND"
  354. if (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPNOBLEND):
  355. bMethod = "PPNOBLEND"
  356. elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDLINEAR):
  357. bMethod = "PPBLENDLINEAR"
  358. elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
  359. bMethod = "PPBLENDCUBIC"
  360. file.write(i2+targ + '.renderer.setAlphaBlendMethod(BaseParticleRenderer.' + bMethod + ')\n')
  361. file.write(i2+targ + '.renderer.setAlphaDisable(%d)\n' % self.renderer.getAlphaDisable())
  362. file.write(i2+'# Emitter parameters\n')
  363. emissionType = self.emitter.getEmissionType()
  364. eType = "ETEXPLICIT"
  365. if (emissionType == BaseParticleEmitter.BaseParticleEmitter.ETEXPLICIT):
  366. eType = "ETEXPLICIT"
  367. elif (emissionType == BaseParticleEmitter.BaseParticleEmitter.ETRADIATE):
  368. eType = "ETRADIATE"
  369. elif (emissionType == BaseParticleEmitter.BaseParticleEmitter.ETCUSTOM):
  370. eType = "ETCUSTOM"
  371. file.write(i2+targ + '.emitter.setEmissionType(BaseParticleEmitter.' + eType + ')\n')
  372. file.write(i2+targ + '.emitter.setAmplitude(%.4f)\n' % self.emitter.getAmplitude())
  373. file.write(i2+targ + '.emitter.setAmplitudeSpread(%.4f)\n' % self.emitter.getAmplitudeSpread())
  374. oForce = self.emitter.getOffsetForce()
  375. file.write(i2+(targ + '.emitter.setOffsetForce(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
  376. oForce = self.emitter.getExplicitLaunchVector()
  377. file.write(i2+(targ + '.emitter.setExplicitLaunchVector(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
  378. orig = self.emitter.getRadiateOrigin()
  379. file.write(i2+(targ + '.emitter.setRadiateOrigin(Point3(%.4f, %.4f, %.4f))\n' % (orig[0], orig[1], orig[2])))
  380. if (self.emitterType == "BoxEmitter"):
  381. file.write(i2+'# Box parameters\n')
  382. bound = self.emitter.getMinBound()
  383. file.write(i2+(targ + '.emitter.setMinBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
  384. bound = self.emitter.getMaxBound()
  385. file.write(i2+(targ + '.emitter.setMaxBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
  386. elif (self.emitterType == "DiscEmitter"):
  387. file.write(i2+'# Disc parameters\n')
  388. file.write(i2+targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
  389. if (eType == "ETCUSTOM"):
  390. file.write(i2+targ + '.emitter.setOuterAngle(%.4f)\n' % self.emitter.getOuterAngle())
  391. file.write(i2+targ + '.emitter.setInnerAngle(%.4f)\n' % self.emitter.getInnerAngle())
  392. file.write(i2+targ + '.emitter.setOuterMagnitude(%.4f)\n' % self.emitter.getOuterMagnitude())
  393. file.write(i2+targ + '.emitter.setInnerMagnitude(%.4f)\n' % self.emitter.getInnerMagnitude())
  394. file.write(i2+targ + '.emitter.setCubicLerping(%d)\n' % self.emitter.getCubicLerping())
  395. elif (self.emitterType == "LineEmitter"):
  396. file.write(i2+'# Line parameters\n')
  397. point = self.emitter.getEndpoint1()
  398. file.write(i2+(targ + '.emitter.setEndpoint1(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
  399. point = self.emitter.getEndpoint2()
  400. file.write(i2+(targ + '.emitter.setEndpoint2(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
  401. elif (self.emitterType == "PointEmitter"):
  402. file.write(i2+'# Point parameters\n')
  403. point = self.emitter.getLocation()
  404. file.write(i2+(targ + '.emitter.setLocation(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
  405. elif (self.emitterType == "RectangleEmitter"):
  406. file.write(i2+'# Rectangle parameters\n')
  407. point = self.emitter.getMinBound()
  408. file.write(i2+(targ + '.emitter.setMinBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
  409. point = self.emitter.getMaxBound()
  410. file.write(i2+(targ + '.emitter.setMaxBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
  411. elif (self.emitterType == "RingEmitter"):
  412. file.write(i2+'# Ring parameters\n')
  413. file.write(i2+targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
  414. if (eType == "ETCUSTOM"):
  415. file.write(i2+targ + '.emitter.setAngle(%.4f)\n' % self.emitter.getAngle())
  416. elif (self.emitterType == "SphereSurfaceEmitter"):
  417. file.write(i2+'# Sphere Surface parameters\n')
  418. file.write(i2+targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
  419. elif (self.emitterType == "SphereVolumeEmitter"):
  420. file.write(i2+'# Sphere Volume parameters\n')
  421. file.write(i2+targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
  422. elif (self.emitterType == "TangentRingEmitter"):
  423. file.write(i2+'# Tangent Ring parameters\n')
  424. file.write(i2+targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())