USAGE
- Position the working pivot
- optionally select some of the verts (if none selected, will select all)
- optionally set strength to a value like 0.4
- run script
-- MixeScript snippet: SplayNormals -- Splays selected normals away from the working pivot --USAGE -- Position the working pivot -- select some or all of the verts (if none selected, will select all) -- optionally set strength to a value like 0.4 -- run script --SETTINGS Strength = 1.0 -- when set to 1.0, entirely replaces existing normal direction. at 0.0, does not adjust normal at all. max modify mode obj = $ modPanel.setCurrentObject obj enMods = (for m in obj.modifiers where classof m == editnormals collect m) enMod = enMods[1] subobjectLevel = 1 --verts vertarray = #{} vertarray = polyop.getVertSelection obj if vertarray.numberSet == 0 then -- no selection, select all ( polyop.setVertSelection obj #all vertarray = polyop.getVertSelection obj ) if enMod == undefined then ( enMod = editnormals() modPanel.addModToSelection (enMod) ui:on ) WPTM = WorkingPivot.getTM() splayfrom = (WPTM[4]) modPanel.setCurrentObject obj normarray = enMod.GetSelection() --enMod.MakeExplicit () objpos = obj.pos modPanel.setCurrentObject enMod for vert in vertarray do ( vertpos = (enMod.GetVertex vert node:obj) + objpos newnormangle = normalize (vertpos - splayfrom) tempbitarray = #{vert} norms = #{} enMod.ConvertVertexSelection tempbitarray norms enMod.MakeExplicit selection:norms for norm in norms do ( existingnormangle = normalize (enMod.GetNormal (norm)) finalangle = normalize ( newnormangle * Strength + existingnormangle * (1 - Strength)) enMod.SetNormal norm finalangle ) )