[Script] Un foam script à tester ...

Les scripts sous RealFlow, si pratiquent, mais pas forcement simples
Tous réunis ici !

[Script] Un foam script à tester ...

Messagepar vbk!!! » 02 Sep 2010, 15:57

... encore un de direz-vous.
Voilà comment se présente la chose.
C' est une honteuse compil' de tutor que j'ai lu sur un numéro de l'excellent RFMag http://rf-magazine.com/index.html
Image

L'interface permet de choisir quels emitters seront utilisés par le script
Elle permet d'utiliser des objets pour contrôler la plupart des valeurs.
Le contrôle s'effectue sur le paramètre de position Y de l'objet choisi et permet ainsi de faire évoluer dans le temps les variable du script qui sont habituellement fixes.

Le script peut faire planter RF si les nodes sont trifouillés ( dupliqués, effacés, renommés ... ) après une 1ere utilisation.
Le script ne retient rien et vous devrez recommencer vos choix à chaque essai sauf si vous écrivez le numéro de liste (de 0 à X) que chaque entrée de formulaire doit employer.
Par exemple sur l'image, le "Velocity Threshold" sera contrôler par le paramètre de position Y du Null "Cv", numéro de liste 6.

J'essaierai de le faire évoluer pour qu'il retienne les données entrées par l' utilisateur si je peux.

Code : Tout sélectionner
#--------------------------------------------------
# Function: onSimulationBegin
#--------------------------------------------------

def onSimulationBegin():

   global seuilPres
   global seuilVel
   global ageLimit
   global heightLimit
   global vRandom
   global getWater
   global getFoam
   global getCp
   global getCa
   global getCh
   global getCv

   nodes = scene.getNodes()
   eList = []
   cList = []

   for node in nodes :
      if (node.getType() == TYPE_PB_EMITTER):
         eList.append(node.name)
      if (node.getType() == TYPE_OBJECT):
         cList.append(node.name)

#--------------------------------------------------
# Vous pouvez entrer les numéro de liste si dessous, par défaut tous à 0
#--------------------------------------------------

   form = GUIFormDialog.new()
   form.addListField("Water Emitter", eList, 0)
   form.addListField("Foam Emitter", eList, 0)
   form.addListField("Velocity Threshold", cList,0)
   form.addListField("Pressure Threshold (*1000)", cList, 0)
   form.addListField("Foam Age Limit", cList, 0)
   form.addFloatField("Random  Age", 0.2)
   form.addListField("Height Limit", cList, 0)

   if (form.show() == GUI_DIALOG_ACCEPTED):
      waterN =form.getFieldValue("Water Emitter")
      foamN = form.getFieldValue("Foam Emitter")
      seuilPresN = form.getFieldValue("Pressure Threshold (*1000)")
      seuilVelN = form.getFieldValue("Velocity Threshold")
      ageLimitN = form.getFieldValue("Foam Age Limit")
      vRandom = form.getFieldValue("Random  Age")
      heightLimitN = form.getFieldValue("Height Limit")

   getWater = eList[waterN]
   getFoam = eList[foamN]
   getCp = cList[seuilPresN]
   getCa = cList[ageLimitN]
   getCh = cList[heightLimitN]
   getCv = cList[seuilVelN]
#--------------------------------------------------
# Function: onSimulationStep
#--------------------------------------------------

def onSimulationStep():

   import random

   water = scene.getEmitter(getWater)
   foam = scene.getEmitter(getFoam)

   cp = scene.getObject(getCp)
   ca = scene.getObject(getCa)
   ch = scene.getObject(getCh)
   cv = scene.getObject(getCv)
   posCp = cp.getParameter("Position")
   posCa = ca.getParameter("Position")
   posCh = ch.getParameter("Position")
   posCv = cv.getParameter("Position")

   seuilPres = posCp.getY() * 1000
   ageLimit = posCa.getY()
   heightLimit = posCh.getY()
   randomAge = random.uniform( (-1*vRandom),vRandom)
   seuilVel = posCv.getY()

   particleWater = water.getFirstParticle()
   while (particleWater):
      velWater = particleWater.getVelocity()
      velMagWater = velWater.module()
      posWater = particleWater.getPosition()
      idWater = particleWater.getId()
      presWater = particleWater.getPressure()

      if (posWater.y > heightLimit):
         if (presWater > seuilPres):
            foam.addParticle(posWater,velWater)
            water.removeParticle(idWater)
         if (velMagWater > (seuilVel + randomAge)):
            foam.addParticle(posWater,velWater)
            water.removeParticle(idWater)
      
      particleWater = particleWater.getNextParticle()


   particleFoam = foam.getFirstParticle()
   while (particleFoam):
      currentAge = particleFoam.getAge()
      seuilAge = randomAge + ageLimit
      presFoam = particleFoam.getPressure()
      velFoam = particleFoam.getVelocity()
      velMagFoam = velFoam.module()
      posFoam = particleFoam.getPosition()
      idFoam = particleFoam.getId()

      if (currentAge >= seuilAge):
         if (velMagFoam < seuilVel):
            water.addParticle(posFoam,velFoam)
            foam.removeParticle(idFoam)

      particleFoam = particleFoam.getNextParticle()


