furtoolutils module

furtoolutils.addConditionals(pt, conds)
furtoolutils.addFurTool(kwargs)
furtoolutils.addGroomSop(kwargs, pane, groomobject, nodetype, toolname=None)

Creates a new groom SOP of nodetype.

If the SOP has a tool/operation menu, it’s set to ‘toolname’ when ‘toolname’ is not None.

Enters the state of the new SOP.

furtoolutils.addStrokes(node, strokes)
furtoolutils.animateGuidesTool(kwargs)
furtoolutils.appendOrSetSourceGroomObject(groomobject, sourcegroomobject)

Appends the source object if groomobject supports multiple source objects.

Replaces the source obeject if the groomobject only supports a single source.

furtoolutils.appendSourceGroomObject(groomobject, sourcegroomobject, useinput=True)

Appends sourcegroomobject to groomobject’s sources.

Only operates on groom objects that support multiple sources.

furtoolutils.buildSkinPaintAttribMenu(node, skininput=None, skinparmname=None, attribType=None, attribSize=None)
furtoolutils.changeGroomMask(kwargs)
furtoolutils.changeGuideGroomSopMask(node)
furtoolutils.chooseAndPaintFurObject(scriptargs, attribname, props, prompt=None)

Interactively selects a fur object in which to paint an attribute and enters the paint state, creating Attribute Create and Paint SOPs as needed or reusing existing nodes.

furtoolutils.clumpHairTool(kwargs)
furtoolutils.collectStrokes(node)
furtoolutils.combineGroomNodeChain(chainnodes)
furtoolutils.combineGroomNodes(nodes)
furtoolutils.compareChainPosition(nodeA, nodeB)
furtoolutils.computeSurfaceScale(skingeo, transform=None)
furtoolutils.copyParm(sourceparm, targetparm)
furtoolutils.copyParms(source, target)
furtoolutils.createDefaultFurNodes(container, restskinobject, animskinobject, selection)
furtoolutils.createFurAndStartGrooming(kwargs, tool=None)
furtoolutils.createGroomMergeObject(container, groomnodes, nodename=None)
furtoolutils.createGroomSop(groomobject, container, nodetype, toolname=None)
furtoolutils.createGuideDeformObject(container, sourcenode, skinobject, basename=None)
furtoolutils.createGuideGroomObject(container, skinsop, selection, scale=None, basename=None)
furtoolutils.createGuideSimObject(container, groomnode, basename=None)
furtoolutils.createHairGenObject(container, sourcenode, scale=None, basename=None)
furtoolutils.createHairShader(container, basename=None)
furtoolutils.curveAdvectTool(kwargs)
furtoolutils.drawHair(pane, groomobject)

Finds a drawhairguides node for the ‘fur’ object, creates one if none exists.

Enters the state of the drawhairguides node.

furtoolutils.drawPartingLine(kwargs, skininput=None, curveinput=None)
furtoolutils.drawPartingLineTool(kwargs)
furtoolutils.findConnectedOfSameType(node, mode, nodeset)

Finds all nodes of the same type as ‘node’ that are connected in a chain to ‘node’ and contained in nodeset.

furtoolutils.findGroomInputInOutputs(startnode, inputindex=-1, includeme=False)

Finds a groom node input in the outputs of ‘startnode’ and returns (foundnode, inputindex), where ‘foundnode’ is the found groom node and inputindex is the index of the input by which the search reached the node.

If includeme is True the first node will be returned if it is a groom node. In that case the inputindex by which the startnode was reached should be supplied.

Returns (None, -1) when no groom node was found.

furtoolutils.findGroomObjectInAncestors(startnode, nodetypes, acceptlegacyfurobject=False, inferfromparents=False)
furtoolutils.findGroomOutputInInputs(startnode, outputindex=-1, includeme=False)

Finds a groom node output in the inputs of ‘startnode’ and returns (foundnode, outputindex), where ‘foundnode’ is the found groom node and outputindex is the index of the output by which the search reached the node.

Note that groomnode may be a hou.SubnetIndirectInput since we stop at subnet boundaries and these are treated as groom nodes.

If includeme is True the first node will be returned if it is a groom node. In that case the outputindex by which the startnode was reached should be supplied.

Returns (None, -1) when no groom node was found.

