struct moveToface ( obj, verts, normal, center) ( sortedVerts = verts --when this structur is called the sort the verts immediatly --this cant be called fo rsome reason fn sortVerts = ( for int in verts do ( --print int if (polyop.getvert sObj int)[3] > center[3] then ( if (polyop.getvert sObj int)[1] > center[1] then sortedVerts[2] = int else sortedverts[1] = int ) else ( if (polyop.getvert sObj int)[1] > center[1] then sortedVerts[3] = int else sortedverts[4] = int ) ) --is the face backwards? if normal[2] > 0 then ( sortedverts = #( sortedverts[2], sortedverts[1], sortedverts[4], sortedverts[3] ) ) print "sorted verts " verts = sortedVerts print (verts as array) ) ) rollout jpCornerAligner "CornerAligner" width:162 height:338 ( local targetObj, baseMesh, topLeft, topRight, bottomRight, bottomLeft local targetQuads = #() local quadFaces = #() local Corners = #() local meshSets = #() label lbl21 "Choose the corners:" pos:[5,98] width:146 height:20 pickbutton btn_TopLeft "Top Left" pos:[4,124] width:92 height:24 pickbutton btn_BottomLeft "Bottom Left" pos:[4,198] width:92 height:24 pickbutton btn_TopRight "Top Right" pos:[4,161] width:92 height:24 pickbutton btn_BottomRight "Bottom Right" pos:[4,235] width:92 height:24 label lbl_Topleft "undefined" pos:[101,129] width:52 height:14 label lbl_TopRight "undefined" pos:[103,167] width:52 height:14 label lbl_BottomLeft "undefined" pos:[102,204] width:52 height:14 label lbl_BottomRight "undefined" pos:[101,239] width:52 height:14 button btn_move "Move" pos:[17,280] width:139 height:26 pickbutton btn_target "Destination" pos:[3,25] width:92 height:24 label lbl_destination "undefined" pos:[102,31] width:52 height:14 pickButton btn_base "base Mesh" pos:[6,60] width:87 height:29 label lbl_base "undefined" pos:[101,71] width:48 height:18 fn sortVerts sObj verts center normal= ( sortedverts = #() for int in verts do ( --print int if (polyop.getvert sObj int)[3] > center[3] then ( if (polyop.getvert sObj int)[1] > center[1] then sortedVerts[2] = int else sortedverts[1] = int ) else ( if (polyop.getvert sObj int)[1] > center[1] then sortedVerts[3] = int else sortedverts[4] = int ) ) --is the face backwards? if normal[2] > 0 then ( sortedverts = #( sortedverts[2], sortedverts[1], sortedverts[4], sortedverts[3] ) ) verts = sortedVerts return verts ) --creates array of moveToFace struct for each selected face fn createQuadfacesArray quads = ( --print "create face array:" for i=1 to quads.count do ( holder = movetoface targetObj ((polyop.getvertsusingface targetObj quads[i]) as array) (polyop.getfacenormal targetObj quads[i]) (polyop.getfacecenter targetObj quads[i]) holder.verts = sortverts holder.obj holder.verts holder.center holder.normal quadFaces[i] = holder ) --print quadfaces ) fn createSelectionSets numsets = ( print "create selection sets" selectionSets["Original"] = #( topleft, topRight, bottomRight, bottomLeft, baseMesh) for i=1 to numsets do ( select selectionSets["Original"] maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl select nnl --move $ [50*i,0,0] meshSets[i] = selectionSets["clone" + i as string] = $ ) print meshsets ) fn moveClones numTimes= ( print "move:" print numtimes --This won't run correctly for some reason for i=1 to numtimes do ( print "meshset: " + i as string print i as string print meshsets[i] --holderSelectionSet = selectionset["clone"+i as string] --select holderSelectionSet print quadfaces for j=1 to 4 do ( selectionsets["clone" + i as string][j].pos = polyop.getvert targetObj QuadFaces[i].verts[j] selectionsets["clone"+ i as string][j].dir = quadFaces[i].normal ) selectionsets["clone" + i as string][5].pos = quadFaces[i].center selectionsets["clone" + i as string][5].dir = quadFaces[i].normal ) ) on btn_TopLeft picked corner do ( lbl_TopLeft.caption = corner.name topLeft = corner ) on btn_BottomLeft picked corner do ( lbl_BottomLeft.caption = corner.name bottomLeft = corner ) on btn_TopRight picked corner do ( lbl_TopRight.caption = corner.name topRight = corner ) on btn_BottomRight picked corner do ( lbl_BottomRight.caption = corner.name bottomRight = corner ) on btn_base picked base do ( lbl_base.caption = base.name basemesh = base ) on btn_move pressed do ( createSelectionSets quadFaces.count moveClones quadFaces.count ) on btn_target picked target do ( targetObj = target targetQuads = polyop.getfaceselection targetobj as array --print "obj picked:" --print targetquads createQuadfacesArray targetQuads --print "quadfaces:" --print quadFaces lbl_destination.caption = target.name ) ) tw = newrolloutfloater "jp aligner" 300 300 addrollout jpCornerAligner tw