#--------------------------------------------------
# Function: onSimulationFrame
#--------------------------------------------------

def onSimulationFrame():
   pass




#--------------------------------------------------
# Function: onSimulationEnd
#--------------------------------------------------

def onSimulationEnd():
   pass




#--------------------------------------------------
# Function: onChangeToFrame
#--------------------------------------------------

def onChangeToFrame():
   pass



Merci pour vos feedback.
J'espère que vous trouverez cette méthode un brin utile.
vbk!!!
 
Message(s) : 40
Inscrit le : 09 Mai 2008, 13:29

Re: [Script] Un foam script à tester ...

Messagepar verbalinsurection » 02 Sep 2010, 16:11

Très bien ça ! Je test dès que je peux, ça tombe, j'ai envie d'un p'tite bière ;)
Avatar de l’utilisateur
verbalinsurection
Administrateur du site
 
Message(s) : 1006
Inscrit le : 28 Mars 2008, 22:10
Localisation : Paris

Re: [Script] Un foam script à tester ...

Messagepar vbk!!! » 03 Sep 2010, 15:53

hmm ...
j'ai un soucis majeur avec ce foutu script.
Le GUI fait planter realflow quant il est lancé via commande avec le flag -nogui.
Ca, ca le fait pas du tout du tout ... :(
vbk!!!
 
Message(s) : 40
Inscrit le : 09 Mai 2008, 13:29

Re: [Script] Un foam script à tester ...

Messagepar verbalinsurection » 03 Sep 2010, 16:12

forcement... :(
je pense qu'il doit bien y avoir moyen de récup les paramètres passé au lancement de l'exe dans ton code ;)
Avatar de l’utilisateur
verbalinsurection
Administrateur du site
 
Message(s) : 1006
Inscrit le : 28 Mars 2008, 22:10
Localisation : Paris

Re: [Script] Un foam script à tester ...

Messagepar vbk!!! » 03 Sep 2010, 16:54

hmmm ... il ya ptet bien une soluce.
Le truc serait de faire deux scripts. Un avec GUI pour les tests où un feedback visuel est nécessaire. Un sans GUI qui prendrait ses paramètres à partir un tempfile que le 1er script aurait écrit.
Bon ... je préfèrerai que Python soit capable de reconnaitre dans quel mode Realflow démarre ...

Arrghhh !!!!
Faut que je trouve le module qui me permettra d'écrire un tempfile moi !
vbk!!!
 
Message(s) : 40
Inscrit le : 09 Mai 2008, 13:29

Re: [Script] Un foam script à tester ...

Messagepar verbalinsurection » 03 Sep 2010, 17:00

courage ! tu va nous pondre un super code ;)
si j'ai un peu de temps d'ici lundi je jetterai un oeil ;)
Avatar de l’utilisateur
verbalinsurection
Administrateur du site
 
Message(s) : 1006
Inscrit le : 28 Mars 2008, 22:10
Localisation : Paris

Re: [Script] Un foam script à tester ...

Messagepar gilles » 03 Sep 2010, 21:07

sinon ça va vous :mrgreen:
Avatar de l’utilisateur
gilles
 
Message(s) : 376
Inscrit le : 13 Oct 2008, 10:55

Re: [Script] Un foam script à tester ...

Messagepar vbk!!! » 05 Sep 2010, 00:30

Ca va mieux là !
Je viens de comprendre pourquoi le foam script le plus downloadé est en fait deux scripts.
Une interface ( batch script) et le corps ( event script).
Je vais donc faire une interface en batch pour mon script qui écrira un fichier "preset" réutilisable par mon event script ...

Bon je vais me coucher maintenant.

++
vbk!!!
 
Message(s) : 40
Inscrit le : 09 Mai 2008, 13:29

Re: [Script] Un foam script à tester ...

Messagepar vbk!!! » 07 Sep 2010, 10:54

Ca a l'air de fonctionner maintenant.
J'ai fait une interface avec Batch script qui sauve une sorte de "preset" dans le répertoire /log du projet Realflow.
Ce "preset" est ensuite récupérer par l' event script.
vbk!!!
 
Message(s) : 40
Inscrit le : 09 Mai 2008, 13:29

Re: [Script] Un foam script à tester ...

Messagepar verbalinsurection » 07 Sep 2010, 11:20

tu prête ? :roll: :D
Avatar de l’utilisateur
verbalinsurection
Administrateur du site
 
Message(s) : 1006
Inscrit le : 28 Mars 2008, 22:10
Localisation : Paris

Suivant

Retour vers Tutoriaux & Scripts

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)

cron