/*////////// SCRIPT: Select | Invert Faces By Element v1.0 //////////*/ /*////////// WRITTEN BY: Branko Zivkovic //////////*/ /*////////// EMAIL: barigazy@hotmail.com //////////*/ macroScript SelectAllFacesByElement category:"bgaTools" buttontext:"Select All Faces By Element" tooltip:"Select All Faces By Element" ( fn select_all_faces_by_element obj = if isValidNode obj do ( local objClasses = #(Editable_Poly,Polymeshobject,Editable_Mesh) local modsClasses = #(Edit_Poly, Poly_Select, Edit_Mesh, Mesh_Select) if (idx = findItem objClasses (classof obj)) != 0 do ( elems = #() faces = obj.faces as bitarray geuf = if idx < 3 then polyop.getElementsUsingFace else meshop.getElementsUsingFace while (f = (faces as array)[1]) != null do (el = geuf obj f ; append elems (geuf obj f) ; faces -= el) local facelist = if obj.modifiers.count == 0 then getFaceSelection obj else ( if findItem modsClasses (classof obj.modifiers[1]) != 0 do getFaceSelection obj obj.modifiers[1] ) if not (isKindOf facelist BitArray) then messageBox "Select some faces first!" title:"Warning" beep:off else ( local eleNum = #{} if not facelist.isEmpty do ( for i = 1 to elems.count do ( for j in facelist where findItem elems[i] j != 0 do (append eleNum i ; exit) ) ) local eleFaces = #{} if eleNum.numberset == 1 then eleFaces = elems[eleNum.count] else (for i in eleNum do eleFaces += elems[i]) if obj.modifiers.count == 0 then setFaceSelection obj eleFaces else setFaceSelection obj obj.modifiers[1] eleFaces ) ) ) on execute do ( if selection.count == 0 then messageBox "Select an object first!" title:"Warning" beep:off else ( if not (canConvertTo selection[1] Editable_Poly) then messageBox "Works Only With E-Poly and E-Mesh Object!" title:"Warning" beep:off else ( select_all_faces_by_element selection[1] ) ) ) ) macroScript InvertFacesByElement category:"bgaTools" buttontext:"Invert Faces By Element" tooltip:"Invert Faces By Element" ( fn invert_faces_by_element obj = if isValidNode obj do ( local objClasses = #(Editable_Poly,Polymeshobject,Editable_Mesh) local modsClasses = #(Edit_Poly, Poly_Select, Edit_Mesh, Mesh_Select) if (idx = findItem objClasses (classof obj)) != 0 do ( elems = #() faces = obj.faces as bitarray geuf = if idx < 3 then polyop.getElementsUsingFace else meshop.getElementsUsingFace while (f = (faces as array)[1]) != null do (el = geuf obj f ; append elems (geuf obj f) ; faces -= el) local facelist = if obj.modifiers.count == 0 then getFaceSelection obj else ( if findItem modsClasses (classof obj.modifiers[1]) != 0 do getFaceSelection obj obj.modifiers[1] ) if not (isKindOf facelist BitArray) then messageBox "Select some faces first!" title:"Warning" beep:off else ( local eleNum = #{} if not facelist.isEmpty do ( for i = 1 to elems.count do ( for j in facelist where findItem elems[i] j != 0 do (append eleNum i ; exit) ) ) local eleFaces = #{} if eleNum.numberset == 1 then eleFaces = elems[eleNum.count]-facelist else (for i in eleNum do eleFaces += (elems[i]-=facelist)) if obj.modifiers.count == 0 then setFaceSelection obj eleFaces else setFaceSelection obj obj.modifiers[1] eleFaces ) ) ) on execute do ( if selection.count == 0 then messageBox "Select an object first!" title:"Warning" beep:off else ( if not (canConvertTo selection[1] Editable_Poly) then messageBox "Works Only With E-Poly and E-Mesh Object!" title:"Warning" beep:off else ( invert_faces_by_element selection[1] ) ) ) )