MacroScript AngleSelect category:"Piranha-Bytes" tooltip:"AngleSelect" buttonText:"AngleSelect" --icon:#("PiranhaTools", 1) -- buttonText:"AngleSelect" ( global pb_AngleSelect_Running global pb_AngleSelect_WinPos rollout ro_AngleSelect "pb AngleSelect" ( groupBox grp_Range "Angle Range:" pos:[5,5] width:105 height:65 spinner ui_MinDegree "Min: " pos:[10,25] fieldwidth:50 type:#float scale:0.1 range:[0,90,0] spinner ui_MaxDegree "Max: " pos:[10,45] fieldwidth:50 type:#float scale:0.1 range:[0,360,90] button ui_SelectVerts "Select Verts" pos:[10,95] width:95 height:20 groupBox grp_VertColor "Vertex Colors:" pos:[5,75] width:105 height:125 colorPicker ui_colorUnsel pos:[10,125] width:40 height:20 color:white alpha:false colorPicker ui_colorSel pos:[64,125] width:40 height:20 color:black alpha:false label lbl_c "-->" pos:[53,127] button ui_ApplyVertColor "Apply Colors" pos:[10,155] width:95 height:20 progressbar ui_prog pos:[10,180] width:95 height:10 on ui_SelectVerts pressed do ( curObj = (getCurrentSelection())[1] if curObj != undefined do ( doit = true convert = false if (classof curObj.baseObject) != editable_mesh do ( ask = queryBox "BaseObject must be an Editable Mesh, collapse?" if ask == true then convert = true else doit = false ) if doit do ( subobjectLevel = 4 faces = getFaceSelection curObj verts = meshop.getVertsUsingFace curObj faces -- if convert then convertToMesh curObj subobjectLevel = 1 setVertSelection curObj verts ) ) ) on ui_ApplyVertColor pressed do ( curObj = (getCurrentSelection())[1] numVerts = curObj.numVerts cr = ui_ColorSel.color.r cg = ui_ColorSel.color.g cb = ui_ColorSel.color.b ur = ui_ColorUnSel.color.r ug = ui_ColorUnSel.color.g ub = ui_ColorUnSel.color.b progStep = 100.0 / numverts unselList = #{} for v=1 to numVerts do ( --if (mod v 100) == 0 then ui_prog.value = v * progstep w = pointSelection curObj v vcr = ur - (w * (ur - cr) ) vcg = ug - (w * (ug - cg) ) vcb = ub - (w * (ub - cb) ) if w == 0 then unselList[v] = true else meshop.setVertColor curObj.mesh 0 v (color vcr vcg vcb) ) meshop.setVertColor curObj.mesh 0 unselList (color ur ug ub) ui_prog.value = 0 ) function SelectAngleFaces = ( curObj = (getCurrentSelection())[1] if curObj != undefined do ( if classof curObj == editable_patch then addmodifier curObj (Edit_mesh()) subobjectLevel = 4 numFaces = curObj.numFaces angleSelection = #{} minAngle = ui_MinDegree.value maxAngle = ui_MaxDegree.value for f=1 to (numFaces) do ( faceNorm = getFaceNormal curObj f angle = (acos (dot faceNorm [0,0,1] )) if ((angle >= minAngle) and (angle <= maxAngle)) then angleSelection[f] = true ) setFaceSelection curObj angleSelection forceCompleteRedraw() ) ) on ui_MinDegree changed val do ( ui_MinDegree.value = val ui_MaxDegree.range = [val,360, ui_MaxDegree.value] SelectAngleFaces() ) on ui_MaxDegree changed val do ( ui_MaxDegree.value = val ui_MinDegree.range = [0,val, ui_MinDegree.value] SelectAngleFaces() ) on ro_AngleSelect open do ( pb_AngleSelect_Running = true SelectAngleFaces() ) on ro_AngleSelect close do ( pb_AngleSelect_Running = false pb_AngleSelect_WinPos = getDialogPos ro_AngleSelect ) ) ------------------------------------------------------------------------------------------------- if pb_AngleSelect_Running == undefined then pb_AngleSelect_Running = false if pb_AngleSelect_WinPos == undefined then pb_AngleSelect_WinPos = [300,300] if not pb_AngleSelect_Running then createDialog ro_AngleSelect width:117 height:210 pos:pb_AngleSelect_WinPos style:#(#style_sysmenu, #style_toolwindow) )