Skip to content

Instantly share code, notes, and snippets.

/**
* @param {Layer} layer
* @param {Array} point - array of numbers
* @param {Number} [t]
* @return {Array} - array of numbers
*/
var toWorld = function(layer, point, t) {
var comp = layer.containingComp,
dammyLayer = comp.layers.addNull(),
dammySource = dammyLayer.source,
@yone80
yone80 / Bend
Last active December 28, 2016 01:56
VEXpression
float angle = ch('angle') * -1;
float range = ch('range');
if(angle==0.0 || range==0.0) return;
angle = radians(angle / range);
int limit = chi('limit');
vector origin = chv('orig');
vector dir = normalize( chv('dir') );
vector up = normalize( chv('up') );
vector rotaxis = cross(up, dir);
@yone80
yone80 / Deform Along Curve
Last active December 2, 2020 03:41
VEXpression
/* Initialize */
float curvelength = primintrinsic(1, 'arclength', 0);
if( curvelength == 0 )
curvelength = primintrinsic(1, 'measuredperimeter', 0);
float dist = @P.z / curvelength + ch('offset');
vector2 uv = set(dist, 0);
// PRIMUV_UNITLEN_TO_UNIT = 7
vector2 posuv = primuvconvert(@OpInput2, uv, 0, 7);
@yone80
yone80 / Attribute From Surface
Last active October 15, 2015 10:32
VEXpression
/* Input1 is 'Geometry to Transfer Attribute to' */
/* Input2 is 'Geometry to Transfer Attribute from' */
string attrib_name = 'attrib_name';
float search_lim = 0.5;
float accum = point(0, attrib_name, @ptnum);
for(int i=0; i<nprimitives(1); i++)
{
vector bbxmin, bbxmax;
getbbox(1, itoa(i), bbxmin, bbxmax);
@yone80
yone80 / Group_from_connected_edges.py
Last active April 9, 2016 17:38
Houdini Python SOP
def checkConnectivity(e1, e2):
chk = e1.points()[0].number == e2.points()[0].number
chk = chk or e1.points()[0].number == e2.points()[1].number
chk = chk or e1.points()[1].number == e2.points()[0].number
chk = chk or e1.points()[1].number == e2.points()[1].number
return chk
node = hou.pwd()
geo = node.geometry()
@yone80
yone80 / Polyline_from_edges.py
Last active April 11, 2017 10:12
Houdini Python SOP
node = hou.pwd()
geo = node.geometry()
geo.deletePrims(geo.prims(), True)
pt_delete = set(geo.points())
ptns = node.parm('group').eval().split()
for ptn in ptns:
edges = geo.globEdges(ptn)
@yone80
yone80 / Group_Menu.py
Last active May 31, 2016 17:19
Houdini Python SOP
node = hou.pwd()
menu = []
parmvalues = kwargs['parm'].eval().split()
if node.inputs():
geo = node.inputs()[0].geometry()
typegroups = []
typegroups.append( geo.primGroups() )
typegroups.append( geo.pointGroups() )
def checkConnectivity(e1, e2):
chk = e1.points()[0].number == e2.points()[0].number
chk = chk or e1.points()[0].number == e2.points()[1].number
if chk: return 1
chk = e1.points()[1].number == e2.points()[0].number
chk = chk or e1.points()[1].number == e2.points()[1].number
if chk: return 2
return 0
def isNext(e1, e2):
vector origin = chv('t');
vector dir = normalize( chv('dir') );
vector v = @P - origin;
float dist = dot(v, dir);
float range = ch('range');
f@falloff = fit(dist, range, 0, 0, 1);
import soptoolutils
selection = None
if type(kwargs['pane']) is hou.SceneViewer:
viewer = kwargs['pane']
selection = viewer.selectGeometry(geometry_types=(hou.geometryType.Primitives, hou.geometryType.Edges,))
n = soptoolutils.genericTool(kwargs, '$HDA_NAME')