LoginSignup
4

More than 5 years have passed since last update.

FX_tool for Hython Basic02

Last updated at Posted at 2017-05-04

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

[Python]

#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を使用しています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4