try(DestroyDialog rc_slicer)catch() Rollout rc_slicer "RailClone Slicer" ( -------------- --variables-- -------------- local sourceObject local VertSlices = #(sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier()) local VertOnOff = #(#(0,0,1), #(0,2,3), #(0,4,5), #(0,6,7), #(0,8,0)) local HorizOnOff = #(#(0,0,1), #(0,2,3), #(0,4,5), #(0,6,0)) local HorizontalSlices = #(sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier(),sliceModifier()) local vertNames = #("Start", "Default", "XEvenly", "Corner", "End") local horizNames = #("Bottom", "YEvenly", "Default", "Top") local bbSize local globalRowHeight local a2sArray =0 -------------- --functions-- -------------- fn addASlice arrayPosition horizOrVert slicePos width = ( if horizOrVert == 1 then ( vertOnOff[arrayPosition][1] = 1 if vertOnOff[arrayPosition][2] != 0 then ( vertSlices[vertOnOff[arrayPosition][2]].name = vertNames[arrayPosition] addModifier sourceObject (vertSlices[vertOnOff[arrayPosition][2]]) VertSlices[vertOnOff[arrayPosition][2]].Slice_Plane.rotation = eulertoquat(eulerAngles 0 90 0) VertSlices[vertOnOff[arrayPosition][2]].Slice_Plane.position.x = slicePos - width ) if vertOnOff[arrayPosition][3] != 0 then ( vertSlices[vertOnOff[arrayPosition][3]].name = vertNames[arrayPosition] addModifier sourceObject (vertSlices[vertOnOff[arrayposition][3]]) VertSlices[vertOnOff[arrayPosition][3]].Slice_Plane.rotation = eulertoquat(eulerAngles 0 90 0) VertSlices[vertOnOff[arrayPosition][3]].Slice_Plane.position.x = slicePos + width ) ) else ( HorizOnOff[arrayPosition][1] = 1 if HorizOnOff[arrayPosition][2] != 0 then ( HorizontalSlices[HorizOnOff[arrayPosition][2]].name = HorizNames[arrayPosition] addModifier sourceObject (HorizontalSlices[HorizOnOff[arrayPosition][2]]) HorizontalSlices[HorizOnOff[arrayPosition][2]].Slice_Plane.rotation = eulertoquat(eulerAngles 90 0 0) HorizontalSlices[HorizOnOff[arrayPosition][2]].Slice_Plane.position.y = slicePos - width ) if HorizOnOff[arrayPosition][3] != 0 then ( HorizontalSlices[HorizOnOff[arrayPosition][3]].name = HorizNames[arrayPosition] addModifier sourceObject (HorizontalSlices[HorizOnOff[arrayposition][3]]) HorizontalSlices[vertOnOff[arrayPosition][3]].Slice_Plane.rotation = eulertoquat(eulerAngles 90 0 0) HorizontalSlices[vertOnOff[arrayPosition][3]].Slice_Plane.position.y = slicePos + width ) ) ) fn positionASlice arrayPosition horizOrVert slicePos width = ( if horizOrVert == 1 then ( if vertOnOff[arrayPosition][2] != 0 then ( VertSlices[vertOnOff[arrayPosition][2]].Slice_Plane.position.x = slicePos - width ) if vertOnOff[arrayPosition][3] != 0 then ( VertSlices[vertOnOff[arrayPosition][3]].Slice_Plane.position.x = slicePos + width ) ) else ( if HorizOnOff[arrayPosition][2] != 0 then ( HorizontalSlices[HorizOnOff[arrayPosition][2]].Slice_Plane.position.y = slicePos - width ) if HorizOnOff[arrayPosition][3] != 0 then ( HorizontalSlices[vertOnOff[arrayPosition][3]].Slice_Plane.position.y = slicePos + width ) ) ) fn removeASlice arrayPosition horizOrVert = ( if horizOrVert == 1 then ( if vertOnOff[arrayPosition][2] != 0 then ( deleteModifier sourceObject (VertSlices[vertOnOff[arrayPosition][2]]) ) if vertOnOff[arrayPosition][3] != 0 then ( deleteModifier sourceObject (VertSlices[vertOnOff[arrayPosition][3]]) ) VertOnOff[arrayPosition][1] = 0 ) else ( if HorizOnOff[arrayPosition][2] != 0 then ( deleteModifier sourceObject (HorizontalSlices[HorizOnOff[arrayPosition][2]]) ) if HorizOnOff[arrayPosition][3] != 0 then ( deleteModifier sourceObject (HorizontalSlices[HorizOnOff[arrayPosition][3]]) ) HorizOnOff[arrayPosition][1] = 0 ) ) fn createSlicesAll void = ( if a2sarray != 0 then ( for hn=1 to 4 do ( if HorizOnOff[hn][1] == 1 then ( if horizOnOff[hn][2] != 0 then ( HorizontalSlices[horizOnOff[hn][2]].Slice_Type = 3 ) if horizOnOff[hn][3] != 0 then ( horizontalSlices[horizOnOff[hn][3]].Slice_Type = 2 ) for i=1 to 5 do ( if VertOnOff[i][1] == 1 then ( if vertOnOff[i][2] != 0 then ( vertSlices[vertOnOff[i][2]].Slice_Type = 2 ) if vertOnOff[i][3] != 0 then ( vertSlices[vertOnOff[i][3]].Slice_Type = 3 ) maxOps.cloneNodes sourceObject cloneType:#copy newNodes:&newSegment newSegment.name = sourceObject.name + " " +vertNames[i] + "-" + horizNames[hn] converttopoly newSegment for n = 1 to 8 do ( vertSlices[n].Slice_Type=1 ) ) ) for n = 1 to 6 do ( HorizontalSlices[n].Slice_Type=1 print "2d Array" ) ) )) else ( for i=1 to 5 do ( if VertOnOff[i][1] == 1 then ( if vertOnOff[i][2] != 0 then ( vertSlices[vertOnOff[i][2]].Slice_Type = 2 ) if vertOnOff[i][3] != 0 then ( vertSlices[vertOnOff[i][3]].Slice_Type = 3 ) maxOps.cloneNodes sourceObject cloneType:#copy newNodes:&newSegment newSegment.name = sourceObject.name + " " + vertNames[i] converttopoly newSegment for n = 1 to 8 do ( vertSlices[n].Slice_Type=1 print "1D Array" ) ) ) ) ) fn deleteAllSlices void = ( for hn = 1 to 4 do ( if HorizOnOff[hn][1] != 0 then ( if HorizOnOff[hn][2] != 0 then ( deleteModifier sourceObject (HorizontalSlices[HorizOnOff[hn][2]]) ) if HorizOnOff[hn][3] != 0 then ( deleteModifier sourceObject (HorizontalSlices[HorizOnOff[hn][3]]) ) ) ) for i = 1 to 5 do ( if vertOnOff[i][1] != 0 then ( if vertOnOff[i][2] != 0 then ( deleteModifier sourceObject (VertSlices[vertOnOff[i][2]]) ) if vertOnOff[i][3] != 0 then ( deleteModifier sourceObject (VertSlices[vertOnOff[i][3]]) ) ) ) ) -------------------------------------- ----------Add Interface------------ -------------------------------------- Pickbutton btn_pick_geometry "Pick Geometry" across:2 button btn_clear "c" enabled:false group "L1S/Columns" ( checkbox chk_left "Start/Left" enabled:false across:2 spinner spn_left_amount enabled:false range:[-999999,999999,0] type:#worldunits fieldwidth:35 checkbox chk_right "End/Right" enabled:false across:2 spinner spn_right_amount enabled:false range:[-999999,999999,0] type:#worldunits fieldwidth:35 checkbox chk_x_evenly "X Evenly" enabled:false spinner spn_evenly_position "pos" range:[-999999,999999,0] enabled:false type:#worldunits fieldwidth:35 across:2 spinner spn_evenly_size "size" enabled:false range:[-999999,999999,0] type:#worldunits fieldwidth:35 checkbox chk_corner "Corner" enabled:false spinner spn_corner_position "pos" enabled:false range:[-999999,999999,0] fieldwidth:35 across:2 spinner spn_corner_size "size" enabled:false range:[-999999,999999,0] type:#worldunits fieldwidth:35 checkbox chk_xdefault "Default" enabled:false spinner spn_xdefault_position "pos" enabled:false type:#worldunits range:[-999999,999999,0] across:2 fieldwidth:35 spinner spn_xdefault_size "size" enabled:false range:[-999999,999999,0] type:#worldunits fieldwidth:35 ) group "Rows" ( checkbox chk_global_size "Global size" checked:true enabled:false across:2 spinner spn_global_size_amount "size" range:[-999999,999999,0] fieldwidth:35 enabled:false type:#worldunits checkbox chk_bottom_height "Bottom" enabled:false across:2 spinner spn_bottom_height_amount "size" range:[-999999,999999,0] fieldwidth:35 enabled:false type:#worldunits checkbox chk_top_height "Top" enabled:false across:2 spinner spn_top_height_amount "size" range:[-999999,999999,0] fieldwidth:35 enabled:false type:#worldunits checkbox chk_yevenly "Y Evenly" enabled:false spinner spn_yevenly_position "pos" enabled:false range:[-999999,999999,0] fieldwidth:35 across:2 type:#worldunits spinner spn_yevenly_size "size" range:[-999999,999999,0] fieldwidth:35 enabled:false type:#worldunits checkbox chk_default "Default" enabled:false spinner spn_default_position "pos" enabled:false across:2 range:[-999999,999999,0] fieldwidth:35 type:#worldunits spinner spn_default_size "size" enabled:false range:[-999999,999999,0] fieldwidth:35 type:#worldunits ) button btn_slice_planes "Slice Geometry" enabled:false -------------------------------------- ----------Button actions------------ -------------------------------------- on btn_pick_geometry picked obj do ( btn_pick_geometry.text = obj.name sourceObject = obj bbSize = (sourceObject.max - sourceObject.min) sourceObject.pivot = sourceObject.center resetxform sourceObject btn_slice_planes.enabled=true btn_clear.enabled=true chk_left.enabled=true chk_right.enabled=true chk_x_evenly.enabled=true chk_corner.enabled=true chk_xdefault.enabled=true chk_bottom_height.enabled=true chk_top_height.enabled=true chk_yevenly.enabled=true chk_default.enabled=true chk_global_size.enabled=true spn_global_size_amount.enabled=true ) on btn_clear pressed do ( deleteAllSlices void DestroyDialog rc_slicer CreateDialog rc_slicer ) on chk_left changed state do ( if state == on then ( addASlice 1 1 (((bbSize[1])/2*-1) + spn_left_amount.value) 0 spn_left_amount.enabled=true ) else ( removeASlice 1 1 spn_left_amount.enabled=false ) ) on spn_left_amount changed val do ( positionASlice 1 1 (((bbSize[1])/2*-1)+val) 0 ) on chk_right changed state do ( if state == on then ( addASlice 5 1 (((bbSize[1])/2) - spn_right_amount.value) 0 spn_right_amount.enabled=true ) else ( removeASlice 5 1 spn_right_amount.enabled=false ) ) on spn_right_amount changed val do ( positionASlice 5 1 ((((bbSize[1])/2))-val) 0 ) on chk_x_evenly changed state do ( if state == on then ( spn_evenly_position.enabled=true spn_evenly_size.enabled=true addASlice 3 1 spn_evenly_position.value (spn_evenly_size.value/2) spn_right_amount.enabled=true ) else ( removeASlice 3 1 spn_evenly_position.enabled=false spn_evenly_size.enabled=false ) ) on spn_evenly_position changed val do ( positionASlice 3 1 val (spn_evenly_size.value/2) ) on spn_evenly_size changed val do ( positionASlice 3 1 spn_evenly_position.value (val/2) ) on chk_corner changed state do ( if state == on then ( spn_corner_position.enabled=true spn_corner_size.enabled=true addASlice 4 1 spn_corner_position.value (spn_corner_size.value/2) ) else ( removeASlice 4 1 spn_corner_position.enabled=false spn_corner_size.enabled=false ) ) on spn_corner_position changed val do ( positionASlice 4 1 val (spn_corner_size.value/2) ) on spn_corner_size changed val do ( positionASlice 4 1 spn_corner_position.value (val/2) ) on chk_xdefault changed state do ( if state == on then ( spn_xdefault_position.enabled=true spn_xdefault_size.enabled=true addASlice 2 1 spn_xdefault_position.value (spn_xdefault_size.value/2) ) else ( removeASlice 2 1 spn_default_position.enabled=false spn_default_size.enabled=false ) ) on spn_xdefault_position changed val do ( positionASlice 2 1 val (spn_xdefault_size.value/2) ) on spn_xdefault_size changed val do ( positionASlice 2 1 spn_xdefault_position.value (val/2) ) -------------------------------------- ----------Vertical Buttons--------- -------------------------------------- on chk_global_size changed state do ( if state == on then ( val = spn_global_size_amount.value positionASlice 1 0 ((bbSize[2])/2*-1) val positionASlice 2 0 spn_yevenly_position.value (val/2) positionASlice 3 0 spn_default_position.value (val/2) positionASlice 4 0 ((bbSize[2])/2) val spn_global_size_amount.enabled=true spn_bottom_height_amount.enabled=false spn_top_height_amount.enabled=false spn_yevenly_size.enabled=false spn_default_size.enabled=false ) else ( spn_global_size_amount.enabled=false if chk_bottom_height.state == on then spn_bottom_height_amount.enabled=true if chk_top_height.state == on then spn_top_height_amount.enabled=true if chk_yevenly.state == on then spn_yevenly_size.enabled=true if chk_default.state == on then spn_default_size.enabled=true positionASlice 1 0 ((bbSize[2])/2*-1) spn_bottom_height_amount.value positionASlice 2 0 spn_yevenly_position.value (spn_yevenly_size.value/2) positionASlice 3 0 spn_default_position.value (spn_default_size.value/2) positionASlice 4 0 ((bbSize[2])/2) spn_top_height_amount.value ) ) on spn_global_size_amount changed val do ( positionASlice 1 0 ((bbSize[2])/2*-1) val positionASlice 2 0 spn_yevenly_position.value (val/2) positionASlice 3 0 spn_default_position.value (val/2) positionASlice 4 0 ((bbSize[2])/2) val ) on chk_bottom_height changed state do ( if state == on then ( a2sarray+=1 if chk_global_size.state == on then val = spn_global_size_amount.value else val = spn_bottom_height_amount.value addASlice 1 0 (((bbSize[2])/2*-1) + val) 0 if chk_global_size.state == on then spn_bottom_height_amount.enabled=false else spn_bottom_height_amount.enabled=true ) else ( a2sarray-=1 removeASlice 1 horizontal spn_bottom_height_amount.enabled=false ) ) on spn_bottom_height_amount changed val do ( positionASlice 1 0 ((bbSize[2])/2*-1) val ) on chk_top_height changed state do ( if state == on then ( a2sarray+=1 if chk_global_size.state == on then val = spn_global_size_amount.value else val = spn_top_height_amount.value addASlice 4 0 (((bbSize[2])/2) - val) 0 if chk_global_size.state == on then spn_top_height_amount.enabled=false else spn_top_height_amount.enabled=true ) else ( a2sarray-=1 removeASlice 4 0 spn_top_height_amount.enabled=false ) ) on spn_top_height_amount changed val do ( positionASlice 4 0 ((bbSize[2])/2) val ) on chk_yevenly changed state do ( if state == on then ( a2sarray+=1 spn_yevenly_position.enabled=true if chk_global_size.state == on then val = spn_global_size_amount.value else val = spn_yevenly_size.value addASlice 2 0 spn_yevenly_position.value (val/2) if chk_global_size.state == on then spn_yevenly_size.enabled=false else spn_yevenly_size.enabled=true ) else ( a2sarray-=1 removeASlice 2 0 spn_yevenly_position.enabled=false ) ) on spn_yevenly_position changed val do ( if chk_global_size.state == on then sizeval = spn_global_size_amount.value else sizeval = spn_yevenly_size.value positionASlice 2 0 val (sizeval/2) ) on spn_yevenly_size changed val do ( positionASlice 2 0 spn_yevenly_position.value (val/2) ) on chk_default changed state do ( if state == on then ( a2sarray+=1 spn_default_position.enabled=true if chk_global_size.state == on then val = spn_global_size_amount.value else val = spn_default_size.value addASlice 3 0 spn_default_position.value (val/2) if chk_global_size.state == on then spn_default_size.enabled=false else spn_default_size.enabled=true ) else ( a2sarray-=1 removeASlice 3 0 spn_default_position.enabled=false ) ) on spn_default_position changed val do ( if chk_global_size.state == on then sizeval = spn_global_size_amount.value else sizeval = spn_default_size.value positionASlice 3 0 val (sizeval/2) ) on spn_default_size changed val do ( positionASlice 3 0 spn_default_position.value (val/2) ) --------------------------------- ---------Create Slices--------- --------------------------------- on btn_slice_planes pressed do ( print "Slice button pressed" createSlicesAll 0 ) ) CreateDialog rc_slicer