FX_tool for Hython Basic02

**`Fluid Simulation Setup tool`**
Houdini Fluid Simulation Base setupを自動的に作ってくれるtoolを公開します。
FlipかPyroを選べるようにしています。
自分好みにゴリゴリ変えてくださいませぇ。

Houdini記事
**`Control_Dynamics Houdini 01`**等でsetupが面倒だと思ったので合わせて勉強に役立ててください。
Control_Dynamics Houdini 01はこちら
http://qiita.com/ts_bros/items/c8c9ace7863e8b93df4c

---

**`Fluid Simulation Setup`**

![Simu_Setup.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/5ae22cbc-2ced-f07d-b604-b568d13cbfbf.png)

[Python]

```py
#Function Select Fluid Base

#Create Dialog Function
Dialog = hou.ui.readMultiInput(message ="          -User Guide-\n\
  =================\n  :Fluid_Simulation_Setup\n  =================\n\
-Compute Setup Simulation-\n\n  :Flip = Flip Based Setup\n  :Pyro = Pyro Based Setup\
\n\n\
  FLIP = BlueColor\n  Pyro = RedColor\n  =================\n",input_labels = ["  -DopName-","\
  -GridSize-"],help ="\
   -Main Detail-\n   :Simulation Node\n",title = "\
Houdini_FluidSimulation_Setup_Tool",initial_contents =["\
Sim","1"],buttons=["Flip","Pyro","Cancel"]);




#Create Base Node Function

obj = hou.node("/obj");
Namespace = Dialog[1];
GridScale = Namespace[1];
print Namespace

#Get Section Function
#Dialog return 
#Flip =0,Pyro = 1,Cacnel = 2, -Dopname- is list[1];

#Convert Namelist to list
typename = Namespace[0];

#======Fase for Click Flip======#
if Dialog[0]==0:
   Flipnode = obj.createNode("geo",run_init_scripts=0);   
   Flipnode.setName(typename);
   
   #Flip SetNode Color
   FlipColor = hou.Color((0.0,0.6,1.0));
   
   Flipnode.setColor(FlipColor);
   
   #Best Position
   Flipnode.moveToGoodPosition();
   
   #Fase OBJ Node End
   
   #get Sop Node 
   Fpath = Flipnode.path();
   Fnode = hou.node(Fpath);
   
#++                              ++#   
        #function For Sop 
   
   #Create BoundingSource for Box Sop
   Boundsop = Fnode.createNode("box","BoundArea");
   
   Boundsop.setPosition([-2.1,0.9]);
   #Set Color
   boundcol = hou.Color((1.0,0.8,0.0));
   Boundsop.setColor(boundcol);
   
  
#++                                     ++#
            #Edit Def Parameter
             #Edit Def Parameter
   Boundsop.setParms({"sizex":GridScale,"sizey":GridScale,"sizez":GridScale}); 
   Boundsop.setParmExpressions({"ty":"ch('sizey')/2"});
   #Export Parms Variables
   boundsizex =  Boundsop.parm("sizex");
   boundsizey =  Boundsop.parm("sizey");
   boundsizez =  Boundsop.parm("sizez");
   
   boundtrx = Boundsop.parm("tx");
   boundtry = Boundsop.parm("ty");
   boundtrz = Boundsop.parm("tz");
   
   #Create Dop network
   Fdop = Fnode.createNode("dopnet");
   #Set Name
   Fdop.setName(typename+'_network');
#===============================================#
#++                                     ++#
           #Create into Dop 
   
   #Create Solver Asset        
   #Get Simulation Dop nodepath
   Doppath = Fdop.path();
   dpnode = hou.node(Doppath);
#++                                     ++#
           #Create dopnode 
   #Delete DefNode
   out = '/output';
   outpath = Doppath+out;
   outnode =hou.node(outpath);
   outnode.destroy();
   
   #Create Flip Object node
   Flipobj = dpnode.createNode("flipobject","FLIP"); 
   fppath = Flipobj.path();
   
   #Edtit Parm
   Flipobj.setParms({"closedends":1});
   Flipobj.setParms({"visprim":3});
   
#++                                     ++#
           #Edit Flipobj Parm
    
   
   FPathparm = Flipobj.parm("soppath");
   FPathparm.set("");
   
   #create FlipSolver Node
   Flipsolver = Flipobj.createOutputNode("flipsolver",'Flip_Solver');
   Flipsolver.setPosition([1,-1.5]);
    
#++                                     ++#
           #Edit FliSolver Parm
   
   Flipsolver.setParms({"limit_sizex":boundsizex,"limit_sizey":boundsizey,"limit_sizez":boundsizez});
   Flipsolver.setParms({"limit_tx":boundtrx,"limit_ty":boundtry,"limit_tz":boundtrz});
   Flipsolver.setParms({"vislimitcolorr":1.0,"vislimitcolorg":0.0,"vislimitcolorb":0.0});
   
   #Create Gravity dop
   Gravitydop = Flipsolver.createOutputNode("gravity","Gravity");
   Gravitydop.setPosition([1.4,-3.0]);
   
   
   
   
   #create null dop
   dpnull = Gravitydop.createOutputNode("null","OUT");
   dplColor = hou.Color((1.0,1.0,0.4));
   
   dpnull.setPosition([1.4,-4.4]);
   dpnull.setColor(dplColor);
   dpnull.setDisplayFlag(1);
#===============================================#   
   
   #Create Dop Importsop
   Dpio = Fnode.createNode("dopimportfield","Sim_Data");
   Dpio.setPosition([-1.9,-1.4]);
#++                                     ++#
          #Edit Def Parameter
   #Get Simulation Dop nodepath
   Doppath = Fdop.path();
   Dpiopathnet = Dpio.parm('doppath');
   
   Dpiopathnet.set(Doppath);
   #Get Simulation Dop node
   getdpobj = fppath;
   Dpionode =  Dpio.parm("dopnode");
   Dpionode.set( getdpobj);
  
   #Create Filecache Node
   cachenode = Dpio.createOutputNode("filecache");
   
   cachenode.setName(typename+"_cahce");
   
   #Create Nullsop
   nullsop = cachenode.createOutputNode("null","Sim_OUT");
   
   nullsop.setPosition([-1.5,-3.5]);
   nullCol = hou.Color((1.0,0.4,0.4));
   nullsop.setColor(nullCol);
   
   #Set Display Flag
   nullsop.setDisplayFlag(1);
   Boundsop.setRenderFlag(0);
   Boundsop.setTemplateFlag(1);
   
#=========  Fase for Click Flip EnD =========#
   
   





#======Fase for Click Pyro======#
if Dialog[0]==1:
   Pyronode = obj.createNode("geo",run_init_scripts=0);   
   Pyronode.setName(typename);
   
   #Flip SetNode Color
   PyroColor = hou.Color((1.0,0.4,0.4));
   
   Pyronode.setColor(PyroColor);
   
   #Best Position
   Pyronode.moveToGoodPosition();
   
   #Fase OBJ Node End
   
   #get Sop Node 
   Ppath = Pyronode.path();
   Pnode = hou.node(Ppath);
   
#++                              ++#   
        #function For Sop 
   
   #Create BoundingSource for Box Sop
   Boundsop = Pnode.createNode("box","BoundArea");
   
   Boundsop.setPosition([-2.1,0.9]);
   #Set Color
   boundcol = hou.Color((1.0,0.8,0.0));
   Boundsop.setColor(boundcol);
   
  
#++                                     ++#
            #Edit Def Parameter
           
   Boundsop.setParms({"sizex":GridScale,"sizey":GridScale,"sizez":GridScale}); 
   Boundsop.setParmExpressions({"ty":"ch('sizey')/2"});
   #Export Parms Variables
   boundsizex =  Boundsop.parm("sizex");
   boundsizey =  Boundsop.parm("sizey");
   boundsizez =  Boundsop.parm("sizez");
   
   boundtrx = Boundsop.parm("tx");
   boundtry = Boundsop.parm("ty");
   boundtrz = Boundsop.parm("tz");
   
   #Create Dop network
   Pdop = Pnode.createNode("dopnet");
   #Set Name
   Pdop.setName(typename+'_network');
#===============================================#
#++                                     ++#
           #Create into Dop 
   
   #Create Solver Asset        
   #Get Simulation Dop nodepath
   Doppath = Pdop.path();
   dpnode = hou.node(Doppath);
#++                                     ++#
           #Create dopnode 
   #Delete DefNode
   out = '/output';
   outpath = Doppath+out;
   outnode =hou.node(outpath);
   outnode.destroy();
   
   #Create Pyro Object node
   Pyroobj = dpnode.createNode("smokeobject","Pyro"); 
   Pppath = Pyroobj.path();
#++                                     ++#
            #Edit Parameter
            
          #Size,Center,ClosedBound
   Pyroobj.setParms({"sizex":boundsizex,"sizey":boundsizey,"sizez":boundsizez});
   Pyroobj.setParms({"tx":boundtrx,"ty":boundtry,"tz":boundtrz});
   Pyroobj.setParms({"closedends":1});
            
              #Visualizer volume
   Pyroobj.setParms({"multifield_densityfield":'density'});
   Pyroobj.setParms({"multifield_showguide":1});
   Pyroobj.setParms({"density_showguide":0});
   
   #create PyroSolver Node
   Pyrosolver = Pyroobj.createOutputNode("pyrosolver",'Pyro_Solver');
   Pyrosolver.setPosition([2,-1.9]);
   
   #create Resize Node
   dpresize = dpnode.createNode("gasresizefluiddynamic","Resize_Grid");
   
   dpresize.setPosition([2.0,0.7]);
   
   Pyrosolver.setInput(1,dpresize);
   
   
   
   #create null dop
   dpnull = Pyrosolver.createOutputNode("null","OUT");
   dplColor = hou.Color((1.0,1.0,0.4));
   
   dpnull.setPosition([2.0,-3.0]);
   dpnull.setColor(dplColor);
   dpnull.setDisplayFlag(1);

  
#===============================================#   
   
   #Create Dop Importsop
   Dpio = Pnode.createNode("dopimportfield","Sim_Data");
   Dpio.setPosition([-1.9,-1.4]);
#++                                     ++#
          #Edit Def Parameter
   #Get Simulation Dop nodepath
   Doppath = Pdop.path();
   Dpiopathnet = Dpio.parm('doppath');
   
   Dpiopathnet.set(Doppath);
   #Get Simulation Dop node
   getdpobj = Pppath;
   Dpionode =  Dpio.parm("dopnode");
   Dpionode.set(getdpobj);
  
   #Create Filecache Node
   cachenode = Dpio.createOutputNode("filecache");
   
   cachenode.setName(typename+"_cahce");
   
   #Create Nullsop
   nullsop = cachenode.createOutputNode("null","Sim_OUT");
   
   nullsop.setPosition([-1.5,-3.5]);
   nullCol = hou.Color((1.0,0.4,0.4));
   nullsop.setColor(nullCol);
   
   #Set Display Flag
   nullsop.setDisplayFlag(1);
   Boundsop.setRenderFlag(0);
   Boundsop.setTemplateFlag(1);
   
#=========  Fase for Click Pyro EnD =========#
   
   


if Dialog[0]==2:
   None;
```

:Popup windowを使用しています。