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();
}
}
|