Missing ICE nodes in the preset manager


I’ve noticed this a handful of times, where a node like Get Data isn’t found in the preset manager. Clicking the Update button always fixes it for me.
get_data_missing
The last time this happened, instead of clicking Update, I started Process Monitor and did a few more searches in the preset manager. In my case, Softimage searching only the compounds, not the presets in %XSI_HOME%\Data\DSPresets\ICENodes. That’s why nodes like Get Data weren’t found.

Clicking Update forced Softimage to search both the compounds and presets.

Checking .xsicompounds for no category and no tasks


As I posted yesterday, an ICE compound with no category and no task will not show up in the Preset Manager. Here’s a Python script that checks .xsicompound files and reports any that are missing both the category and tasks attributes.

I use ElementTree to parse the .xsicompound XML, and get the category and tasks attributes from the xsi_file element, which looks something like this:

<xsi_file type="CompoundNode" name="abScatter" author="Andreas Bystrom" url="http://www.wurp.net" formatversion="1.4" compoundversion="1.0" constructionmode="Modeling" backgroundcolor="7765887">

Here’s the script.

from siutils import si		# Application
from siutils import sidict	# Dictionary
from siutils import sisel	# Selection
from siutils import siuitk	# XSIUIToolkit
from siutils import siut	# XSIUtils
from siutils import log		# LogMessage
from siutils import disp	# win32com.client.Dispatch
from siutils import C		# win32com.client.constants

from xml.etree import ElementTree as ET
import os, fnmatch


#
# Generator function for finding files
#
def find_files(directory, pattern):
     for root, dirs, files in os.walk(directory):
         for basename in files:
             if fnmatch.fnmatch(basename, pattern):
                 filename = os.path.join(root, basename)
                 yield filename


#
# Check .xsicompound file for category and tasks attributes
#
def check_xsicompound( f ):
	try:
		tree = ET.parse( f )
	except Exception, inst:
		print "Unexpected error opening %s: %s" % (f, inst)

	# Get the xsi_file element
	xsi_file = tree.getroot()

#	name = xsi_file.attrib['name']

	# Check the category and task elements
	cat = False
	tasks = False 

	if 'category' in xsi_file.attrib and xsi_file.attrib['category'] != '':
		cat = True
		
	if 'tasks' in xsi_file.attrib and xsi_file.attrib['tasks'] != '':
		tasks = True

	# return False if both are blank
	return cat or tasks


#
#
#

# list of compounds with no category and no tasks
compounds = []

# check all compounds in all workgroups
for wg in si.Workgroups:
	d = siut.BuildPath( wg, "Data", "Compounds" );

	for filename in find_files(d, '*.xsicompound'):
		b = check_xsicompound( filename )
		if not b:
			compounds.append( filename )

log( "%d compounds found with no category and no tasks:" % (len(compounds)) )
for f in compounds:
	log( f )

Workgroup ICE compounds missing from Preset Manager


I’ve seen a few customers reporting that they put .xsicompound files in the Data\Compounds folder of a workgroup, but the compounds don’t show up in the Preset Manager.

This can happen when the compound doesn’t specify anything for Category or Tasks. From the docs:

If a compound is exported without a category or task, it is not available in the preset manager or nodes menu. This allows you to create utility nodes that perform specific functions inside other compounds but that are not meant to be used generally. You can add such nodes to an ICE tree using Compounds Import Compound or by dragging the compound file from a Softimage file browser or folder window.

Here’s a quick review of the Category and Tasks values:

  • Category specifies where the compound is listed on the Tool tab of the Preset Manager.
  • Tasks specifies where the compound is listed on the Task tab of the Preset Manager. The format of Tasks is task/sub-task. For example, “Particles/Getters” or “Deformation/Skinning”.