script: /* switch selection from a face to its edges */ var gd = moi.geometryDatabase; var faces = gd.getSelectedObjects().getFaces(); gd.deselectAll(); for ( var i = 0; i < faces.length; ++i ) faces.item(i).getEdges().setProperty( 'selected', true );
script: /* Switch edge selection to face selection */ var processed_faces = [], processed_edges = []; var edges = moi.geometryDatabase.getSelectedObjects().getEdges(); for ( var i = 0; i < edges.length; ++i ) { var edge = edges.item(i); var faces = edge.getFacesOfEdge(); for ( var j = 0; j < faces.length; ++j ) { var face = faces.item(j); if ( processed_faces[face.id] ) { continue; } processed_faces[face.id] = true; var all_selected = true; var these_edges = face.getEdges(); for ( var k = 0; k < these_edges.length; ++k ) { var this_edge = these_edges.item(k); if ( !this_edge.selected ) { all_selected = false; break; } } if ( all_selected ) { for ( var k = 0; k < these_edges.length; ++k ) { var this_edge = these_edges.item(k); processed_edges[this_edge.id] = true; } face.selected = true; } } } for ( var i = 0; i < edges.length; ++i ) { var edge = edges.item(i); if ( processed_edges[edge.id] ) { edge.selected = false; } }
Remark : no need to click twice on the commun edges, orphan edges don't select any faces!
That version above is compacted ready to copy/paste into a keyboard shortcut. The uncompacted version is like this:
var processed_faces = [], processed_edges = [];
var edges = moi.geometryDatabase.getSelectedObjects().getEdges();
for ( var i = 0; i < edges.length; ++i )
{
var edge = edges.item(i);
var faces = edge.getFacesOfEdge();
for ( var j = 0; j < faces.length; ++j )
{
var face = faces.item(j);
if ( processed_faces[face.id] ) { continue; }
processed_faces[face.id] = true;
var all_selected = true;
var these_edges = face.getEdges();
for ( var k = 0; k < these_edges.length; ++k )
{
var this_edge = these_edges.item(k);
if ( !this_edge.selected )
{
all_selected = false;
break;
}
}
if ( all_selected )
{
for ( var k = 0; k < these_edges.length; ++k )
{
var this_edge = these_edges.item(k);
processed_edges[this_edge.id] = true;
}
face.selected = true;
}
}
}
for ( var i = 0; i < edges.length; ++i )
{
var edge = edges.item(i);
if ( processed_edges[edge.id] ) { edge.selected = false; }