Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


galagast last won the day on November 11 2017

galagast had the most liked content!

Community Reputation

125 Excellent


About galagast

  • Rank

Contact Methods

  • Website URL

Personal Information

  • Name
    Jeff Lim
  • Location

Recent Profile Visitors

4,848 profile views
  1. setting the dop io preset

    That 'presets' parameter is calling a callback python script. You could try this: theGeo = hou.node('/obj/geo1/dopio1') # Keyword argument needed by the internal invokePresetMenu function myArgs = {'node': theGeo, 'script_value0': 'pyro'} # The internal python function called by the presets parameter. theGeo.hm().invokePresetMenu(myArgs)
  2. Detection of open and closed surfaces

    Always glad to be of help! Cheers!
  3. Add Name Attribute Via Python

    The documentation is the first thing I look through. But I agree, it does kinda lack in the way of examples. Next I also google stuff, where the results are usually from this forum, or at Sidefx. For general python syntax and functions, I still use google. Lastly, if I have an issue and all of the above is still lacking.. I would try and post a thread to hopefully get some answers. As for examples, I try and check out built-in HDA's and peek inside the Scripts tab, sometimes it contains python code. Also if you explore the Shelf Tools, most of those uses a module in the form of 'tools' that you can find at $HFS\houdini\python2.7libs They have lots of functions there with descriptions. I'm also still just learning as I go with my day to day Houdini adventure. Wishing you the best of luck!
  4. Detection of open and closed surfaces

    Hi, I've updated the file. It now includes a way to create a group for each connected geometry, and only for those that are open. I used the Connectivity SOP to create 'class' IDs for each connected primitive. Passed everything onto a Foreach by the 'class' attribute, then used the npointsgroup() to filter/switch out only the open geometries, where it then creates a unique group just for that using the Partition SOP. H16.5.268 Indie - open_closed_tag.rar
  5. Detection of open and closed surfaces

    @Noobini Haha indeed! All the while I thought that you need to set the the group entity to Edges in order to have access to all the edge related options. So yeah, the Group Promote can be removed in this case, then just set the Group SOP to a Group Type of Points.
  6. Triggering Animated Crowd Layers?

    Closest I was able to do (that was related to this) was to modify the agent transforms in a wrangle. But it might not work if what you want are animated vertices. Maybe have a look at the agentcliptimes() function? I'll try and do a test later if I have time.
  7. Detection of open and closed surfaces

    Hi, I'm not sure if this is what you're after: open_closed.rar (H16.5.268 Indie) I used a group SOP to detect unshared edges, converted that group to points, then used the npointsgroup() expression to count and detect if there are open edges or not.
  8. Orientation Matrix Help?

    Hi, I checked out your scene and updated it. I added two angle values for yaw and pitch, which were then used in a rotate() function sequentially. You still had the @orient attribute passing through the Sweep SOP. Simply delete that and let the sweep use the PolyFrame's tangentu as N. H16.5.268 Indie - water_flower_v005_upl_jeff.rar I hope this helps!
  9. Calculating / matching orientation

    Hi, here's also another approach. Vex based. The only drawback as of now is that this will not work for non-uniformly scaled objects. H16.5.268 Indie - pc_match_jeff.rar
  10. Hey Ben, some of these threads might lead you in the right direction: And just in case you plan to use particles as points to copy onto: I hope this helps!
  11. Add Name Attribute Via Python

    Something like this? node = hou.pwd() geo = node.geometry() geo.addAttrib(hou.attribType.Point, "name", "") for point in geo.points(): point.setAttribValue("name", "piece" + str(point.number())) Then look at this post by Graham explaining why string types does not have a default value.
  12. Hi, I attached a file that goes through some ways I found that will read a channel from CHOPs using SOP wrangles. It is based on the suggestion from this post of adding a spare parameter that reads in the channel using a chop() hscript expression. Then from there, I just discovered that the ch() vex expression can have a second argument that accepts time as an input! With that, you can now use any attribute from your points to sample the channel. In the example file, I sampled using the standard point numbers, and another one using UVs. H16.5.268 Indie - chop_to_sop.rar
  13. Getting OBJID or dop object name in Sop Solver

    If you're using the RBD Packed Object DOP, I believe you're best option is the one you're using now.. the point attributes. $OBJIDs does not represent a unique ID for each packed primitive. It represents a simulation object's unique ID. In the attached file, I've setup a Packed version and Fractured version. Inside the DOP network, if you look at the Geometry Spreadsheet, this is what it would look like comparing the two: For Packed Objects, you'll get just one simulation object. But for a Fractured Object, you'll get each piece as a separate simulation object. EDIT: I accidentally hit the submit button >__< As for accessing the OBJID, use the Fractured Object method. The Sop Solver already has code on how to access it on the dop_geometry SOP inside. (see the stamp function) As an example, in the attached file, I used a Sop Solver to isolate OBJID 8 and shrunk it down during the sim. A drawback with the Fractured Objects method is that it can be slow to process thousands of simulation objects. That is why the packed method was introduced a few versions ago. As another note, the option to choose which method to use also appears whenever using the RBD Fractured Object shelf button: H16.5.268 Indie - dop_objid.rar
  14. Hi, I played around your scene a bit. This is the result. I also ended up changing your extrusion expression using exp() instead of pow(). The gist of it was to do 2 iteration phases. 1 is ahead, and the other is behind. Then just blend between those two. The challenging part was to create the attributes needed to specify the iteration level, and the blending amount (check the blend_and_iter wrangle node for how I processed it). Although this seems to chug to slow when there's already too many polygons to process. I wanted to place it inside a compiled block, but polyExtrudes are not yet compilable. H16.5.268 NC - Subdiv_Test_v2.rar
  15. Hi, I tested this out. Hopefully the attached HDA example is something close to what you're after. Changing the parameters of HDA will also affect a node's parameter inside it. I assigned the ParmTupleChanged callback through the onCreated event (and removed the callback through the OnDeleted event). Although whenever saving the definition, an error pops up. It seems to error out due to a function eval() call to an undefined variable - which will only be filled after the callback fires. I'm not sure how to bypass that >__< H16.5.268 Indie - otl_parm_callback.hdalc On a side note, the example on the docs for the usage of a .ParmTupleChanged (under the addEventCallback) is probably incorrect.. I found this thread which suggested the correct syntax.