furtoolutils.findMatchingGroomSop(container, nodetype, toolname=None)
furtoolutils.findMergeSets(nodes)
furtoolutils.findOrCreateGroomSop(kwargs, fur, container, nodetype, toolname=None)
furtoolutils.findOrCreateGuideGroomSop(kwargs, pane, fur, container)
furtoolutils.findRequiredVDBExtBand(node)
furtoolutils.generateEngineHDA(groomobject)
furtoolutils.getAffectedHairGens(groomobj, overlapthresh=0.25)

Find dependent hair generate objects that appear to be generate hair for the same skin primitives affected by groomobject.

overlapthresh is the percentage of primitives of a Hair Generate object that should be affected by groomobj for it to be considered affected.

furtoolutils.getConnectedGroomObjects(groomnode, res=set([]))
furtoolutils.getCurrentGroomObject(pane, acceptlegacyfurobject=False, nodetypes=['guidegroom', 'hairgen'])

Searches for a groom object using the following methods and returns the first one it finds. Returns None if none is found.

  • The current node or it’s ancestors.
  • The node at the current pane path or it’s ancestors.
  • One of the selected nodes.
furtoolutils.getCurrentGroomObjects(pane, acceptlegacyfurobject=False, nodetypes=['guidegroom', 'hairgen'], allowmultiple=False, infer=True)

Searches for a groom object using the following methods and returns the first one it finds. Returns None if none is found.

  • The current node or it’s ancestors.
  • The node at the current pane path or it’s ancestors.
  • One of the selected nodes.
furtoolutils.getDefaultGuideCount()
furtoolutils.getDefaultHairCount()
furtoolutils.getDefaultInfluenceRadius(scale, guidecount)
furtoolutils.getDefaultLength(scale, guidecount)
furtoolutils.getDependentGroomObjects(groomnode, recurse=True, done=set([]))
furtoolutils.getGroomNodeSkinOutput(node)
furtoolutils.getGroomObject(pane, prompt, acceptlegacyfurobject=False, nodetypes=['guidegroom', 'hairgen'], infer=True)

Finds a groom object in the current object or in it’s ancestors.

If no groom object can be found this way, the user is prompted to select one.

Returns None if the user doesn’t select anything or selects something other than a groom node.

furtoolutils.getGroomObjectAffectedFraction(groomobj, primnumbers, skingeo=None)

Returns the percentage of prims affected by groomobj that are also in the primnumbers array.

If skingeo is None the object’s own skin geometry is used, requiring it to be cooked. A skingeo can be supplied to avoid this.

furtoolutils.getGroomObjectAffectedPrims(groomobj, skingeo=None)

Returns the numbers of primitives on which groomobj generates hair.

If skingeo is None the object’s own skin geometry is used, requiring it to be cooked. A skingeo can be supplied to avoid this.

furtoolutils.getGroomObjectEditableSubnet(groomobject)
furtoolutils.getGroomObjects(pane, prompt, acceptlegacyfurobject=False, nodetypes=['guidegroom', 'hairgen'], allowmultiple=True, infer=True)

Finds a groom object in the current object or in it’s ancestors.

If no groom object can be found this way, the user is prompted to select one.

Returns None if the user doesn’t select anything or selects something other than a groom node.

furtoolutils.getGuideGroomObject(node)
furtoolutils.getMultiParmInstance(node, templatename, index)
furtoolutils.getOrCreateGroomObject(pane, prompt, acceptlegacyfurobject=False, creatorfunction=<function createDefaultFurNodes>)

Finds a groom object in the current object or in it’s ancestors.

If no groom object can be found this way, the user is prompted to select one.

Returns None if the user doesn’t select anything.

If the user selects something other than a groom node, it is assumed to be a skin geometry and a groom setup is created for it by calling ‘creatorfunction’ this assumed to be of the form creatorfunction(container, skinobject, animskinobject, selection).

furtoolutils.getReferencedGroomObjects(groomnode, recurse=True, done=set([]))
furtoolutils.getSkinObject(node)
furtoolutils.getSkinPaintConnections(node, skininput=None, skinparmname=None, paintinput=None, displayerrors=False)

Returns a tuple containting

(prevnode, prevnodeoutput, nextnode, nextnodeinput)

furtoolutils.groomHair(kwargs, pane, groomobject, tool=None)

