Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Wooshum last won the day on May 23 2018

Wooshum had the most liked content!

Personal Information

  • Name
  • Location
    Melbourne, Australia

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Wooshum's Achievements


Newbie (1/14)



  1. A note to all, the original GitHub repo has been removed due to inactivity. I have dumped the underlying python import script into a GIST here: https://gist.github.com/danleesmith/8a7d5b07f604c471f02d24ae51ed97ea From a production point of view I moved to using a custom transformer in FME that writes out the geometry and attributes to a Houdini .geo file directly. The benefit of this process is that FME can ingest pretty much any GIS format (and more). This simplifies the process on the Houdini end. You can check this out here: https://github.com/danleesmith/fmehougeo
  2. The pcfilter function will return the filtered (blurred, averaged, etc) positional value (or any attribute value you choose) of all of the points within the search radius and count. To demonstrate if you assign the center value to @P and place the point wrangle within a sop solver you get a pseudo gravity sim. See attached HIP. pseudo_gravity.hipnc
  3. You could use pcfilter to easily get an approximation of the center of the cluster. Within the if statement: vector center = pcfilter(pcloud, "P") see: https://www.sidefx.com/docs/houdini/vex/functions/pcfilter.html Given the function weights according to the location of the search point it would not be an exact center.
  4. The number of neigbouring primitives returned is dependent on the number of edges each primitive (as in face/polygon) shares with another primitive. So in your example a Dodecahedron will return 5 neighbours per prim as each face has 5 shared edges. If you start with a Icosahedron you will return 3 neighbours per prim, etc. Primitives in houdini are n-sided polygons so can have any number of shared edges.
  5. Are you operating on primitives instead of points? Have attached an example hip. prim_neighbours.hiplc
  6. Looks like you were on the right track with the use of half edges. You could approach the problem using a primitive wrangle as follows: // Array of neighbouring prims int prim_neighbours[]; // Loop through the primitives vertices foreach (int vtx; primvertices(0, @primnum)) { // Get the forward half edge for the vertex int this_hedge = vertexhedge(0, vtx); // Only process if a valid half edge if (hedge_isvalid(0, this_hedge)) { int equiv_hedge = this_hedge; // Loop through equivalent half edges and get the neighbouring prims do { equiv_hedge = hedge_nextequiv(0, equiv_hedge); if (equiv_hedge != this_hedge) { // !! Get your attribues here !! push(prim_neighbours, hedge_prim(0, equiv_hedge)); } } while (equiv_hedge != this_hedge); } } i[]@neighbours = prim_neighbours;
  7. Just wanted to add another research paper to bump up the argument for a weighted straight skeleton implementation. http://peterwonka.net/Publications/pdfs/2011.TOG.Kelly.ProceduralExtrusions.TechreportVersion.final.pdf Covers the process that Tom Kelly and Peter Wonka developed for procedural extrusions using input guide curves:
  8. Linear algebra book online with interactive examples: http://immersivemath.com/ila/ Haven't gone through the lot but looks helpful.
  9. This is the way I have done it in the past when creating a digital asset from a shelf tool: # Create new digital using OBJ subnet as a base temp_node = hou.node("/obj").createNode("subnet") # Create new digital asset from temp node hda_node = temp_node.createDigitalAsset( name = hda_name, hda_file_name = hdalib_directory + hda_name, description = "DESCRIPTION", min_num_inputs = 0, max_num_inputs = 0, ) hda_node.setName("NAME") # Get HDA definition hda_def = hda_node.type().definition() # -------------------------------------------- # Do whatever you need to do with the HDA here # i.e. Creation, copying and organisation of children: hou.moveNodesTo(tuple(other_premade_node), hda_node) hda_node.layoutChildren() # ------------------------------------------- # Update and save new HDA hda_options = hda_def.options() hda_options.setSaveInitialParmsAndContents(True) hda_def.setOptions(hda_options) hda_def.save(hda_def.libraryFilePath(), hda_node, hda_options)
  10. I am not sure if this has been posted before but just came across this site: http://wordpress.discretization.de/houdini/ To quote: "This website is here to help you to get started with Houdini in order to complete the Mathematical Visualization course at the Technical University of Berlin. The aim is to enable you to run your own geometry related algorithms while taking advantage of Houdini’s excellent visual graphics while avoiding to dig deep into the theory behind it." There seems to be some great material on here. In particular a unique way of getting scipy/numpy to work with Houdini - apparently you just copy and paste the entire anaconda 2.7 build into the Houdini python directory?! http://wordpress.discretization.de/houdini/home/advanced-2/installing-and-using-scipy-in-houdini/
  11. A full implementation of a weighted straight skeleton operation similar to the one developed by Tom Kelly: https://github.com/twak/campskeleton http://theses.gla.ac.uk/4975/ Roofs, procedural building models, etc. At a SOP level this would be epic, PolyExpand2D with way more functionality
  12. Hi All, If you need to work with Geo-Spatial data on a regular basis like I do, you might be interested in the GeoJSON Importer (SOP HDA) that I have started developing. You can grab it from here: https://github.com/danleesmith/HOU_GeoTools Some basic Info on the Importer: Houdini Geographic Tools Custom Python GeoJSON importer Digital Asset for Houdini (HDA). This importer reads GeoJSON files only. GeoJSON is quickly becoming the standard geo-spatial interchange format and can store point, line and polygonal features with associated attributes. The GeoJSON standard can be found here: http://geojson.org/ Limitations This importer only works with projected coordinate systems. An explanation of the difference between projected and geographic coordinate systems can be found here: http://tech.ced.uga.edu/kb/articles/difference-beteween-projected-and-geographic-coordinate-system The importer also requires that any NULL or EMPTY attributes, which are allowable in many GIS systems, are mapped to -9999. This will ensure that when the attributes are written in Houdini they can be stored as either 0 for numbers and '' for strings. NOTE: Polygon/Primitive Holes (known as donuts in GIS) have not been implemented in the importer at this stage. Data Prep To prepare you data and convert your spatial files to GeoJSON I recommend using QGIS: http://www.qgis.org/en/site/ OR if you can get your hands on a licence give FME a go: http://www.safe.com/ Usage This HDA is a SOP based asset. 'GeoJSON File channel' is used to point to the desired GeoJSON File for importing. If you want to import many GeoJSON files in the right location relative to each other just drop down a new Import GeoJSON node, toggle on 'Use Reference Features' and point the 'Reference Features' channel to the desired Import GeoJSON node. The attached images show the Importer in action. I hope you find this useful and please send through any suggestions you have!
  13. Hi All, Just wanted to share my explorations on this theme. This thread has given me the push to explore a couple of coral growth papers I have been interested in for quite a white, particularly this one: http://www.sciencedirect.com/science/article/pii/S0022519304000761 After playing around with some of the setups on this thread I built a solver based that is a bit of a mutant space colonization system - in that the coral grows towards a food source. This means you can drive the simulation to fill objects and makes it controllable from an artistic perspective. I have attached the HIP if anyone wants to play. Dan. HOU_CoralGrowth_v1.hipnc
  14. Thanks for that Alex. Looks like Houdini 15.5 is bundled with Python 2.7.5 (October 2015) - will install as the system version and give it a go.
  • Create New...