Single script to select different things

 From:  Michael Gibson
11127.6 In reply to 11127.5 
Hi Flowgun,

re:
> I meant that if we have a named object that is selected, it deselects it and selects the next named
> object in the list (looping through the list continuously).

Ok, I added a section that should do that:

code:
script: var selected_objs = moi.geometryDatabase.getSelectedObjects();
var all_objs = moi.geometryDatabase.getObjects();
var done = false;

/* If some points on a curve are selected, select the rest */

for ( var i = 0; i < all_objs.length; ++i )
{
	var obj = all_objs.item(i);
	if ( obj.isCurve && obj.hasSelectedEditPoints )
	{
		moi.geometryDatabase.selectAll();
		done = true;
		break;
	}
}

/* If a named object is selected, deselect it and select the next one */

if ( !done )
{
	var objects = [], name_index = [];
	for ( var i = 0; i < all_objs.length; ++i )
	{
		var obj = all_objs.item(i);
		var name = obj.name;
		if ( name )
		{
			if ( name_index[name] == undefined )
			{
				name_index[name] = objects.length;
				objects.push( [] );
			}

			var index = name_index[name];
			objects[index].push( obj );
		}
	}

	function sortfunc( a, b )
	{
		var a_name = a[0].name;
		var b_name = b[0].name;

		return a_name.localeCompare(b_name);
	}

	objects.sort( sortfunc );

	var index_to_select = -1;

	for ( var i = 0; i < objects.length && index_to_select == -1; ++i )
	{
		var obj_array = objects[i];
		for ( var j = 0; j < obj_array.length && index_to_select == -1; ++j )
		{
			var obj = obj_array[j];
			if ( obj.selected )
			{
				index_to_select = (i+1) % objects.length;
			}
		}
	}

	if ( index_to_select != -1 )
	{
		moi.geometryDatabase.deselectAll();

		var obj_array = objects[index_to_select];
		for ( var i = 0; i < obj_array.length; ++i )
		{
			var obj = obj_array[i];
			obj.selected = true;
		}

		done = true;
	}
}

if ( !done )
{
	if ( selected_objs.length == 0 )
	{
		/* If nothing selected, select all curves */
		moi.geometryDatabase.getObjects().getCurves().setProperty( 'selected', true );
	}
	else if ( selected_objs.numStandaloneCurves > 0 )
	{
		/* If some curves are already selected, select the rest of the curves. */
		moi.geometryDatabase.getObjects().getCurves().setProperty( 'selected', true );
	}
	else if ( selected_objs.numBReps > 0 )
	{
		/* If surfaces are selected, select their naked edges */
		selected_objs.setProperty( 'selected', false );

		var breps = selected_objs.getBReps();
		for ( var i = 0; i < breps.length; ++i )
		{
			var brep = breps.item(i);
			brep.getNakedEdges().setProperty( 'selected', true );
		}
	}
	else if ( selected_objs.length == 1 && selected_objs.numFaces == 1 )
	{
		/* 1 face selected, select edges of face */
		var face = selected_objs.item(0);
		face.selected = false;
		face.getEdges().setProperty( 'selected', true );
	}
	else if ( selected_objs.numEdges > 0 )
	{
		/* If any edges are selected do loop selection */
		moi.geometryDatabase.selectLoop();
	}
}