Finds a guidegroom node for the groom object, creates one if none exists.

Enters the state of the guidegroom node.

furtoolutils.groomMergeTool(kwargs)
furtoolutils.guideGroomTool(kwargs)
furtoolutils.guideInitTool(kwargs)
furtoolutils.guideProcessTool(kwargs, toolname)
furtoolutils.hairGenTool(kwargs)
furtoolutils.inListOfLists(setlist, item)
furtoolutils.inferGroomObject(obj, nodetypes)
furtoolutils.insertGroomSop(fur, container, groomsop)
furtoolutils.insertGroomSopIntoLegacyFur(fur, container, guidegroomsop)
furtoolutils.insertGuideTool(kwargs, tool)
furtoolutils.isGroomNode(node, acceptlegacyfurobject=False, nodetypes=None)
furtoolutils.isGroomNodeLive(node)

Returns True if the groom node is live, meaning it doesn’t load it’s output from a file.

furtoolutils.isLegacyFurObject(node)
furtoolutils.isTransferNode(node)
furtoolutils.isolateGroomParts(kwargs)
furtoolutils.jumpIntoGuideGroomTool(kwargs)
furtoolutils.jumpIntoHairGenTool(kwargs)
furtoolutils.jumpToGuideGroomTool(kwargs)
furtoolutils.jumpToHairGenTool(kwargs)
furtoolutils.jumpToObject(kwargs, nodetypename, jumpinto=False)
furtoolutils.markAsTransferNode(node)
furtoolutils.matchAny(patterns, string)
furtoolutils.mergeConditionals(pt, refpt, skip_inherit_cond=[])
furtoolutils.paintSkinAttrib(kwargs, attribname, attribdef=None, skininput=None, skinparmname=None, mode='paint', fgcolor=<sphinx.ext.autodoc.importer._MockObject object>, bgcolor=<sphinx.ext.autodoc.importer._MockObject object>)
furtoolutils.positionPaintNodes(refnode, nextnode, inputitems, paint_nodes)
furtoolutils.recacheAllGroomNodes(fur)
furtoolutils.recacheGroomObjectStrokes(groomobject)
furtoolutils.recacheStrokesTool(kwargs)
furtoolutils.reguideTool(kwargs)
furtoolutils.removeFromGroomChain(node)

Removes node from groom-node chain.

furtoolutils.replaceGroomSource(groomobject, oldsource, newsource)

Removes source groom object(s) from groom object

If sourcegroomobject is None any sources are removed.

If it is not then only that sourcegroomobject is removed.

furtoolutils.selectGroomObject(pane, prompt, acceptlegacyfurobject=False, infer=True, nodetypes=None, use_existing_selection=True)

Lets the user select a groom object while displaying a custom prompt.

furtoolutils.selectGroomObjects(pane, prompt, acceptlegacyfurobject=False, infer=True, nodetypes=None, use_existing_selection=True, allow_multisel=True)

Lets the user select a groom object while displaying a custom prompt.

furtoolutils.selectObject(pane, prompt, use_existing_selection=True)
furtoolutils.selectObjects(pane, prompt, use_existing_selection=True, allow_multisel=True)
furtoolutils.setGuideGroomSopGroup(guidegroomsop, groupstring)
furtoolutils.setNewSkin(fur, new_sop)

Sets a new model.

Returns a tuple of the old skin path and the old group.

furtoolutils.setSourceGroomObject(groomobject, sourcegroomobject, useinput=True)

Sets groomobject’s source to sourcegroomobject.

Only operates on groom objects that support a single source object.

furtoolutils.setUpGroomSop(groomsop, toolname=None)
furtoolutils.simGuidesTool(kwargs)
furtoolutils.startDrawing(kwargs)
furtoolutils.startGrooming(kwargs, tool=None)
furtoolutils.toggleHairDisplayTool(kwargs)
furtoolutils.transferGroomParms(sourcenode, targetnode, expatterns=[])
furtoolutils.untangleOffset(xoffset)
furtoolutils.updateFromSopCallback(fur)
furtoolutils.updateSkinUsingRecache(fur, new_sop)
furtoolutils.updateSkinUsingTransfer(fur, skinsop, method='direct', uvattrib='None')
furtoolutils.whiteHairTool(kwargs)