#perl #AUTHOR: Thirteenth Guest #version 1.0 #14-12-2012 # if (lxq("query layerservice selmode ?") eq edge){ lxout("SlideHalfEdge"); my $edgeN = lxq("select.count edge ?"); if ($edgeN > 1) { #Store selection my $vertsON; my @vertsO; if (lxq("select.count vertex ?") ne 0) { @vertsO = lxq("query layerservice selection ? vert"); $vertsON = @vertsO; } my $polysON; my @polysO; if (lxq("select.count polygon ?") ne 0) { @polysO = lxq("query layerservice selection ? poly"); $polysON = @polysO; } #Find a common vertex of the last two selected edges my @r; my @edgeO = lxq("query layerservice selection ? edge"); @edge1Verts = split (/[^0-9]/, @edgeO[$edgeN-2]); @edge2Verts = split (/[^0-9]/, @edgeO[$edgeN-1]); lxout("edge1Verts - @edge1Verts[2] - @edge1Verts[3]"); lxout("edge2Verts - @edge2Verts[2] - @edge2Verts[3]"); lx("select.typeFrom vertex"); if (@edge1Verts[2] eq @edge2Verts[2]) { lx("select.element @edge1Verts[1] vertex set @edge1Verts[3]"); lx("select.element @edge1Verts[1] vertex add @edge2Verts[3]"); @r[0]=1; @r[1]=$edge1Verts[2]; @r[2]=$edge1Verts[3]; @r[3]=$edge2Verts[3]; } elsif (@edge1Verts[2] eq @edge2Verts[3]) { lx("select.element @edge1Verts[1] vertex set @edge1Verts[3]"); lx("select.element @edge1Verts[1] vertex add @edge2Verts[2]"); @r[0]=1; @r[1]=$edge1Verts[2]; @r[2]=$edge1Verts[3]; @r[3]=$edge2Verts[2]; } elsif (@edge1Verts[3] eq @edge2Verts[2]) { lx("select.element @edge1Verts[1] vertex set @edge1Verts[2]"); lx("select.element @edge1Verts[1] vertex add @edge2Verts[3]"); @r[0]=1; @r[1]=$edge1Verts[3]; @r[2]=$edge1Verts[2]; @r[3]=$edge2Verts[3]; } elsif (@edge1Verts[3] eq @edge2Verts[3]) { lx("select.element @edge1Verts[1] vertex set @edge1Verts[2]"); lx("select.element @edge1Verts[1] vertex add @edge2Verts[2]"); @r[0]=1; @r[1]=$edge1Verts[3]; @r[2]=$edge1Verts[2]; @r[3]=$edge2Verts[2]; } else {lxout("Last 2 selected edges have no common vertices"); @r[0]=0; lx("select.typeFrom edge"); } #If the edges of adjacent if (@r[0] eq 1) { lx("poly.split"); lx("select.element @edge1Verts[1] vertex add @r[1]"); lx("select.convert polygon"); if (lxq("select.count polygon ?") eq 0) { lx("select.typeFrom vertex"); lx("poly.make auto"); lx("select.typeFrom polygon"); } my $tempPoly = lxq("query layerservice polys ? selected"); #Set Tag's my @firstEdgePolys = lxq("query layerservice edge.polyList ? (@edge1Verts[2],@edge1Verts[3])"); my $firstEdgePolysN = @firstEdgePolys; if ($firstEdgePolysN eq 1) { lx("delete"); } else { lxout("polygons $firstEdgePolys[0] $firstEdgePolys[1], all $firstEdgePolysN"); my $polyOn1Edge = 1; if ($firstEdgePolys[$polyOn1Edge] eq $tempPoly) {$polyOn1Edge--;} my $mat = lxq("query layerservice poly.material ? $firstEdgePolys[$polyOn1Edge]"); lxout("transfer $mat material from polygon $firstEdgePolys[$polyOn1Edge] to polygon $tempPoly"); lx("poly.setMaterial $mat"); my $part = lxq("query layerservice poly.part ? $firstEdgePolys[$polyOn1Edge]"); lxout("transfer $part part from polygon $firstEdgePolys[$polyOn1Edge] to polygon $tempPoly"); lx("poly.setPart $part"); my @selSetsPoly = lxq("query layerservice poly.selSets ? $firstEdgePolys[$polyOn1Edge]"); my $selSetsPolyN = @selSetsPoly; if ($selSetsPolyN ne "") { for ($i=0; $i<$selSetsPolyN; $i++) { lxout("transfer $selSetsPoly[$i] SelSet from polygon $firstEdgePolys[$polyOn1Edge] to polygon $tempPoly"); lx("select.editSet $selSetsPoly[$i] add"); } } my $edgeWeight = lxq("query layerservice edge.creaseWeight ? (@edge1Verts[2],@edge1Verts[3])"); lxout("transfer edgeWeight=$edgeWeight from edge (@edge1Verts[2],@edge1Verts[3]) to edge @r[2] @r[3]"); lx("vertMap.setEdgeWeight @r[2] @r[3] 0.5"); my @selSetsEdge = lxq("query layerservice edge.selSets ? (@edge1Verts[2],@edge1Verts[3])"); my $selSetsEdgeN = @selSetsEdge; if ($selSetsEdgeN ne "") { lx("select.drop edge"); lx("select.element @edge1Verts[1] edge add @r[2] @r[3]"); for ($i=0; $i<$selSetsEdgeN; $i++) { lxout("transfer $selSetsEdge[$i] SelSet from edge (@edge1Verts[2],@edge1Verts[3]) to edge @r[2] @r[3]"); lx("select.editSet $selSetsEdge[$i] add"); } lx("select.typeFrom polygon"); } #Merge polygon's if ($firstEdgePolysN eq 2) { lx("select.element @edge1Verts[1] polygon add $firstEdgePolys[$polyOn1Edge]"); lx("poly.merge"); } } #Restore selection if ($vertsON ne "") { lx("select.drop vertex"); for ($i=0; $i<$vertsON; $i++) { @vertID = split (/[^0-9]/, @vertsO[$i]); lx("select.element @vertID[1] vertex add @vertID[2]"); } } if ($polysON ne "") { lx("select.drop polygon"); for ($i=0; $i<$polysON; $i++) { @polyID = split (/[^0-9]/, @polysO[$i]); lx("select.element @polyID[1] polygon add @polyID[2]"); } } lx("select.drop edge"); for ($i=0; $i<$edgeN-2; $i++) { @edgeVerts = split (/[^0-9]/, @edgeO[$i]); lx("select.element @edgeVerts[1] edge add @edgeVerts[2] @edgeVerts[3]"); } lx("select.element @edge1Verts[1] edge add @r[2] @r[3]"); } } else {lxout("Select more edges.");} }