-- // ************************************ -- // ***** face select: "thin faces" -- // ***** by le1setreter -- // ***** 2011 --- info@le1setreter.de -- // ************************************ rollout faceByAngleSelect "select faces by low angles" ( -- vars: local myThresh = 5 -- (default) threshold local myObj = $selection[1] -- my selected object local myFaceSel = #{} -- faces to select -- interface: spinner spnAngleThresh "angle threshold" align:#left pos:[6,6] width:90 range:[0.00,180.00,myThresh] type:#float button btnSelectFaces "Select Faces" pos:[140,3] width:70 -- funtion: fn selectFaces = ( -- empty selection: myObj = $selection[1] myFaceSel = #{} if ($selection.count >= 2) or ((classOf myObj) != Editable_Mesh) then ( messagebox ("Select 1 object of class \"editable-mesh\" ") ) else ( for f=1 to myObj.numfaces do ( -- get vertexNumbers of current face myFace = getFace myObj f -- get point3 value of each vertex vA = getVert myObj myFace[1] vB = getVert myObj myFace[2] vC = getVert myObj myFace[3] -- create normalized vetors for 2 vertices v1 = normalize (vB - vA) v2 = normalize (vC - vA) v3 = normalize (vA - vB) v4 = normalize (vC - vB) -- get the 3 angles of the triangle angleA = acos (dot v1 v2) angleB = acos (dot v2 v4) angleC = 180-angleA-angleB -- add face to selection if one angle is below given threshold if (angleA <= myThresh) or (angleB <= myThresh) or (angleC <= myThresh) do ( append myfaceSel f ) -- end if ) -- end for subobjectLevel = 3 setFaceSelection myObj myFaceSel ) -- end if else ) --end fn on spnAngleThresh changed val do( myThresh = val ) --end on on btnSelectFaces pressed do( selectFaces() ) -- end on ) -- end rollout createDialog faceByAngleSelect 220 30