--MAXScript Tutorials --LESSON 03 --by Borislav Petrov [FA] --bobo@email.archlab.tuwien.ac.at ----------------------------------------------- --Visit --http://support.ktx.com/~10 --for more MAXScript information and resources. --Visit the Diner --http://support.ktx.com/~8 --for a public discussion on these Tutorials. ----------------------------------------------- --Open a New Max scene --Load the script --PRESS Ctrl+E to Evaluate --Select from Drop-down list to open utility lesson03 "Lesson03" ( group "About..." ( label lesson_label01 "Lesson 03 Script" label lesson_label02 "by Borislav Petrov" label lesson_label03 "Kinetix Forum Assistant" ) group "Settings:" ( radiobuttons geom_mode "Geometry" labels:#("Box","Sphere") align:#left dropdownlist effect_mode "Effect Mode" items:#("Luminosity","Red Channel","Green Channel","Blue Channel","Alpha Channel") spinner sphere_segs "Sphere Segments:" range:[4,16,4] fieldwidth:40 align:#right type:#integer enabled:false spinner base_size "Base Size:" range:[1,1000,100] fieldwidth:40 align:#right spinner multiplier "Size Multiplier:" range:[0.1,10,2] fieldwidth:40 align:#right spinner nth_pixel "Every Nth Pixel:" range:[1,10,1] fieldwidth:40 align:#right type:#integer button get_image "Get Image File" width:140 edittext bmp_name "File" text:"c:\\mxstut\\m3.tga" label size_label "Image Size:???x???" ) group "Action" ( button start_process "LET'S DO IT!" width:140 height:30 align:#center enabled:false button remove_all "Clean up scene" width:140 align:#center ) fn Check_bmp_size bmp_n = ( try ( bmp_check = openbitmap bmp_n bmp_w = bmp_check.width bmp_h = bmp_check.height close bmp_check size_label.text = "Image Size:" + bmp_w as string + "x" + bmp_h as string ) catch ( start_process.enabled = false ) ) on geom_mode changed state do ( if state == 1 then sphere_segs.enabled = false else sphere_segs.enabled = true ) on bmp_name entered txt do ( file_check = getFiles bmp_name.text if file_check.count == 1 then ( start_process.enabled = true Check_bmp_size bmp_name.text ) else ( size_label.text = "Image Size:???x???" start_process.enabled = false ) ) on get_image pressed do ( pick_image = selectBitmap caption:"Get Image File" if pick_image != undefined then ( bmp_name.text = pick_image.filename start_process.enabled = true Check_bmp_size bmp_name.text ) ) on start_process pressed do ( work_bmp = openbitmap bmp_name.text bmp_w = work_bmp.width bmp_h = work_bmp.height progressstart "Generating Objects..." for h = 1 to bmp_h by nth_pixel.value do ( pixel_line = getpixels work_bmp [0,(h-1)] bmp_w if not progressupdate (h as float /bmp_h *100) then exit for w = 1 to bmp_w by nth_pixel.value do ( case effect_mode.selection of ( 1: size_value = base_size.value + multiplier.value*(pixel_line[w].r+pixel_line[w].g+pixel_line[w].b)/3 2: size_value = base_size.value + multiplier.value*(pixel_line[w].r) 3: size_value = base_size.value + multiplier.value*(pixel_line[w].g) 4: size_value = base_size.value + multiplier.value*(pixel_line[w].b) 5: size_value = base_size.value + multiplier.value*(pixel_line[w].alpha) ) case geom_mode.state of ( 1: new_object = box length:base_size.value width:base_size.value height:size_value 2: new_object = sphere radius:(size_value/2) segs:sphere_segs.value ) new_object.pos = [w*base_size.value, (-h*base_size.value), 0] new_object.name = uniquename "3rd_Lesson" new_material = standardmaterial diffuse:pixel_line[w] new_material.name = new_object.name new_object.material = new_material )--end w loop )--end h loop progressend () max views redraw close work_bmp )--end on button pressed on remove_all pressed do ( q_answer = queryBox "You are about to delete all objects\ncreated by the Utility.\nAre you sure?" if q_answer then ( delete_array = $3rd_Lesson* as array delete delete_array ) ) on lesson03 open do ( file_check = getFiles bmp_name.text if file_check.count == 1 then ( Check_bmp_size bmp_name.text start_process.enabled = true ) else ( messagebox "The Image file couldn't be found!\nPlease select a valid one." ) ) )--end utility